#include #include #include "ntp.h" #include "config.h" #include "animations.h" #include "wifi.h" #include "ota.h" #include "my_fastled.h" #include "EffectEntry.h" #include "my_mqtt.h" #include "functions.h" #include "effects.h" uint8_t starting_up = OTA_STARTUP_DELAY; int loop_timeouts = 0; long loop_started_at = 0; uint8_t baseHue = 0; // defined as extern in prototypes.h void setup() { Serial.begin(74880); LOGln("Core * Starting"); setup_effects(); wifi_setup(); ntp_setup(); ota_setup(); fastled_setup(); ntpClient.begin(); #ifdef MQTT_ENABLE mqtt_setup(); #endif LOGln("Core * Setup complete"); current_effect->start(); } void loop() { loop_started_at = millis(); ota_loop(); if (starting_up > 0) { EVERY_N_SECONDS(1) { Serial.print("Core * Waiting for OTA... "); Serial.println(starting_up); starting_up--; Window* w = Window::getFullWindow(); CRGB color(0xFF0000); w->clear(); for (int i=0; isetPixel(i, 0, &color); } FastLED.show(); } return; } ntpClient.update(); #ifdef MQTT_ENABLE mqtt_loop(); #endif EVERY_N_MILLISECONDS(100) { baseHue++; } EVERY_N_MILLISECONDS(1000 / FPS) { //LOGln("Core * loop running"); current_effect->loop(); //LOGln("Core * loop ran"); if (current_effect->can_be_shown_with_clock()) { effect_clock.loop(current_effect->clock_as_mask(), CRGB(0xFFFFFF), CRGB(0x000000)); } FastLED.show(); } #if defined(MQTT_ENABLE) && defined(MQTT_REPORT_METRICS) EVERY_N_SECONDS(15) { mqtt_publish("free_heap", ESP.getFreeHeap()); mqtt_publish("uptime", millis()/1000); } #endif // MQTT_REPORT_METRICS if (MONITOR_LOOP_TIMES && millis()-loop_started_at>=MONITOR_LOOP_TIME_THRESHOLD) { LOG("Core * Loop took "); LOG(millis()-loop_started_at); LOGln("ms."); loop_timeouts++; LOG("Core * Timeout counter is now "); LOGln(loop_timeouts); if (loop_timeouts >= MONITOR_LOOP_TIME_COUNT_MAX) { ESP.restart(); } } else if (loop_timeouts > 0) { loop_timeouts--; } }