• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе 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
В документации есть все нужные вам функции.
Когда что-то сами напишите и будут сложности, обращайтесь тогда подскажу.
-----------------------
Я не раздаю рыбу на халяву, а лишь учу ловить эту рыбу самостоятельно.
 
Сверху Снизу