• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Нужна помощь Delay в NodeMCU помогите реализовать

Vadimosik

New member
Здравствуйте Форумчане! Не так давно я занимался проектами Arduino и всё бы хорошо, но в Arduino много подводных камней. По этому было решено купить модули ESP8266 V3 с NodeMCU на борту. Категорически не понимаю, так как пока что не хватает знаний как в Английском языке, так и в языке Lua. В общем задача такова: Имеется датчик влажности DHT22 и 2х-канальное реле. Нужно реализовать такую систему:
Если датчик HDT22 досупен и температура меньше < 20 градусов, мы зажигаем первое реле и ждем к примеру 5 сек, после чего выключаем.
Такой же вариант с датчиком DHT22 только в обратную сторону, только зажигаем второе реле и так же выключаем его через 5 сек. Я не могу разобраться с таймером или чем то подобным в этой прошивке.
Мне нужна функция delay как в ардуино или что то подобное. Буду благодарен за любые ответы, код напишу ниже. Спасибо.
Код:
tmr.alarm(0, 5000, 1, function()
left = 5
right = 6
gpio.mode(left, gpio.OUTPUT)
gpio.mode(right, gpio.OUTPUT)
status, temperature = dht.read(2)
if status == dht.OK and temperature < 20 then
    gpio.write(left, gpio.HIGH)
elseif status == dht.OK and temperature > 20 then
    gpio.write(right, gpio.HIGH)
elseif status == dht.ERROR_CHECKSUM then
    print("Sensor DHT checksum error.")
elseif status == dht.ERROR_TIMEOUT then
    print("The DHT sensor is not available.")
end
end)
 

nikolz

Well-known member
Здравствуйте Форумчане! Не так давно я занимался проектами Arduino и всё бы хорошо, но в Arduino много подводных камней. По этому было решено купить модули ESP8266 V3 с NodeMCU на борту. Категорически не понимаю, так как пока что не хватает знаний как в Английском языке, так и в языке Lua. В общем задача такова: Имеется датчик влажности DHT22 и 2х-канальное реле. Нужно реализовать такую систему:
Если датчик HDT22 досупен и температура меньше < 20 градусов, мы зажигаем первое реле и ждем к примеру 5 сек, после чего выключаем.
Такой же вариант с датчиком DHT22 только в обратную сторону, только зажигаем второе реле и так же выключаем его через 5 сек. Я не могу разобраться с таймером или чем то подобным в этой прошивке.
Мне нужна функция delay как в ардуино или что то подобное. Буду благодарен за любые ответы, код напишу ниже. Спасибо.
Код:
tmr.alarm(0, 5000, 1, function()
left = 5
right = 6
gpio.mode(left, gpio.OUTPUT)
gpio.mode(right, gpio.OUTPUT)
status, temperature = dht.read(2)
if status == dht.OK and temperature < 20 then
    gpio.write(left, gpio.HIGH)
elseif status == dht.OK and temperature > 20 then
    gpio.write(right, gpio.HIGH)
elseif status == dht.ERROR_CHECKSUM then
    print("Sensor DHT checksum error.")
elseif status == dht.ERROR_TIMEOUT then
    print("The DHT sensor is not available.")
end
end)
Ваша прога должна состоять из трех частей.
Первая - инициализация - исполняется одни раз и потом удаляется ,чтобы память экономить.
вторая - это функция колбека
третья это функция запуска таймера на 5 секунд с автозапуском.
Где-то на форуме я это уже рисовал года два-три назад .
 

Vadimosik

New member
Ваша прога должна состоять из трех частей.
Первая - инициализация - исполняется одни раз и потом удаляется ,чтобы память экономить.
вторая - это функция колбека
третья это функция запуска таймера на 5 секунд с автозапуском.
Где-то на форуме я это уже рисовал года два-три назад .
Здравствуйте. Не могли бы Вы дать ссылку где писали об этом. Я впервые на данном форуме, не научился еще им пользоваться.
 

corpse

New member
Привет! Для твоих нужд более, чем достаточно будет прошивки под названием ESPEasy - умеет всё это и намного больше. С lua вообще разбираться не придётся. Настроить всё можно через внутренний веб интерфейс, не сложнее, чем на роутере. Добавляешь в разделе девайсов твой датчик - просто указываешь из списка его тип и на каком он пине висит, обзываешь например, "dht22". Потом в разделе настроек идёшь в раздел advanced и включаешь там чекбокс Rules, после чего у тебя появляется ещё одна вкладка - rules соответственно.
Думаю, с этим тебе будет разобраться намного проще, чем с lua. Плюс - всегда можешь зайти через вайфай на модуль и поправить если что-то работает не так прямо из вебинтерфейса, посмотреть за состоянием и прочее-прочее. Можно делать бекапы настроек, прошивать по воздуху и т.п.. Напоминает вебинтерфейсы настройки роутеров.
Описание, загрузка и настройка ESPEasy - готовой прошивки для ESP8266 - вот тут статья по установке.
Tutorial Rules - Let's Control It - тут по настройке правил. Не на русском, но из примеров более, чем понятно.

В твоём случае, если один из каналов реле у тебя висит на 12-м gpio, будет примерно как-то так (пишу по памяти, так что не гарантирую, что именно так, сверься с туториалом):

Код:
on dht22#temperature < 20 do
  gpio,12,1
  timerSet,1,5
endon

on rules#timer=1 do
  gpio,12,0
endon
 

nikolz

Well-known member
Ваша прога должна состоять из трех частей.
Первая - инициализация - исполняется одни раз и потом удаляется ,чтобы память экономить.
вторая - это функция колбека
третья это функция запуска таймера на 5 секунд с автозапуском.
Где-то на форуме я это уже рисовал года два-три назад .
посмотрите примеры тут:
NodeMcu -- An open-source firmware based on ESP8266 wifi-soc.
и документацию по nodemcu тут
NodeMCU Documentation
В документации есть все нужные вам функции.
Когда что-то сами напишите и будут сложности, обращайтесь тогда подскажу.
-----------------------
Я не раздаю рыбу на халяву, а лишь учу ловить эту рыбу самостоятельно.
 
Сверху Снизу