• Уважаемые посетители сайта esp8266.ru!
    Мы отказались от размещения рекламы на страницах форума для большего комфорта пользователей.
    Вы можете оказать посильную поддержку администрации форума. Данные средства пойдут на оплату услуг облачных провайдеров для сайта esp8266.ru
  • Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

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

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.
 
Сверху Снизу