All streams
Search
Write a publication
Pull to refresh
4
0

Пользователь

Send message
Библиотека таймера лишняя. У Arduino ESP8266 есть встроенная либа Ticker.h. Пример моргания светодиода без delay тут.
объяснял на одном уютном форуме — «Пока на шине один slave, все еще как то работает, но стоит добавить еще устройств — ESP8266 начинает виснуть и перегружаться. Потому что, когда wire.h не корректно завершает чтение, slave вешает SDA на землю и ждет от мастера SCL чтоб передать оставшийся кусок байта. Либа wire.h об этом ничего не знает т.к. в ней нет нормальной проверки коллизий и пытается передать на этот или следующий slave новое сообщение. Но все устройства молчат тк ничего не получают из-за того, что наш slave притянул SDA к земле и ждет завершения своей команды. Либа ничего не получив начинает растягивать SCL. Когда растягивать уже некуда, главный цикл встает колом. Через ~3 секунды, после остановки loop, срабатывает WDT и модуль перегружается. А теперь представим, что наш slave — это часы реального времени с батарейкой. ESP8266 перегрузился, а часы нет и все еще ждут когда модуль закончит с ними чтение, удерживая SDA. Через ~3 секунды опять сработает WDT и модуль снова перезагрузится. Круг замкнулся. Не поможет даже передергивание питания, тк наши часики то с батарейкой.»
Рекомендую под ARDUINO ESP8266 заменить библиотеку WIRE.
Вообще то так должен выглядеть НОРМАЛЬНЫЙ домашний принтер.
DHT11, DHT21 и DHT22 не очень хорошие датчики для измерения влажности. Подробности расследования тут. Лучше использовать SHT21, HTU21D, Si7021, но длинна проводов ограничена тк это I2C шина.
вот тут можно посмотреть трюк как продлить железный AVR watchdog с помощью софт хака. Перевести watchdog в Interrupt Mode, считать количество срабатываний, наример WDTO_8S * 4 срабатывания дает 32 секунды. Потом переводить watchdog в Reset Mode и перегружать AVR
зачем вы вызываете WiFi.mode(WIFI_OFF) перед WiFi.forceSleepBegin()? WiFi.forceSleepBegin() сама вызывает WiFi.mode(WIFI_OFF) в своем теле.

вот что в исходниках об функции WiFi.forceSleepBegin()
/**
* Disable WiFi for x us when value is not 0
* @param sleep_time_in_us
* @return ok
*/
bool ESP8266WiFiGenericClass::forceSleepBegin(uint32 sleepUs) {
_forceSleepLastMode = getMode();
if(!mode(WIFI_OFF)) {
return false;
}

if(sleepUs == 0) {
sleepUs = 0xFFFFFFF;
}

wifi_fpm_set_sleep_type(MODEM_SLEEP_T);
wifi_fpm_open();
return (wifi_fpm_do_sleep(sleepUs) == 0);
}
Ну вот смотрите, например автор исходников LiquidCrystal_I2C исправит кучу багов или перелопатит весь код сделая ее быстрее. Вам придется посидеть вечерок занимаясь копи-пастой, чтоб привести ваш код к новому виду.
С наследованием такого не будет — вам только нужно будет перезаписать LiquidCrystal_I2C в папке библиотек и все.
Зачем вы переписали библиотеку? Можно было создать свою и унаследовать все классы оригинальной, разбавив своим кодом.
Испытывали военные Памир здесь. Рядом с ними находится гражданский Институт Ядерной Энергетики. Местные до сих пор называют это место — Зона. Во времена сюза периметр был огражден бетонным забором, сигналкой и полосой.
Вот мои потуги написать нормальную либу под arduino и i2c шину.
в свете новых статистичесих данных, ученые говорят — чем стирильнее обстановка с рождения младенца там выше вероятность стать астматиком и алергиком
щас набежит толпа феминисток и потребует равных прав с мужчинанами.

Information

Rating
Does not participate
Location
Беларусь
Registered
Activity