HCesp/Task0.ino
2026-04-14 05:11:09 +09:00

130 lines
4.2 KiB
C++

#include "HermitCrab.h"
#include "Config.h"
#include "ConnectWiFi.h"
#include "UI.h"
#include <esp_task_wdt.h>
#include <BLEScan.h>
#include "TimeManager.h"
#include "WiFiHost.h"
#include "NTC_10K.h"
#include "AHT2x.h"
#define TAG_TASK0 "Task0"
extern bool g_bWiFiSetupExecuted;
void setup_BLE();
// ==================================================================================
//
// Core0 Loop - Connection and communication
//
// ==================================================================================
MY_IRAM_ATTR void core0Task(void *pvParameters) {
ESP_LOGI(TAG_TASK0,"Core 0 Task Started");
DPRINTLN("Core 0 Task Started");
wl_status_t lastWiFiStatus = WL_DISCONNECTED;
unsigned long tickMillis = millis();
unsigned long tickSecond;
unsigned long lastTick = tickMillis / 1000;
unsigned long lastTickMillis = tickMillis;
unsigned long lastSensorUpdate1 = tickMillis;
unsigned long lastSensorUpdate2 = tickMillis + 2500;
uint16_t tick1000, lastTick1000 = tickMillis % 1000;;
uint16_t tick250, lastTick250 = tickMillis % 250;
uint8_t slot;
uint8_t lastSlot = tickMillis / 50;
esp_task_wdt_add(NULL); // NULL for the current task
ui.start();
ble.setupScan();
while (true) {
esp_task_wdt_reset();
tickMillis = millis();
tick250 = tickMillis % 250;
tick1000 = tickMillis % 1000;
tickSecond = tickMillis / 1000;
slot = tick1000 / 50;
//===============================================================================
// Loop top
// Once in a second loop
if (tick1000 != lastTick1000) {
if (slot != lastSlot) {
switch (slot) {
case 1:
case 6:
case 11:
case 16: // UI Display
ui.updateDisplayTop(tickSecond);
break;
case 2:
case 7:
case 12:
case 17: // NTC Temp Sensor
ntc.readSensor();
break;
case 3: // NTP - Time
if (isWiFiConnected()) {
if (timeManager.getTime(tickMillis)) {
ESP_LOGI(TAG_TASK0,"NTP time loaded: %s", printTime());
}
}
break;
case 4:
case 9:
case 14:
case 19:
ntc.readSensor();
break;
case 5: // Heartbeat
if (isWiFiConnected()) {
host.SendHeartBeat(tickMillis);
}
break;
case 8: // BLE
ble.loop(tickMillis);
break;
case 13: // ATH2x - 0x38
aht25.readSensor(tickMillis);
break;
case 15: // ATH0x - 0x39
aht10_0x39.readSensor(tickMillis);
break;
case 18: // UI Bottom
ui.updateDisplayBottom(tickSecond);
break;
default: // 0 10
break;
}
lastSlot = slot;
}
lastTick1000 = tick1000;
lastTick250 = tick250;
} // end of - if (tick1000 != lastTick1000)
// =====================================================
// Unconditional Loop
host.MonitorUDP();
// Loop end
//==========================================================================
lastTickMillis = tickMillis;
esp_task_wdt_reset();
} // end of - While(True)
ESP_LOGI(TAG_TASK0,"Core 0 Task Exit");
vTaskDelete(NULL);
}
// ==================================================================================
// End of Core0 Loop
// ==================================================================================