Небольшая заметка на тему, известную всем кто знает JavaScript, но не вполне очевидная для DIY программирования ESP8266.
Задача — опросить датчик, который должен получить запрос на измерение, а ответ будет готов через некоторое время.
Одним из вариантов такого действа будет работа через callback функцию и таймер. Код с пояснениями:
do -- Эта функция обработает полученный результат function call(tb) print('\nПришло от датчика:') table.foreach(tb, print) print('Сейчас я это куда-нибудь отправлю!') -- Здесь дальнейшие действия с данными. -- ................. end -- Эта функция работы с датчиком function askunit(callb) -- ... То что надо отправить датчику print('\nОтправил запрос датчику') -- Ананимный таймер, срабаиывающий один раз tmr.create():alarm(1500, tmr.ALARM_SINGLE, function(t) -- Уничтожаем внутреннюю ссылку на таймер t = nil print('\nПодождал и спросил результат.') -- Предположим, это результат: local res = {temp = 25} -- Вызываем callback функцию и передаем ей данные if callb then callb(res) end end) end -- Старт получения данны от датчика askunit(call) end
Код для копипасты:
do function call(tb) print('\nПришло от датчика:') table.foreach(tb, print) print('Сейчас я это куда-нибудь отправлю!') end function askunit(callb) print('\nОтправил запрос датчику') tmr.create():alarm(1500, tmr.ALARM_SINGLE, function(t) t = nil print('\nПодождал и спросил результат.') local res = {temp = 25} if callb then callb(res) end end) end askunit(call) end
Что получилось:

Надеюсь, это решение поможет начинающим любителям Lua быстрее справляться с датчиками.
ссылка на оригинал статьи https://habr.com/ru/post/566880/
Добавить комментарий