• Система автоматизации с открытым исходным кодом на базе esp8266/esp32 микроконтроллеров и приложения IoT Manager. Наша группа в Telegram

Esp12F+AHT10+DS18B20+MQTT+LCD5110+Encoder - проект управления ТЭНами и насосом

Несколько месяцев занимаюсь разработкой своей "железки".
photo1657699243.jpeg
Отрисовал плату(причем несколько версий).
photo1657699291.jpeg
Писал код отдельно по блокам и функционалу, например сначала подключение дисплея нокия 5110 и работу с меню энкодером.
Удалось от esp12f получить много ног, путем использования расширителя портов pcf8575.
Подключение датчиков и вывод на дисплей тоже отдельным кодом тестировал.
Потом изучил работу с mqtt и подключил реле и передачу температур к брокеру.
photo1657670133 (1).jpeg
Все шло хорошо, пока не начался "сбор" этого разрозненного кода воедино.
Вначале столкнулся с проблемой "заторможенности" энкодера, ну понятно, многозадачности у ардуинки нет.
Пробовал все, убрал разумеется по возможности delay() - заменил на millis().
Не заметил разницы, пробовал даже диспетчер задач gyverOS, но тоже нет эффекта.
В итоге пока временно отказался от энкодера, решил просто выводить информацию с датчиков и состояние реле ТЭНов на дисплей и обновлять желаемую температуру на дисплее от брокера.
Но все равно идут задержки, и к этому еще почему то значения температур с датчиков AHT10 и DS18B20 есть в переменных, но на дисплее вместо значений 0, хотя в начале кода декларировал переменный без значений
Код:
int temp_water;//температура с датчика ds18b20
int temp_near;//температура с датчика AHT
photo1657670133.jpeg
В общем второй день сижу над кодом, и не пойму куда копать.
Примеров море, но один не работает, другой кривой, третий не подходит под железо.
Помогите с кодом, только просьба не советами из разряда - да там надо "что то абстрактное", прошу помощи именно по коду - что куда поставить, почему задержка и как с ней бороться.
Беда еще в том, что в погоне за пинами, я их задействовал ВСЕ, даже TX/RX и теперь в режиме работы с дисплеем не имею возможности использовать монитор порта для отладки.

const int NOKIA_DIN = 1; //D10 -невозможно использовать сериал монитор
const int NOKIA_DC = 3; //D9 -невозможно использовать сериал монитор

Код проекта - скетч по ссылке.
 
Сверху Снизу