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...

Комментарии • 59

  • @mishuha
    @mishuha Год назад

    Спасибо, ньюансы это то о чем узнаешь после покупки, а тут предупредили.
    Надеюсь все-таки собрать watchdog на перезагрузку свитча.

  • @robotworld8075
    @robotworld8075 6 лет назад +2

    Алексей, здравствуйте! Здорово, что удается Вам находить время и на модернизацию Вашего Умного Реле!!!
    Я думаю прикрутить к нему GSM модуль Sim800L, Работающий на Arduino Nano. Неплохо было бы иметь Log из COM Порта Этой Nano. Т.е. добавить Функцию в Mega Rele чтение COM порта ( например 2-го или выбирать порт) и выводить в окно общего Лога.
    Применение:
    1. Nano сможет принимая команду от GSM модуля, перезагрузить MEGA аппаратно. Это еще один вариант борьбы с зависанием.
    2. Можно будет контролировать состояние Дополнительных Модулей системы - все тот же Nano c Sim800L. через Log - такой вот взаимный контроль получится. Nano контролирует MEGA, А MEGA видит что с периферией ( Nano) или что либо еще).

  • @AViStudioMoldova
    @AViStudioMoldova Год назад

    _Мужик!! Ты решил мою многодневную головную боль! Желаю тебе здоровья!!!!_

  • @nzt8535
    @nzt8535 Год назад

    с помощью этава устройства можно роутер перезагружать если завис?

  • @rjyzakil7240
    @rjyzakil7240 2 года назад

    Алексей, подскажите пожалуйста, при компиляции скетча ругается на строчку:
    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)) {

    • @alexmorozov73
      @alexmorozov73  2 года назад

      Под видео же есть архив с файлами для свежей версии библиотеки, скопируйте с заменой файлы из этого архива в код примера и все соберется.

  • @Руслан-н1е5б
    @Руслан-н1е5б 6 лет назад +1

    Здравствуйте. Не задумывались ли перейти на Platformio? Куда удобная среда для программирования. Поддерживает как Arduino так и ESP

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Спасибо за наводку, я посмотрю на это чудо.
      Мне в принципе все равно в чем писать, важнее ЧТО писать, а это от среды не зависит. :)

    • @Руслан-н1е5б
      @Руслан-н1е5б 6 лет назад

      В ней намного удобнее отлаживать программу, так как указывает на конкретные строки и пишет причину ошибок. Так же есть автодополнение команд и это только пара явных плюсов которыми не может похвастаться Arduino IDE

  • @madeinchina2022
    @madeinchina2022 6 лет назад

    Доброго времени суток.Вопрос не связанный с данным видео у вас как то было видео о работе с ESP-32. Вы случайно не знаете как реализовать работу двух сторонюю связь со встроены блютусом ( что то подобно как связь через HC-05 HC-06 ? )

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      На момент, когда пришла моя ESP32, поддержки Serial BT еще не было реализовано, только BLE. В каком сейчас состоянии Arduino для ESP32 - надо смотреть. У меня пока руки не дошли.

  • @fletronflet
    @fletronflet 5 лет назад

    подскажите как из блоьшой веб странице выбрать необохимую информацию ???

  • @Александр-е9ф3д
    @Александр-е9ф3д 6 лет назад

    Alex, добрый вечер!
    Если настроено расписание срабатывания реле по времени и сделаны другие настройки и при этом отключился езернет (сдох роутер), то плата будет регулярно перезагружаться? Расписание и другие настройки при этом как будут себя вести?

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Если нет RTC DS3231 и нет Инета - то за расписание можете не волноваться, ибо нет времени - нет и расписания. В случае наличия RTC что успеет сработать до след. перезагрузки - то и сработает.

  • @Александр-е9ф3д
    @Александр-е9ф3д 6 лет назад

    Alex, доброй ночи!
    Хочу с Вами посоветоваться. На злощастном езернет шилде запаял я правильные резисторы (51 ом вместо 510 ом - 4 штуки). Разобрался почему шилд не стартует самостоятельно после включения питания и приходится кнопку ресет нажимать (китайцы не устанавливают на шилд формирователь сброса Cat811). Ну ладно, формирователь сброса я сам сделаю. Но не могу понять почему если я захожу на веб морду с компьютера, то включать-выключать выходы получается, подтормаживает конечно, но терпимо. Но если я пытаюсь зайти на веб морду с сотового телефона, то сама веб морда грузится очень долго, а может и не загрузится. А управление выходами происходит еще дольше! При этом должен сказать, что на Меге работает расписание ежеминутное - 20 расписаний, и подключены три DS18B20, с управлением тремя выходами. MQTT отключен.

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      На МЕГЕ нет памяти, поэтому в отличие от ESP8266, ответ HTTP-сервер не формирует полностью, а шлет по мере формирования, а значит в заголовке нет длины ответа, клиент понимает конец страницы по таймауту. А уж кривой веб-браузер телефона может относиться к такому волюнтаризму хуже, чем менее кривой браузер на ПК - отсюда и тупизм.
      Сколько у вас реле реально подключено и соответствует ли это количество тому, что выводит веб-интерфейс? Чем короче страница (и JSON-пакет с состояниями реле каждые полсекунды) - тем быстрее реакция обмена данными.
      Хотите быстрое устройство - покупайте Малину и программируйте ее на чем хотите. Тогда будет и отзывчивость интерфейса и блек-джек со шлюхами.

    • @Александр-е9ф3д
      @Александр-е9ф3д 6 лет назад

      Alex! Спасибо за толковый ответ!
      Веб интерфейс выводит все реле. Подключено чуть меньше - 42 штуки.
      Хочу спросить, все скетчи с Мегой не дают в заголовке длину ответа? Самые первый скетчи, без наворотов, тоже не дают длину ответа?

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Нет, буферизацией ответов я сразу не стал заморачиваться из-за нехватки памяти.
      Можно было бы выделить пару КБ на буфер и при его превышении выводить данные напрямую, а иначе вывести их в конце одномоментно с длиной в заголовке, но у меня нет времени этим заниматься.
      Надо переходить на STM32 хотя бы, там памяти хоть сколько-то есть и ног достаточно много. Но опять же времени нет. :)

    • @Александр-е9ф3д
      @Александр-е9ф3д 6 лет назад

      Понятно, спасибо!
      Тогда Мегу с Езернет шилдом можно использовать для выполнения расписаний, сработки по датчикам, по температуре, по RFID. И не слишком часто конфигурировать все это через езернет шилд. А для оперативного включения устройств со смартфона лучше подойдет ESP-шка.
      А по MQTT тоже будет тормозить или там другой протокол?

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Пробуйте. По MQTT должно быть лучше. Потому что активная веб-морда заставляет два раза в секунду запрашивать состояния реле и датчиков, а по MQTT обмен данными идет только по желанию сторон.

  • @Александр-е9ф3д
    @Александр-е9ф3д 6 лет назад

    Alex, добрый вечер. Подключил я DS3231. Вроде работает. Если правильное время на DS3231 не выставлено, то сама Mega установит правильное время через NTP сервер?

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      При подключении RTC скетч вообще не использует NTP. Так что само ничего не обновится. Можно нажать кнопку "Update time from browser", тогда время в RTC обновится с устройства отображения веб-страницы.

  • @alexminaev8865
    @alexminaev8865 4 года назад

    Здравствуйте! Пытаюсь изготовить систему полива на базе Вашего реле. Сам не большой профи в 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"
    Как с этим бороться?

    • @alexmorozov73
      @alexmorozov73  4 года назад

      Как минимум обновить версию AIDE с прошлого века.

    • @alexminaev8865
      @alexminaev8865 4 года назад

      После обновления, при корреляции еще выдает какие-то ошибки, но реле работает!!!! Огромное спасибо Вам за Ваш труд!

    • @alexminaev8865
      @alexminaev8865 4 года назад

      Извините! При компиляции! (Т9)

  • @Александр-е9ф3д
    @Александр-е9ф3д 6 лет назад

    Alex, добрый вечер!
    А можно вместо езернет шилда подключить enc28j60? Будет работать?

  • @Александр-е9ф3д
    @Александр-е9ф3д 6 лет назад

    Alex, добрый день. Плата зависла. Обнаружил случайно. Ждал пока сработает какая-нибудь собака - не дождался. Перезагрузил кнопкой ресет.
    Можно сделать так, чтобы выход №53 мигал раз в 1-2 сек. если плата не висит, и не моргал (горел или потух) если плата висит?

    • @Александр-е9ф3д
      @Александр-е9ф3д 6 лет назад

      Сделал так:
      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 ноге подмаргивает. Расписание выполняется. Но к чему это приведет я не знаю. Может этими вставками в скетч я чего-нибудь сломал и пока не замечаю?

  • @rial2001
    @rial2001 4 года назад

    Alex, добрый день! У меня имеются несколько Ethernet Shield W5500. однако, при компиляции - ошибки ((( Если есть возможность помочь - рад пообщаться (телеграмм как и ник тут)

    • @alexmorozov73
      @alexmorozov73  4 года назад

      Ping для библиотеки Ethernet последней версии drive.google.com/open?id=1YpNHDBieLRfeojgzZYf2cdbPbEB4P_gQ
      Но на 5500 не проверялось, на 5100 работает.

  • @Александр-е9ф3д
    @Александр-е9ф3д 6 лет назад

    Alex, добрый день!
    Заметил такую ситуацию. Когда с сотового телефона, с разных браузеров, включаю реле (нажимаю на ползунок), то ползунок сначала перескакивает вправо, затем сразу влево и опять вправо. И только после этого уже остается включенным. При выключении происходят те же метания ползунка перед отключением. Сам включаемый выход GPIO на плате, вроде выдает сигнал четко (светодиод загорается и выключается без морганий). На компьютере ползунки не мечутся, но при нажатии на ползунок цвет его фона кратковременно изменяется и уже потом зеленеет или сереет.
    Пишу ни в коем случае не в упрек Вам и без каких либо требований. Хочу просто посоветоваться с Вами. Может чего и подскажете. Прошивка последняя.

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Это нормальное поведение. Браузер "включает" свой видоизмененный с помощью CSS чекбокс по нажатию на него и вызывает скрытый переход на URL, переключающий реле. Два раза в секунду делается запрос с помощью AJAX на текущее состояние реле. Поэтому чекбокс сначала рисуется переключенным, потом он ловит предыдущее состояние по AJAX и возвращается назад, потом следующий AJAX-пакет говорит ему, что реле переключилось и он снова перерисовывается. На компьютере редко, но тоже можно видеть "метания" чекбокса.

    • @Александр-е9ф3д
      @Александр-е9ф3д 6 лет назад

      Т.е. получается, что это расплата за постоянную двустороннюю связь МЕГИ с браузером?
      Сейчас посмотрел на работу ESP., такого эффекта нет. Только у МЕГИ.

    • @Александр-е9ф3д
      @Александр-е9ф3д 6 лет назад

      Не обновляется время через интернет? NTP update fail!

  • @alenarasolka2670
    @alenarasolka2670 6 лет назад

    Подскажите как лучше всего реализовать удаленную перезагрузку сервера или майнинг фермы. Задача такова какой-либо модуль пингует ip сервера внутри локальной сети и при отсутствии пинга делает ресет на материнке. Через, что проще и дешевле реализовать такую задачу? Я так понимаю ваше решение должно подойти для такой задачи?

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Arduino UNO + Ethernet Shield + реле для замыкания пинов от кнопки перезагрузки сервера. И молиться, чтобы сетевой шилд не заглючил сам по себе. :)
      Скетч с настройками через веб-морду в UNO не влезет, но сама пинговалка без проблем, а, например, с SD карты (слот есть на сетевом шилде) можно читать файл конфигурации с адресами серверов и номерами пинов до реле).
      Если нужна веб-морда, то вместо UNO придется брать MEGA.

    • @alenarasolka2670
      @alenarasolka2670 6 лет назад

      Может можно реле от sonoff как то заставить по вайваю пинговать адрес и в случае отсутствия пинга срабатывать? Тут не принципиально по локалке делать пинг или по вайваю

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Можно и на ESP (Sonoff) сделать, но тогда нужно, чтобы вай-фай был надежным.

  • @Александр-е9ф3д
    @Александр-е9ф3д 6 лет назад

    Alex, доброе утро!
    Если в скетче комментирую строку: "//#define USEMQTT // Закомментируйте, если не нужна поддержка MQTT", то при компиляции выскакивает ошибка: "#error USEMQTT must be defined!" Это лечится?

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Вам это зачем?
      Лечится все, даже то, что не сломано. Просто нагромождение директив условной компилляции надоело, вот и упростил немного, сделав MQTT "обязательным".

  • @aaveliky69
    @aaveliky69 5 лет назад

    А Вы что-то с библиотекой ethernet делали? У меня компиляция примера с пингом не проходит. Пишет, например, class 'w5100Class' has no member named 'read_data'. В чем может быть проблема.

    • @alexmorozov73
      @alexmorozov73  5 лет назад

      Не делал, на момент съемки видео стандартный код работал без проблем. Попробуйте откатить версию библиотеки Ethernet.

    • @aaveliky69
      @aaveliky69 5 лет назад

      @@alexmorozov73 А вы с какой версией ethernet.h испытывали не помните?

    • @alexmorozov73
      @alexmorozov73  5 лет назад

      @@aaveliky69 Точно не со второй.

    • @aaveliky69
      @aaveliky69 5 лет назад

      @@alexmorozov73 ясно, у меня как раз вторая. Попробую откатиться. А какую посоветуете вообще использовать? Или в принципе улучшений особо нет во второй?

    • @alexmorozov73
      @alexmorozov73  5 лет назад

      @@aaveliky69 Начните с последней "не второй", про улучшения ищите чендж-лог.
      Правильнее, конечно, переделать код под новую версию библиотеки, но у меня на это нет времени.

  • @Александр-е9ф3д
    @Александр-е9ф3д 6 лет назад

    Alex, доброе утро! Задано расписание для 18-ти выходов. Каждую минуту выходы включаются поочередно на 1 секунду. Получается бегущий огонь с посекундным переключением. Заметил странность. Иногда бегущий огонь пробегает по всем светодиодам очень быстро за 1-2 секунды. После этого схема опять ведет себя правильно. Кто виноват? Что делать?

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Отключайте все, что может периодически подтормаживать. MQTT, пинги, не лезть в веб-интерфейс. В чистом виде система должна работать стабильно.

    • @Александр-е9ф3д
      @Александр-е9ф3д 6 лет назад

      А что значит не лезть в веб-интерфейс?

    • @alexmorozov73
      @alexmorozov73  6 лет назад

      Значит не сидеть в браузере на станицах реле постоянно.

    • @Александр-е9ф3д
      @Александр-е9ф3д 6 лет назад

      Понял. Тогда в моем случае надо отключать пинги. Все остальное выполнено.

    • @Александр-е9ф3д
      @Александр-е9ф3д 6 лет назад

      Alex, вы питание на свои устройства подаете от USB порта компьютера, или от какого-нибудь хитрого устройства? У меня питания с USB порта компьютера не хватает.

  • @Koreets61
    @Koreets61 2 года назад

    Ddos 😂😂😂