ping для Arduino UNO/Mega и Ethernet Shield W5100
HTML-код
- Опубликовано: 4 окт 2024
- Реализация ping для Arduino UNO/Mega и Ethernet Shield W5100.
Код примера: drive.google.c...
W5100 datasheet: drive.google.c...
W5100 errata: drive.google.c...
Скетч умного реле на Arduino Mega с поддержкой RFID, DS1820 и т.д. и т.п. с аппаратным ватчдогом и ватчдогом сетевого интерфейса с помощью пингов: drive.google.c...
Вариант кода для версии библиотеки Ethernet 2.0: drive.google.c...
Спасибо, ньюансы это то о чем узнаешь после покупки, а тут предупредили.
Надеюсь все-таки собрать watchdog на перезагрузку свитча.
Алексей, здравствуйте! Здорово, что удается Вам находить время и на модернизацию Вашего Умного Реле!!!
Я думаю прикрутить к нему GSM модуль Sim800L, Работающий на Arduino Nano. Неплохо было бы иметь Log из COM Порта Этой Nano. Т.е. добавить Функцию в Mega Rele чтение COM порта ( например 2-го или выбирать порт) и выводить в окно общего Лога.
Применение:
1. Nano сможет принимая команду от GSM модуля, перезагрузить MEGA аппаратно. Это еще один вариант борьбы с зависанием.
2. Можно будет контролировать состояние Дополнительных Модулей системы - все тот же Nano c Sim800L. через Log - такой вот взаимный контроль получится. Nano контролирует MEGA, А MEGA видит что с периферией ( Nano) или что либо еще).
_Мужик!! Ты решил мою многодневную головную боль! Желаю тебе здоровья!!!!_
с помощью этава устройства можно роутер перезагружать если завис?
Алексей, подскажите пожалуйста, при компиляции скетча ругается на строчку:
EthernetClass::_server_port[socket] = 0;
пишет много ошибок, по типу :
sketch\ping.cpp: In function 'void closeSocket(SOCKET)':
ping.cpp:96:18: error: '_server_port' is not a member of 'EthernetClass'
EthernetClass::_server_port[socket] = 0;
^~~~~~~~~~~~
sketch\ping.cpp: In function 'size_t sendToSocket(SOCKET, const IPAddress&, const uint8_t*, size_t)':
ping.cpp:108:9: error: 'class W5100Class' has no member named 'send_data_processing'
W5100.send_data_processing(socket, buf, size);
^~~~~~~~~~~~~~~~~~~~
sketch\ping.cpp: In function 'size_t recvFromSocket(SOCKET, uint8_t*, size_t)':
ping.cpp:131:9: error: 'class W5100Class' has no member named 'read_data'
W5100.read_data(socket, buffer, header, sizeof(header));
^~~~~~~~~
ping.cpp:136:9: error: 'class W5100Class' has no member named 'read_data'
W5100.read_data(socket, buffer, buf, dataLen);
^~~~~~~~~
sketch\ping.cpp: In function 'bool waitForSocket(SOCKET, uint32_t)':
ping.cpp:152:18: error: 'class W5100Class' has no member named 'getRXReceivedSize'
while (! W5100.getRXReceivedSize(socket)) {
Под видео же есть архив с файлами для свежей версии библиотеки, скопируйте с заменой файлы из этого архива в код примера и все соберется.
Здравствуйте. Не задумывались ли перейти на Platformio? Куда удобная среда для программирования. Поддерживает как Arduino так и ESP
Спасибо за наводку, я посмотрю на это чудо.
Мне в принципе все равно в чем писать, важнее ЧТО писать, а это от среды не зависит. :)
В ней намного удобнее отлаживать программу, так как указывает на конкретные строки и пишет причину ошибок. Так же есть автодополнение команд и это только пара явных плюсов которыми не может похвастаться Arduino IDE
Доброго времени суток.Вопрос не связанный с данным видео у вас как то было видео о работе с ESP-32. Вы случайно не знаете как реализовать работу двух сторонюю связь со встроены блютусом ( что то подобно как связь через HC-05 HC-06 ? )
На момент, когда пришла моя ESP32, поддержки Serial BT еще не было реализовано, только BLE. В каком сейчас состоянии Arduino для ESP32 - надо смотреть. У меня пока руки не дошли.
подскажите как из блоьшой веб странице выбрать необохимую информацию ???
Alex, добрый вечер!
Если настроено расписание срабатывания реле по времени и сделаны другие настройки и при этом отключился езернет (сдох роутер), то плата будет регулярно перезагружаться? Расписание и другие настройки при этом как будут себя вести?
Если нет RTC DS3231 и нет Инета - то за расписание можете не волноваться, ибо нет времени - нет и расписания. В случае наличия RTC что успеет сработать до след. перезагрузки - то и сработает.
Alex, доброй ночи!
Хочу с Вами посоветоваться. На злощастном езернет шилде запаял я правильные резисторы (51 ом вместо 510 ом - 4 штуки). Разобрался почему шилд не стартует самостоятельно после включения питания и приходится кнопку ресет нажимать (китайцы не устанавливают на шилд формирователь сброса Cat811). Ну ладно, формирователь сброса я сам сделаю. Но не могу понять почему если я захожу на веб морду с компьютера, то включать-выключать выходы получается, подтормаживает конечно, но терпимо. Но если я пытаюсь зайти на веб морду с сотового телефона, то сама веб морда грузится очень долго, а может и не загрузится. А управление выходами происходит еще дольше! При этом должен сказать, что на Меге работает расписание ежеминутное - 20 расписаний, и подключены три DS18B20, с управлением тремя выходами. MQTT отключен.
На МЕГЕ нет памяти, поэтому в отличие от ESP8266, ответ HTTP-сервер не формирует полностью, а шлет по мере формирования, а значит в заголовке нет длины ответа, клиент понимает конец страницы по таймауту. А уж кривой веб-браузер телефона может относиться к такому волюнтаризму хуже, чем менее кривой браузер на ПК - отсюда и тупизм.
Сколько у вас реле реально подключено и соответствует ли это количество тому, что выводит веб-интерфейс? Чем короче страница (и JSON-пакет с состояниями реле каждые полсекунды) - тем быстрее реакция обмена данными.
Хотите быстрое устройство - покупайте Малину и программируйте ее на чем хотите. Тогда будет и отзывчивость интерфейса и блек-джек со шлюхами.
Alex! Спасибо за толковый ответ!
Веб интерфейс выводит все реле. Подключено чуть меньше - 42 штуки.
Хочу спросить, все скетчи с Мегой не дают в заголовке длину ответа? Самые первый скетчи, без наворотов, тоже не дают длину ответа?
Нет, буферизацией ответов я сразу не стал заморачиваться из-за нехватки памяти.
Можно было бы выделить пару КБ на буфер и при его превышении выводить данные напрямую, а иначе вывести их в конце одномоментно с длиной в заголовке, но у меня нет времени этим заниматься.
Надо переходить на STM32 хотя бы, там памяти хоть сколько-то есть и ног достаточно много. Но опять же времени нет. :)
Понятно, спасибо!
Тогда Мегу с Езернет шилдом можно использовать для выполнения расписаний, сработки по датчикам, по температуре, по RFID. И не слишком часто конфигурировать все это через езернет шилд. А для оперативного включения устройств со смартфона лучше подойдет ESP-шка.
А по MQTT тоже будет тормозить или там другой протокол?
Пробуйте. По MQTT должно быть лучше. Потому что активная веб-морда заставляет два раза в секунду запрашивать состояния реле и датчиков, а по MQTT обмен данными идет только по желанию сторон.
Alex, добрый вечер. Подключил я DS3231. Вроде работает. Если правильное время на DS3231 не выставлено, то сама Mega установит правильное время через NTP сервер?
При подключении RTC скетч вообще не использует NTP. Так что само ничего не обновится. Можно нажать кнопку "Update time from browser", тогда время в RTC обновится с устройства отображения веб-страницы.
Здравствуйте! Пытаюсь изготовить систему полива на базе Вашего реле. Сам не большой профи в Arduino. Взял скетч, пытаюсь прошить его в Mega. При проверке пишет:
"This report would have more information with
"Show verbose output during compilation"
enabled in File > Preferences.
Arduino: 1.0.6 (Windows 7), Board: "Arduino Mega (ATmega1280)"
AT24C32.cpp: In static member function 'static void AT24C32::init(bool)':
AT24C32.cpp:10: error: 'Wire' was not declared in this scope
AT24C32.cpp: In static member function 'static bool AT24C32::begin()':
AT24C32.cpp:24: error: 'Wire' was not declared in this scope
AT24C32.cpp: In static member function 'static uint8_t AT24C32::read(uint16_t)':
AT24C32.cpp:29: error: 'Wire' was not declared in this scope
AT24C32.cpp: In static member function 'static void AT24C32::read(uint16_t, uint8_t*, uint16_t)':
AT24C32.cpp:41: error: 'Wire' was not declared in this scope
AT24C32.cpp: In static member function 'static void AT24C32::write(uint16_t, uint8_t)':
AT24C32.cpp:60: error: 'Wire' was not declared in this scope
AT24C32.cpp: In static member function 'static void AT24C32::write(uint16_t, const uint8_t*, uint16_t)':
AT24C32.cpp:77: error: 'Wire' was not declared in this scope"
Как с этим бороться?
Как минимум обновить версию AIDE с прошлого века.
После обновления, при корреляции еще выдает какие-то ошибки, но реле работает!!!! Огромное спасибо Вам за Ваш труд!
Извините! При компиляции! (Т9)
Alex, добрый вечер!
А можно вместо езернет шилда подключить enc28j60? Будет работать?
Естественно нет.
Никогда?
Alex, добрый день. Плата зависла. Обнаружил случайно. Ждал пока сработает какая-нибудь собака - не дождался. Перезагрузил кнопкой ресет.
Можно сделать так, чтобы выход №53 мигал раз в 1-2 сек. если плата не висит, и не моргал (горел или потух) если плата висит?
Сделал так:
void restart();
void setup();
uint32_t ms, ms1 = 0;
bool led_stat = true;
void loop();
И еще ниже в скетче вставил:
void EthRFIDRelayApp::loop() {
EthWebServerApp::loop();
resetWatchDog();
ms = millis();
// Событие срабатывающее каждые 500 мс
if( ( ms - ms1 ) > 500 || ms < ms1 ){
ms1 = ms;
// Инвертируем светодиод
digitalWrite(53, led_stat);
led_stat = !led_stat;
}
Светодиод на 53 ноге подмаргивает. Расписание выполняется. Но к чему это приведет я не знаю. Может этими вставками в скетч я чего-нибудь сломал и пока не замечаю?
Alex, добрый день! У меня имеются несколько Ethernet Shield W5500. однако, при компиляции - ошибки ((( Если есть возможность помочь - рад пообщаться (телеграмм как и ник тут)
Ping для библиотеки Ethernet последней версии drive.google.com/open?id=1YpNHDBieLRfeojgzZYf2cdbPbEB4P_gQ
Но на 5500 не проверялось, на 5100 работает.
Alex, добрый день!
Заметил такую ситуацию. Когда с сотового телефона, с разных браузеров, включаю реле (нажимаю на ползунок), то ползунок сначала перескакивает вправо, затем сразу влево и опять вправо. И только после этого уже остается включенным. При выключении происходят те же метания ползунка перед отключением. Сам включаемый выход GPIO на плате, вроде выдает сигнал четко (светодиод загорается и выключается без морганий). На компьютере ползунки не мечутся, но при нажатии на ползунок цвет его фона кратковременно изменяется и уже потом зеленеет или сереет.
Пишу ни в коем случае не в упрек Вам и без каких либо требований. Хочу просто посоветоваться с Вами. Может чего и подскажете. Прошивка последняя.
Это нормальное поведение. Браузер "включает" свой видоизмененный с помощью CSS чекбокс по нажатию на него и вызывает скрытый переход на URL, переключающий реле. Два раза в секунду делается запрос с помощью AJAX на текущее состояние реле. Поэтому чекбокс сначала рисуется переключенным, потом он ловит предыдущее состояние по AJAX и возвращается назад, потом следующий AJAX-пакет говорит ему, что реле переключилось и он снова перерисовывается. На компьютере редко, но тоже можно видеть "метания" чекбокса.
Т.е. получается, что это расплата за постоянную двустороннюю связь МЕГИ с браузером?
Сейчас посмотрел на работу ESP., такого эффекта нет. Только у МЕГИ.
Не обновляется время через интернет? NTP update fail!
Подскажите как лучше всего реализовать удаленную перезагрузку сервера или майнинг фермы. Задача такова какой-либо модуль пингует ip сервера внутри локальной сети и при отсутствии пинга делает ресет на материнке. Через, что проще и дешевле реализовать такую задачу? Я так понимаю ваше решение должно подойти для такой задачи?
Arduino UNO + Ethernet Shield + реле для замыкания пинов от кнопки перезагрузки сервера. И молиться, чтобы сетевой шилд не заглючил сам по себе. :)
Скетч с настройками через веб-морду в UNO не влезет, но сама пинговалка без проблем, а, например, с SD карты (слот есть на сетевом шилде) можно читать файл конфигурации с адресами серверов и номерами пинов до реле).
Если нужна веб-морда, то вместо UNO придется брать MEGA.
Может можно реле от sonoff как то заставить по вайваю пинговать адрес и в случае отсутствия пинга срабатывать? Тут не принципиально по локалке делать пинг или по вайваю
Можно и на ESP (Sonoff) сделать, но тогда нужно, чтобы вай-фай был надежным.
Alex, доброе утро!
Если в скетче комментирую строку: "//#define USEMQTT // Закомментируйте, если не нужна поддержка MQTT", то при компиляции выскакивает ошибка: "#error USEMQTT must be defined!" Это лечится?
Вам это зачем?
Лечится все, даже то, что не сломано. Просто нагромождение директив условной компилляции надоело, вот и упростил немного, сделав MQTT "обязательным".
А Вы что-то с библиотекой ethernet делали? У меня компиляция примера с пингом не проходит. Пишет, например, class 'w5100Class' has no member named 'read_data'. В чем может быть проблема.
Не делал, на момент съемки видео стандартный код работал без проблем. Попробуйте откатить версию библиотеки Ethernet.
@@alexmorozov73 А вы с какой версией ethernet.h испытывали не помните?
@@aaveliky69 Точно не со второй.
@@alexmorozov73 ясно, у меня как раз вторая. Попробую откатиться. А какую посоветуете вообще использовать? Или в принципе улучшений особо нет во второй?
@@aaveliky69 Начните с последней "не второй", про улучшения ищите чендж-лог.
Правильнее, конечно, переделать код под новую версию библиотеки, но у меня на это нет времени.
Alex, доброе утро! Задано расписание для 18-ти выходов. Каждую минуту выходы включаются поочередно на 1 секунду. Получается бегущий огонь с посекундным переключением. Заметил странность. Иногда бегущий огонь пробегает по всем светодиодам очень быстро за 1-2 секунды. После этого схема опять ведет себя правильно. Кто виноват? Что делать?
Отключайте все, что может периодически подтормаживать. MQTT, пинги, не лезть в веб-интерфейс. В чистом виде система должна работать стабильно.
А что значит не лезть в веб-интерфейс?
Значит не сидеть в браузере на станицах реле постоянно.
Понял. Тогда в моем случае надо отключать пинги. Все остальное выполнено.
Alex, вы питание на свои устройства подаете от USB порта компьютера, или от какого-нибудь хитрого устройства? У меня питания с USB порта компьютера не хватает.
Ddos 😂😂😂