Я просто хочу выяснить, delay(200) в лупе - это нормально?
А в чем беда?
Всё в ESP8266 работает по событиям. Эмуляция поллинга в loop() - это чуждо её системе и сделано для тех, кто не понимает основ программирования кроме как в линеечку...
Системе и нормальному коду всё равно, даже если loop() содержит всего одну функцию delay(100500). WiFi, работа TCP стека и все прерывания только в этом случае работают правильно, не нарушая спецификаций WiFi и прочих RFC (рекомендаций).
И еще немного конструктивной критики:
Функция getTemperature(int32_t rawValue)возвращает число с двумя знаками после запятой, на дисплей выводим
целое число, на "месте" бы округлять, да и вообще отказаться бы от операций с "плавающей точкой", уж больно жрет до хрена памяти.
Плавающая точка жрет всего несколько блоков с инициализацией библиотеки в RAM, а остальной код находится в Flash (XIP). XIP у вас 1 МегаБайт и не понятно, что туда не влезает при правильном подходе и разработке приложения. Константы, скрипты и даже код могут подгружаться на время исполнения, к примеру как оверлеи, из всей доступной области одного чипа Flash на 16 МБайт. А можно и несколько чипов Flash или внешний сервер, включающий оплату за загружаемый код в IRAM и исполняемый код у пользователя
. По этому ограничений нет. Тем более для ваших приложений, где какие либо события или опрос происходят и производятся не чаще 1 раза в несколько минут. Даже если переписывать flash для запуска разного кода, всё равно за время использования ESP8266 дырки там не будет, т.к. все процессы у вас очень медленные... а все задачи в loop() сводятся к разбивке на малые блоки кода по времени исполнения для быстрейшего ухода в delay(), чтобы система работала. Проще всё эти куски повесить на "калбэки" уже имеющиеся в системе у LwIP, да совт-таймерные "калбэки" и аппаратные прерывания... Код у вас сократиться на никому ненужный "поллинг" - т.е. loop() станет пустым, с одной строчкой - delay(100500). Ну и т.к. все события в ESP8266 обрабатываются по раздельности, с нулевой глубиной стека (вызываются из ets_run()), то каждое событие имеет возможность на время обработки использовать всю память ESP8266, по выходу предоставив пару байт ответа и новые назначенные события для последующей обработки, да с указанием уровня приоритета, чтобы не мешать работать системе.
Arduino - это атавизм, созданный для того, чтобы вы не смогли работать с современными мультизадачными системами в последующем.