// NTP
#ifdef USE_NTP
timeClient.begin();
ESP.wdtFeed();
#endif
// MQTT
#if (USE_MQTT)
if (espMode == 1U)
{
mqttClient = new AsyncMqttClient();
MqttManager::setupMqtt(mqttClient, inputBuffer, &sendCurrent); // создание экземпляров объектов для работы с MQTT, их инициализация и подключение к MQTT брокеру
}
ESP.wdtFeed();
#endif
// ОСТАЛЬНОЕ
memset(matrixValue, 0, sizeof(matrixValue)); //это массив для эффекта Огонь. странно, что его нужно залить нулями
randomSeed(micros());
changePower();
loadingFlag = true;
TextTicker = RUNNING_TEXT_DEFAULT;
}
void loop()
{
parseUDP();
if (Painting == 0) {
effectsTick();
EepromManager::HandleEepromTick(&settChanged, &eepromTimeout, &ONflag,
¤tMode, modes, &(FavoritesManager::SaveFavoritesToEeprom));
//#ifdef USE_NTP
#if defined(USE_NTP) || defined(USE_MANUAL_TIME_SETTING) || defined(GET_TIME_FROM_PHONE)
//if (millis() > 30 * 1000U) можно попытаться оттянуть срок первой попытки синхронизации времени на 30 секунд, чтобы роутер успел не только загрузиться, но и соединиться с интернетом
timeTick();
#endif
#ifdef OTA
otaManager.HandleOtaUpdate(); // ожидание и обработка команды на обновление прошивки по воздуху
#endif
TimerManager::HandleTimer(&ONflag, &settChanged, // обработка событий таймера отключения лампы
&eepromTimeout, &changePower);
if (FavoritesManager::HandleFavorites( // обработка режима избранных эффектов
&ONflag,
¤tMode,
&loadingFlag
//#ifdef USE_NTP
#if defined(USE_NTP) || defined(USE_MANUAL_TIME_SETTING) || defined(GET_TIME_FROM_PHONE)
, &dawnFlag
#endif
#ifdef RANDOM_SETTINGS_IN_CYCLE_MODE
, &random_on
, &selectedSettings
#endif
))
{
#ifdef USE_BLYNK
updateRemoteBlynkParams();
#endif
FastLED.setBrightness(modes[currentMode].Brightness);
//FastLED.clear(); из-за этой странной строчки между эффектами лампа полностью тухла. зачем так делать?!
//delay(1); и из-за этой ещё
}
#if USE_MQTT
if (espMode == 1U && mqttClient && WiFi.isConnected() && !mqttClient->connected())
{
MqttManager::mqttConnect(); // библиотека не умеет восстанавливать соединение в случае потери подключения к MQTT брокеру, нужно управлять этим явно
MqttManager::needToPublish = true;
}
if (MqttManager::needToPublish)
{
if (strlen(inputBuffer) > 0) // проверка входящего MQTT сообщения; если оно не пустое - выполнение команды из него и формирование MQTT ответа
{
processInputBuffer(inputBuffer, MqttManager::mqttBuffer, true);
}
MqttManager::publishState();
}
#endif
#ifdef USE_BLYNK
if (espMode == 1U && WiFi.isConnected() && millis() - blynkTimer >= 500) {
blynkTimer = millis(); // слишком часто запрашивать сервер - это плохо
Blynk.run();
}
#endif
#if defined(GENERAL_DEBUG) && GENERAL_DEBUG_TELNET
handleTelnetClient();
#endif
}//if (Painting == 0)
ESP.wdtFeed();
#ifdef FIX_DEFECTIVE_BOARD
delay(FIX_DEFECTIVE_BOARD);
#endif
}
#ifndef WIFI_MANAGER_LIBRARY_PROPER_TEST
#error "Библиотеки из архива с прошивкой не были помещены в папку библиотек Arduino IDE. Так вы прошивку не загрузите."
#endif