Найти тему
Электроника, ESP32, Arduino

Как определить доступность устройства в сети с помощью ESP32

На компьютере это обычно делается с помощью команды ping. Для платформы ESP32 есть одноименная библиотека ESP32Ping. Зачем это может быть нужно?

  • проверить доступность роутера (если прицепить реле, то можно его и перезагрузить);
  • узнать не забыли ли вы выключить утюг ПК или ноутбук, когда ушли из дома;
  • проверить доступность ресурса в сети Интернет;
  • определить доступность других самоделок на платформах ESP8266/ESP32;
  • здесь может быть ваша "хотелка".

Для первого теста, потребуется ESP32 и какое-нибудь любое другое устройство подключенное к домашней "вафле".

ESP32 WROOM DevKit v1
ESP32 WROOM DevKit v1

Я буду использовать смартфон. Его IP адрес:

Ищем адрес смартфона на домашнем роутере
Ищем адрес смартфона на домашнем роутере

С компьютера это выглядит вот так:

Проверяем наличие устройства в сети с помощью ПК под управлением Windows
Проверяем наличие устройства в сети с помощью ПК под управлением Windows

Сделаем тоже самое на ESP32. Идем на GitHub, скачиваем и устанавливаем в среду Arduino IDE эту библиотеку:

GitHub - marian-craciunescu/ESP32Ping: Ping library for ESP32 Arduino core

Первый пример: esp32_Ping_v1.ino

Выполняем команду ping 4 раза
Выполняем команду ping 4 раза

Подключаем смартфон к домашней сети Wi-Fi, открываем монитор порта на скорости 115200 и ставим галочку "показать отметки времени". Клацаем кнопку перезагрузки на ESP32

Смартфон в сети
Смартфон в сети

Отключаем смартфон от домашней сети и клацаем кнопку перезагрузки еще раз.

Смартфон не в сети
Смартфон не в сети

По отметкам времени видно, что таймаут ожидания ответа устройства в данной библиотеке составляет одну секунду.

Функция Ping.ping(remote_ip,1) возвращает true если сетевое устройство ответило, false если достучаться по сети до устройства не удалось. Функция Ping.ping() также принимает второй целочисленный параметр count, указывающий, сколько "пингов" должно быть отправлено.

После Ping.ping() вызова, среднее время ответа (в миллисекундах) можно получить с помощью float avg_time_ms = Ping.averageTime();

Библиотека умеет "пинговать" ресурсы по имени хоста. Например проверим доступность сайта Яндекс.

ping по имени хоста
ping по имени хоста
Результат работы программы
Результат работы программы

Легко можно выяснить доступен-ли ресурс в сети Интернет, доступен ли сам Интернет, а также несложно организовать "железный" мониторинг какого-нибудь своего ресурса во всемирной паутине.

Библа годная, следующая статья будет посвящена выводу статуса нескольких устройств, находящихся в домашней сети.

Скетчи и библиотека доступны по этой ссылке, не забудьте внести в них параметры подключения к домашней сети Wi-Fi, и IP сетевого устройства, доступность которого вы хотите проверить.

Список всех статей канала доступен по этой ссылке:

Всем удачи!