Тестування net.ping() – нової функції прошивки NodeMCU 3.0-master_20200610

Як ми писали раніше, у світ вийшла нова версія прошивки NodeMCU для мікроконтролерів ESP8266.

Оскільки наш сайт присвячено саме цій програмно-апаратній платформі, ми не лише пильнуємо і висвітлюємо новини довкола Lua у середовищі NodeMCU / ESP8266, але й перевіряємо їх на власному контролері.

У цій статті ми проводимо випробування нової і дуже корисної функції ping(), що знайшла розташування у якості публічного метода C-модуля net.

Документацію на net.ping() метод бажаючі знайдуть за посиланням: net.ping()
Документація нам повідомляє, що синтаксис виклику net.ping() виглядає наступним чином:

Ми не будемо вдаватися до переписування чи перекладу документації, щодо параметрів виклику, а лише зазначимо, що у API, що надає нам цей метод, все виглядає просто і в той же час достатньо функціонально з точки зору програмування на рівні Lua.

Для тестування ми вирішили використовувати наступний тестовий код, котрий ми підгледіли у документації, що дуже зручно:

Оскільки довжину одного рядка обмежено розмірами екрану, звертаємо вашу увагу, що код, котрий ми наводимо, це одна команда net.ping(….., ……, …..) з трьома параметрами через кому.

В якості домену, котрий пінгуємо, використовується google.com. Решта – це анонімні функції зворотного виклику (тобто call-back), вбудовані у виклик метода ping() в якості параметрів.

У наступному відео ми показуємо як саме виконується метод net.ping(). Відео добре показує низьку швидкодію даного методу (це не баг, а нормальна взаємодія хостів через всесвітню мережу), а тому обов’язково застосовуйте асинхронний підхід у програмуванні мережевих задач з усіма супутніми механізмами.

Примітка: зауважте, що для того, щоб цей приклад працював, необхідно спочатку підключити контролер до інтернет.

Тест net.ping

Рис.1 Підключення до інтернет і виконання файлу net_ping_example.lua


Якщо ваш контролер ще не приєднано до мережі інтернет засобами вбудованого WiFi, необхідно зробити кроки, аналогічні тим, що показано на рис.1:

  1. Перевести радіомодуль контролера у режим клієнта:
    wifi.setmode(wifi.STATION, save)
    Документація: wifi.setmode()
  2. Задати радіомодулю контролера нову конфігурацію:
    wifi.sta.config({ssid = "your_wifi_ssid_name",pwd = "your_wifi_password"})
    Документація: wifi.sta.config()
  3. Ініціювати підключення до мережі
    wifi.sta.connect()
    Документація: wifi.sta.connect()
  4. Перевірити, чи підключення відбулося:
    wifi.sta.getip()
    Документація: wifi.sta.getip()

Примітка: метод wifi.sta.getip() лише перевірить, чи отримав контролер від локальної точки доступу (домашнього маршрутизатора) IP-адресу. А от перевірити, чи реально є інтернет, вам якраз і допоможе запуск команди net.ping() до такого сервера у інтернет, котрий просто не може не працювати (Google, наприклад).

Якщо ви бажаєте досконально розібратися як комплексно і всебічно перевіряти наявність інтернет, або просто хочете отримати готове рішення, радимо вам придбати наш програмний продукт Фоновий процес покрокової перевірки наявності доступу до Інтернет. Щоправда, слід зауважити, що цей продукт розроблявся для однієї з попередніх версій прошивки NodeMCU і ще не враховує наявності метода net.ping() і контролює наявність інтернет іншими способами. Ми найближчим часом плануємо випустити новий, оновлений продукт із урахуванням нової функціональності.

Також рекомендуємо ознайомитися з публікацією Коли потрібно контролювати наявність доступу до інтернет і які для цього є інструменти в прошивці NodeMCU/Lua.

Бажаємо успіхів!

Підписуйтеся на нашу сторінку у Facebook: