Arduino Mega Server

Модератор: Alex

alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

И снова добрый вечер!!!
Задачи, которые планирует или пытается решить сообщество достаточно амбициозны,
Задачи процентов на 90 примитивны, отследить показания какого либо датчика, сделать термометр, отследить нажатие на кнопку, для них хватит и ардуино(то есть ардуино хватит для всего). ESP-IDF уровень повыше там нет ардуино, а значит весь код вы должны писать сами, соответственно если человек не может писать на ардуине то ему в IDF делать нечего)))
На конструкцию if(!Ethernet) или (!server) компилятор ругается
а скажите пожалуйста, что Вы хотели сказать с помощью этой конструкции?
В примерах в том же arduino ide для esp есть конструкции такие...и они вполне работают
К сожалению человек не разобрался(((
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am

Re: Arduino Mega Server

Сообщение eGorka »

olmoro писал(а): Ср апр 01, 2020 10:02 am... Задачи, которые планирует или пытается решить сообщество достаточно амбициозны ...
Сразу Alex-а вспомнил...
Последний раз редактировалось eGorka Чт апр 02, 2020 6:29 pm, всего редактировалось 1 раз.
olmoro
Сообщения: 40
Зарегистрирован: Пт окт 13, 2017 9:37 pm
Откуда: Выборг

Re: Arduino Mega Server

Сообщение olmoro »

На конструкцию if(!Ethernet) или (!server) компилятор ругается
а скажите пожалуйста, что Вы хотели сказать с помощью этой конструкции?
В примерах в том же arduino ide для esp есть конструкции такие...и они вполне работают
К сожалению человек не разобрался(((
Скорее всего нарушено правило объявлять, в частности переменную, ранее чем её использовать. Особенно трудно соблюдать это правило, если в проекте на Arduino IDE несколько файлов .ino
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am

Re: Arduino Mega Server

Сообщение eGorka »

Smeech писал(а): Ср апр 01, 2020 12:06 pm Спасибо, ребята, за советы и примерное указание пути, куда двигаться. Потихонечку будем продвигаться.
Пока есть практический вопрос. При сбое питания (выключили-включили свет) ардуина стартует быстрее, чем роутер, и
пытается подцепиться к сети раньше, чем эта сеть появляется. Пытается однократно, и больше попыток не предпринимает. Как отследить программно наличие/отсутствие сети, чтобы проинициализировать модуль ethernet заново? На конструкцию if(!Ethernet) или (!server) компилятор ругается, хотя вроде где-то встречал аналогичную проверку типа while(!Serial) в каких-то скетчах примеров.
Костыль
SPOILERSPOILER_SHOW

Код: Выделить всё

#include "SPI.h"
#include "Ethernet.h"

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(10, 0, 0, 10); // Ваш IP
bool router_connect = 0;

void setup() {
  Ethernet.init(10);
  Serial.begin(115200);
  Serial.println("Ethernet example");
  Ethernet_Init();
}

void loop() {
  if(!router_connect){
    Ethernet_Init();
  }
}

void Ethernet_Init(){
  if(Ethernet.begin(mac)){
    Serial.println("Router connected.");
    Ethernet.setLocalIP(ip);
    router_connect = 1;
  }else{
    Serial.println("Router not connected.");
    router_connect = 0;
  }
}
alexsis_76
Сообщения: 792
Зарегистрирован: Пт янв 22, 2016 10:08 am

Re: Arduino Mega Server

Сообщение alexsis_76 »

Добрый вечер друзья!!!
Касаемо
if(!Ethernet) или (!server)
так как конструкции вырваны из контекста, понять их смысл затруднительно..., но мы попробуем)))
Данные синтаксические конструкции обычно используют для проверки значений переменных и возвращаемых функциями значений, возвращаемые значения обычно имеют True или False ну или 1 или 0. if(!Ethernet) означает "Если Ethernet не равно True", то есть оно равно False, но в данном случае Ethernet это скорей всего экземпляр класса EthernetClass и он не может быть не True не False.
(!server) скорей всего то же самое
EthernetServer server(80);
.r
Код
#include "SPI.h"
#include "Ethernet.h"

byte mac[] = {0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED};
IPAddress ip(10, 0, 0, 10); // Ваш IP
bool router_connect = 0;

void setup() {
Ethernet.init(10);
Serial.begin(115200);
Serial.println("Ethernet example");
Ethernet_Init();
}

void loop() {
if(!router_connect){
Ethernet_Init();
}
}

void Ethernet_Init(){
if(Ethernet.begin(mac)){
Serial.println("Router connected.");
Ethernet.setLocalIP(ip);
router_connect = 1;
}else{
Serial.println("Router not connected.");
router_connect = 0;
}
}
в принципе правильный но я бы несколько модифицировал его
Ethernet.begin(mac)
производит инициализацию W5100 и если чипа не обнаружено возвращает 0, в связи с этим в
}else{
Serial.println("Router not connected.");
router_connect = 0;
}
довольно сложно понять почему произошло событие Router not connected., то ли с роутером беда, то ли W5100 не прошла инициализацию.
Еще бы я добавил следующую строку
while (Ethernet.linkStatus() == LinkOFF) {
delay(1000)
Serial.println("Ethernet cable is not connected.");
}
- тут как говорится без комментариев))
Ethernet_Init() сделал бы с returnom и убрал глобальную переменную
bool router_connect
if(!router_connect){
Ethernet_Init();
}
вот это трансформировал бы в
wile(!router_connect){
delay(1)
Ethernet_Init();
}
так как без инициализации сетевого контроллера дальнейшее исполнение кода бессмысленно и перенес бы это в Setup
Ну вот в принципе и все))), можете задавать вопросы))))
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am

Re: Arduino Mega Server

Сообщение eGorka »

alexsis_76 писал(а): Чт апр 02, 2020 1:24 pmЕще бы я добавил следующую строку
while (Ethernet.linkStatus() == LinkOFF) {
delay(1000)
Serial.println("Ethernet cable is not connected.");
}
Ethernet.linkStatus
"This feature is only available when using the W5200 and W5500 Ethernet controller chips."
Эта функция доступна только при использовании микросхем контроллера W5200 и W5500.
ссылка
так как без инициализации сетевого контроллера дальнейшее исполнение кода бессмысленно и перенес бы это в Setup
Всё зависит от того, что за код у Smeech-а, просто веб-морда или сетевой обмен с чем-то.
Smeech
Сообщения: 12
Зарегистрирован: Сб мар 21, 2020 9:28 am

Re: Arduino Mega Server

Сообщение Smeech »

У меня AMS 0.17 на бутерброде мега+шилд на w5100. Что-то потихоньку прикручиваю свое, т.е. есть уже код, который работает и без сетевого соединения. Факт, что модуль Ethernet в AMS не стартует после сбоя питания, заметил давно, и вот случайно наткнулся где-то на код

Код: Выделить всё

Serial.begin(9600);
while (!Serial){;;} //ожидание инициализации
из чего сделал вывод, что объект некоего класса появляется в памяти после инициализации методом begin. И если он есть, то логически он единица. Иначе - ноль, или ложь. (в js вроде так, но боюсь напутать..). Конструкцией if (Ethernet) я хотел проверить результат применения метода Ethernet.begin(mac,ip). Не вышло :) Благодарю за предложения, попробую, думаю разберусь.
В идеале было бы и при старте системы дожидаться появления сети (загрузки роутера после появления питания), ну и по ходу работы периодически справляться о наличии соединения. Хотя, второе может и избыточно. Интуитивно кажется, что если выдернуть сетевой шнур "на горячую", а потом воткнуть заново, то все продолжит работать. Надо попробовать будет.
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am

Re: Arduino Mega Server

Сообщение eGorka »

Попробовал запустить АМС(2560 + W5100), лядь...
Мало того, что библиотека Ethernet в архиве ams_017.zip стара как говно мамонта, так она ещё и модифицирована.
Аватара пользователя
nick7zmail
Сообщения: 7573
Зарегистрирован: Пн окт 28, 2013 8:14 am
Откуда: Екатеринбург

Re: Arduino Mega Server

Сообщение nick7zmail »

eGorka писал(а): Пт апр 03, 2020 8:11 am Попробовал запустить АМС(2560 + W5100), лядь...
Мало того, что библиотека Ethernet в архиве ams_017.zip стара как говно мамонта, так она ещё и модифицирована.
Да...она изначально была модифицирована Alex-ом, т.к. стандартных функций там то ли не хватало, то ли работали они неправильно.
Raspberry Pi3+Broadlink+esp8266 (blynk)+AMS
Если вам помогло какое-либо сообщение - не забывайте пользоваться кнопкой "СПАСИБО".
:arrow: Услуги в профиле коннект
>>>>>Мой новый канал на ютутбе, подписывайтесь!<<<<<
eGorka
Сообщения: 182
Зарегистрирован: Чт ноя 24, 2016 10:47 am

Re: Arduino Mega Server

Сообщение eGorka »

Теперь на NTP зависает

Код: Выделить всё

09:06:21.236 -> Module NTP...
09:06:21.236 ->  Local port: 123
09:06:21.236 -> ============
09:06:21.236 -> Module Time...
09:06:21.236 ->  NTP sync...
09:06:21.236 ->  Transmit NTP request (88.147.254.235:123)
А теперь не зависает )

Код: Выделить всё

10:23:58.223 -> Module NTP...
10:23:58.223 ->  Local port: 123
10:23:58.223 -> ============
10:23:58.223 -> Module Time...
10:23:58.223 ->  NTP sync...
10:23:58.223 ->  Transmit NTP request (88.147.254.235:123) Receive NTP response
10:23:58.316 -> ============
10:23:58.503 -> 2020-04-03 10:23:58 Module Server... started
Было:

Код: Выделить всё

  eepromInit();

  ethernetInit();
  sdCardInit();
  
  #ifdef SD_INFO_FEATURE
    sdInfoInit();
  #endif
  #ifdef SD_FILES_FEATURE
    sdFilesInit();
  #endif
  #ifdef NTP_FEATURE
    ntpInit();
  #endif
  timeInit();
Стало:

Код: Выделить всё

  eepromInit();

  sdCardInit();
  
  #ifdef SD_INFO_FEATURE
    sdInfoInit();
  #endif
  #ifdef SD_FILES_FEATURE
    sdFilesInit();
  #endif
  ethernetInit();
  #ifdef NTP_FEATURE
    ntpInit();
  #endif
  timeInit();
Порядок инициализации модулей это нечто.
Ответить