Esp8266 : периодический soft wdt reset и волшебный yield()

Перед какой либо передачей данных проверять WiFi и коннект до сервера. И реконектиться соответственно.

Это на агрегаторе нужно делать перезапрос данных если их не удалось получить, так как он является клиентом и инициатором связи в этом случае. А ваш контроллер должен сам стараться быть на связи , например проверять прохождение пингов , или проверять конект к роутеру. и если связь потеряна - то пытаться восстановить конект. а также писать в память данные и снабжать их метками времени. При запросе отправлять на агрегатор данные текущие и те которые накопились из за перебоев связи.

Вот и вопрос, КАК ИМЕННО ПРАВИЛЬНО СДЕЛАТЬ РЕКОННЕКТ.

Полная перезагрузка железяки с таймаутом подключения к вафле.

Вот наткнулся на должок и дописал, тк нехорошо решимши проблему, не поделиться.

Спасибо, так и поступил.
Что же касается елдов и дэлеев, то все оказалось просто :slight_smile: они применялись в функциях, вызываемых Ticker-ом а это фактически обработчики прерываний, пттому и висло и рестартилось.
Я оставил в обработчике тикера только выставление флага о том, что пора бы этим заняться, а флаг потом проверяю в loop ифом и если есть обрабатываю. Проблема ушла насовсем.

1 лайк

Как продолжение темы…
Аптайм достигает значений в сотню и более часов, и сбрасывается по причине перепрошивки на дополненные версии, ОДНАКО
…вылезла другая пенка: esp8266 имеет некоторый дефицит пинов, потому я использую pcf расширитель. Помимо этого применяется i2c экранчик см фото ниже. Так вот, работа всех сервисов продолжается, расширитель управляет силовыми линиями, но вот экран гаснет и запускается только после отключения и подачи питания. Что бы это могло быть? Возможно ли его перезапустить без обесточивания?
Применяются библиотеки
Wire из комплекта для esp
Pcf8574 от RENZO MISCHIANTI 2.2.2
iarduino_OLED 1.0.1
NODE MCU
SCL - 5 (D1) SDA - 4 (D2)

При старте в setup() читаю EEPROM, где сохраняются количество стартов, подключений к Wi-Fi, MQTT. Количество стартов инкрементирую, записываю в EEPROM. Так же по Wi-Fi, MQTT. После подключения к брокеру (OpenHAB) периодически передаю эти данные на брокер. По приему вижу, что клиент жив и передает информацию. Не было информации 15 минут - Push на смартфон. По значению счетчиков вижу, перезапускался ли клиент, сколько реконнектов было. Удаленно могу сбросить счетчики. На даче роутер и LeonardoETH, ESP висят на аккумуляторе 120А/ч. Push приходит когда выключают/включают 220В, произвольных рестартов нет совсем.

Кстате, а кто как проверяет коннект до… ну хотя бы локального шлюза?
Например 192.168.77.254
Пинговалки есть ли проверенные?

так куда ему деваться, библиотека ping.h

Уж думал, что победил экран, ан нет.
Новая напасть, через часы/сутки после старта сначала строки съезжают вниз циклически, а теперь еще и зеркалируется и переворачивается информация посимвольно. Правда на одном устройстве из двух, на втором только съезжает.


Просто бред какой то. Кто то сталкивался с таким?

Где-то гадишь в занятую память

Тогда следует выяснить, имеется ли у проблемы аппаратная составляющая.
Для начала просто выкинуть из скетча все, что не относится к работе с экраном, и погонять экран на протяжении нескольких суток.

Это не объясняет разницы в поведении двух устройств (хотя и не исключает). Поэтому я бы сначала удостоверился в отсутствии аппаратных проблем. Искать ошибку в программе на неработающем оборудовании - то еще развлечение.

Есть еще два блока с такими экранами. Но экраны получены парой месяцев позже с али. Там проблема не проявилась. Там просто виснет вся I2c. Наверно в пнд поставлю на параллельный прогон все 4 блока.
Еще есть 5 таких же экранов, полученных в разное время от разных продавцев. Надо будет спаять для них стендик и поставить на прогон.