Перешил Sonoff-touch, используя Arduino IDE. Брокер Москито поставил на Raspberry. Все красиво работает, включается и реконнектится. Но мой внутренний параноик не дает покоя: "а что если..." - потеря соединения с wifi или raspberry (даже краткосрочно), приводит к тому, что клиент пытается восстановить соединение и в этот момент выключатель света не реагирует (тобишь не рабоает). Я использую библиотеку <PubSubClient.h>. В инетах нашел, что у функции client.connect уходит под 6 секунд на попытку установить соединение (допустим mqtt-сервис офлайн)... там вроде бы в библиотеке жестко прописаны толи 20, толи даже 30 попыток с таймаутом в 150 миллисекунд на каждую... Может кто-то подсказать или другую библиотеку, или какой-то выход с данной ситуации?
Да, есть такая особенность. Я тоже с этим столкнулся в своих модулях на ESP. Я перенес обработку выключателей, и все критичное к задержкам, в функцию вызываемую через Ticker. (посмотрите эту библиотеку) Тикер, настроен на вызов каждую миллисекунду. В тикере обрабатываю наличие полупериодов напряжения сети, для определения включен выключатель или нет, и соответственно, переключаю реле. В loop() осталось только отслеживание соединений по WiFi, mqtt, переподключения, и публикация состояния по mqtt на брокер. В таком варианте выключатели работают как обычные, без задержек.
Не вздумайте работать с модулями на Lua: там нет такой проблемы по сути явления. Разве позволено правоверному сектанту-ардуиноIDE искать легкие пути!
Перечитал несколько раз, пока врубился. ИгорьК, вы проповедуете советуете Lua для работы с модулями? Просто, само как-то так получилось, что скрипты в Ардуино-IDE мне (java-программеру) показались с ходу очень интуитивно понятными... и почему то даже в голову не пришло, что можно попробовать какой-то другой язык. Или я вас не правильно понял и вы вообще о другом?
Правильно поняли. Я не проповедую, я программирую на Lua - 90% моих устройств IoT именно на нем. В отличие от Си, оно же Java, реализация Lua на ESP-8266 есть like node.js (JavaScript) - асинхронная и событийно ориентированная. Это за глаза хватает для большинства задач. А та проблема что в топике - просто невозможна как явление.
Так проверял, лично! Мой пример – это не совсем правильный вариант “сектантства Ардуино IDE”. Столкнулся с ESP в 2015 - начинал разбираться с ESP под NodeMcu и LUA. С LUA, тогда столкнулся впервые, скачал книжку, разбирался на примерах… Нашел Вашу тему на этом форуме. Спасибо!!! Очень помогла! Все бы ничего, но бесили вечная нехватка памяти и непредсказуемые рестарты. Вроде и программа простая, и сутки нормально работает, а потом, после включения, раз и через 5 минут модуль сам перезагрузился… Ну не привык я к этому… Позже нашел возможность поддержки ESP8266 в ардуино IDE. Вот как раз тут, я и начал знакомится с Ардуино IDE (До этого использовал AVR-Studio, ICC-AVR) И оказалось, что ESP с прошивкой из под ардуино IDE ( как мне тогда показалось) работает более стабильно, чем под NodeMcu!!! До этого знал, что есть платформа Ардуино, есть модули, есть Си для Ардуино, но на практике не сталкивался. Как то не нужно было… С микроконтроллерами, начинал с 8048,8051, 52 потом PIC16F, AVR, Меги. Как хобби. Писал в основном на Си, меньше на асме. И ведь работало-то - абсолютно стабильно. Никаких рестартов, зависаний! Игорь, а как сейчас, с последними сборками NodeMcu? Модули все также, могут непроизвольно рестартовать?
Вот поэтому у Вас и падал NodeMCU. Логика другая. Абсолютно. Когда ее вкуришь - ничего не падает. Я знаю (сталкивался) с единственным багом - реализация ssl не коннектится с Телеграмом. Но он известен в сообществе и когда нибудь ликвидируется. Больше не знаю что сказать.
Это история из тех времен, когда сектанты Ардуино на километр боялись подходить к модулю. Ардуино IDE тогда не заваливалась - ее просто не было. Глядя сейчас на код Lua и имея некоторый опыт легко можно понять, что это пишет Си(шник), немедленно убивает память и делает лишние движения.
Поддержу Игоря. Произвольные рестарты происходят не по вине модуля или прошивки. Как правило причина кроется в кривизне написания кода и/или отсутствия нужных для кода блоков прошивки. Но, при прочтении сообщений об ошибках, выдаваемых Esplorer'ом, суть неправильной работы кода быстро становится ясна.
Способ писать NodeMCU "как на Си" используя синтаксис Lua обречен. Но, сказать честно, я это до конца осознал довольно поздно - с выходом Iskra JS и попыткой разобраться что это за зверь. Просто литературы по JS много и разной. Есть хорошие книжки. Lua здесь есть JS но очень простой и без заумных наворотов. Взят асинхрон и событийный подход и откинуто все что можно убрать из JS без потери функциональности. Получился NodeMCU-Lua. Компактный и простой.