Не могу победить прерывания

danilovav

New member
Всем доброго дня!
Пытаюсь реализовать проект по моторизованным рулонным шторам отсюда - https://www.instructables.com/id/Motorized-WiFi-IKEA-Roller-Blind/
Контроллер - ESP8266 NodeMCU, драйвер ULN2003 и мотор 28BYJ-48. Это все работает на готовом ПО, но меня не устраивает функционал.
Актуальную версию NodeMCU получал c https://nodemcu-build.com/ с модулями file, GPIO, MQTT, net, node, PWM, timer, UART, WiFi.
По коду куча проблем, судя по всему из-за большой разницы в версиях NodeMCU. Таймеры, MQTT вроде бы поправил, но с прерываниями не могу понять.
Минимальный код
Код:
do
  local pin=1 -- кнопка на GPIO 5 + GND
  gpio.mode(pin,gpio.INT)

  local function process_button(level, when, eventcount)
    print("process_button("..level..","..when..","..eventcount..")")
  end

  print("Attempt to gpio.trig() for pin " .. pin)
  gpio.trig(pin, "both", process_button)
  print("Done gpio.trig() for pin " .. pin)
end
Сообщение attempt ... done вижу, но сколько я бы не жал кнопку, сообщения process_button нет.
Если важно, текущий на данный момент код - https://www.dropbox.com/s/o91zan4l2grsc36/20200614_roller-blind-test.zip?dl=0
 

danilovav

New member
Один раз после форматирования получил результат нажатия на кнопку
Код:
process_button(0,13936489,1)
Больше не реагирует.
Не понимаю...
 

nikolz

Well-known member
если это весь код, то он исполнится лишь один раз
у вас должно быть в конце программы либо бесконечный цикл либо запуск таймера
тогда прерывания будут работать иначе все исполняется один раз и умирает.
 

danilovav

New member
Таймер/цикл на установку прерывания?
А можно пожалуйста пример как это сделать правильно?
Не вариант делать gpio.trig в конце функции-обработчика нажатий?
 

nikolz

Well-known member
Таймер/цикл на установку прерывания?
А можно пожалуйста пример как это сделать правильно?
Не вариант делать gpio.trig в конце функции-обработчика нажатий?
вот моя статья пятилетней давности
в ней есть общая структура программы на lua для ESP8266
-----------------------
В последние года три на луа для ESP не пишу.
Если Выложите свой вариант полностью и напишите конкретные вопросы то попробую подсказать и исправить.
 

danilovav

New member
За статью спасибо!
Сам я пишу совсем в другую сторону, LUA в частности и ESP в целом для меня ооочень в новинку.

Полный проект - https://www.dropbox.com/s/u9shlvtcxskfqsz/20200614_roller-blind-test_1854.zip?dl=0
На данный момент, оно работает, но есть 2 проблемных момента
- Правильно ли я решил с неработающими прерываниями через gpio.mode(pin,gpio.INT,gpio.PULLUP) ?
- Стенд стоял пол-дня включенный (и подключенный к ESPlorer) и перестал реагировать на нажатия кнопки. В консоли тоже тишина. Как это победить?
 

nikolz

Well-known member
За статью спасибо!
Сам я пишу совсем в другую сторону, LUA в частности и ESP в целом для меня ооочень в новинку.

Полный проект - https://www.dropbox.com/s/u9shlvtcxskfqsz/20200614_roller-blind-test_1854.zip?dl=0
На данный момент, оно работает, но есть 2 проблемных момента
- Правильно ли я решил с неработающими прерываниями через gpio.mode(pin,gpio.INT,gpio.PULLUP) ?
правильно, тем более работает. Очевидно не было внешней подтяжки.
- Стенд стоял пол-дня включенный (и подключенный к ESPlorer) и перестал реагировать на нажатия кнопки. В консоли тоже тишина. Как это победить?
причин много, а информации мало.
от банального - "отвалился контакт " до "ошибка в коде"
 

danilovav

New member
правильно, тем более работает. Очевидно не было внешней подтяжки.

причин много, а информации мало.
от банального - "отвалился контакт " до "ошибка в коде"
Прошу прощения, но что есть "внешняя подтяжка"?
У меня запаянная (100% рабочая) кнопка висит на контактах development board. Физически проблем никаких не может быть.

После написания сообщения проверил еще раз и проблема "перестал реагировать на нажатия кнопки" это именно перестал реагировать на кнопку.
После ерезагрузки через пару часов на кнопку опять ноль реакции.
Однако, сам модуль пингуется и через MQTT управляется.

Получается, слетает обработчик прерывания.
Вызывать gpio.trig(pin, "both", process_button) по расписанию?
Как часто?
 

danilovav

New member
Позвольте подниму тему.
Корпуса, железо приехали, надо собирать шторы.
Но кнопка - резервное управление - отваливается.
Как сделать требуемую подтяжку?
 

nikolz

Well-known member
Позвольте подниму тему.
Корпуса, железо приехали, надо собирать шторы.
Но кнопка - резервное управление - отваливается.
Как сделать требуемую подтяжку?
покажите схему или хотя бы фото. что и куда подключили.
-----
предположу что у вас ошибка в программе
prev_int_time где меняется?
 

danilovav

New member
Фото собранного устройства во вложении.
Пины 6,7,8,3 - в моторную плату, кнопка на 1+GND, больше подключений нет.

В button.lua честно говоря вообще не лазил, как было в проекте...
 

Вложения

nikolz

Well-known member
какая у вас плата nodemcu. Напишите название или дайте ссылку на схему.
если есть тестер то измерьте напряжение на кнопке при отжатой и нажатой несколько раз.
 

nikolz

Well-known member
D3(GPIO0) надо использовать внимательно,
чтобы при рестарте и включении питания на нем было High. Его нельзя замыкать на Vcc.
 
Сверху Снизу