From e30531729a09aade8328e7b1c046d943deb8fdbf Mon Sep 17 00:00:00 2001 From: Jose Date: Wed, 4 Jun 2025 00:06:58 +0200 Subject: [PATCH] Refactor: update task timer structure, enhance WiFi connection messages, and improve JSON debug output --- hardware/include/WifiConnection.hpp | 1 + hardware/include/globals.hpp | 14 +++++++++ hardware/include/main.hpp | 11 ------- hardware/src/lib/http/JsonTools.cpp | 39 ++++++++++++++---------- hardware/src/lib/inet/MqttClient.cpp | 8 ++--- hardware/src/lib/inet/WifiConnection.cpp | 21 ++++++------- hardware/src/main.cpp | 32 +++++++++++-------- 7 files changed, 70 insertions(+), 56 deletions(-) diff --git a/hardware/include/WifiConnection.hpp b/hardware/include/WifiConnection.hpp index c22f82b..fda7521 100644 --- a/hardware/include/WifiConnection.hpp +++ b/hardware/include/WifiConnection.hpp @@ -1,5 +1,6 @@ #pragma once +#include "globals.hpp" #include #include diff --git a/hardware/include/globals.hpp b/hardware/include/globals.hpp index f3906d8..e87717f 100644 --- a/hardware/include/globals.hpp +++ b/hardware/include/globals.hpp @@ -1,3 +1,5 @@ +#pragma once + #include #define DEVICE_ROLE SENSOR // se cambia entre SENSOR y ACTUATOR @@ -17,6 +19,18 @@ #define ACTUATOR 1 #define DEBUG +//#define JSON_PRINTS + +struct TaskTimer_t +{ + uint32_t lastRun = 0; + uint32_t interval = 1000; + + TaskTimer_t() = default; + + TaskTimer_t(uint32_t last, uint32_t interval) + : lastRun(last), interval(interval) {} +}; extern const uint32_t DEVICE_ID; extern int GROUP_ID; diff --git a/hardware/include/main.hpp b/hardware/include/main.hpp index 14cedb7..80b41e7 100644 --- a/hardware/include/main.hpp +++ b/hardware/include/main.hpp @@ -23,17 +23,6 @@ #include "MAX7219.hpp" #endif -struct TaskTimer -{ - uint32_t lastRun = 0; - uint32_t interval = 1000; - - TaskTimer() = default; - - TaskTimer(uint32_t last, uint32_t interval) - : lastRun(last), interval(interval) {} -}; - struct SensorInfo { int id; diff --git a/hardware/src/lib/http/JsonTools.cpp b/hardware/src/lib/http/JsonTools.cpp index efef83e..5d7ebf1 100644 --- a/hardware/src/lib/http/JsonTools.cpp +++ b/hardware/src/lib/http/JsonTools.cpp @@ -32,7 +32,11 @@ String serializeSensorValue( String output; serializeJson(doc, output); +#ifdef JSON_PRINTS + Serial.println("๐Ÿ“œ JSON generado:"); + Serial.print("\t"); Serial.println(output); +#endif return output; } @@ -41,7 +45,7 @@ MAX7219Status_t deserializeActuatorStatus(HTTPClient &http, int httpResponseCode { if (httpResponseCode > 0) { -#ifdef DEBUG +#ifdef JSON_PRINTS Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); #endif @@ -52,39 +56,36 @@ MAX7219Status_t deserializeActuatorStatus(HTTPClient &http, int httpResponseCode if (error) { -#ifdef DEBUG +#ifdef JSON_PRINTS Serial.print(F("deserializeJson() failed: ")); Serial.println(error.f_str()); #endif return { - .status = "error", - .actuatorStatus = "Error" - }; + .status = "error", + .actuatorStatus = "Error"}; } String status = doc["status"] | "error"; String actuatorStatus = doc["actuatorStatus"] | "Unknown"; -#ifdef DEBUG +#ifdef JSON_PRINTS Serial.println("Actuator status deserialized:"); Serial.printf(" Status: %s\n Actuator Status: %s\n\n", status.c_str(), actuatorStatus.c_str()); #endif return { - .status = status, - .actuatorStatus = actuatorStatus - }; + .status = status, + .actuatorStatus = actuatorStatus}; } else { -#ifdef DEBUG +#ifdef JSON_PRINTS Serial.print("Error code: "); Serial.println(httpResponseCode); #endif return { - .status = "error", - .actuatorStatus = "HTTP error" - }; + .status = "error", + .actuatorStatus = "HTTP error"}; } } #endif @@ -93,24 +94,30 @@ int deserializeGroupId(HTTPClient &http, int httpResponseCode) { if (httpResponseCode > 0) { -#ifdef DEBUG +#ifdef JSON_PRINTS Serial.print("HTTP Response code: "); Serial.println(httpResponseCode); #endif String responseJson = http.getString(); +#ifdef JSON_PRINTS + Serial.println("Response JSON: " + responseJson); +#endif DynamicJsonDocument doc(ESP.getMaxAllocHeap()); DeserializationError error = deserializeJson(doc, responseJson); if (error) { -#ifdef DEBUG +#ifdef JSON_PRINTS Serial.print(F("deserializeJson() failed: ")); Serial.println(error.f_str()); #endif return -1; } - return (int)doc["message"] | -1; + if(doc["message"].isNull()) + return -1; + + return doc["message"].as(); } return -1; } \ No newline at end of file diff --git a/hardware/src/lib/inet/MqttClient.cpp b/hardware/src/lib/inet/MqttClient.cpp index 2f68eb2..2904b8e 100644 --- a/hardware/src/lib/inet/MqttClient.cpp +++ b/hardware/src/lib/inet/MqttClient.cpp @@ -8,7 +8,7 @@ PubSubClient client(wifiClient); void MQTT_OnReceived(char *topic, byte *payload, unsigned int length) { #ifdef DEBUG - Serial.print("Received on "); + Serial.print("๐Ÿ“ฅ Received on "); Serial.print(topic); Serial.print(": "); #endif @@ -47,7 +47,7 @@ void MQTT_Init(const char *MQTTServerAddress, uint16_t MQTTServerPort) void MQTT_Connect(const char *MQTTClientName) { #ifdef DEBUG - Serial.print("Starting MQTT connection..."); + Serial.println("๐Ÿ”Œ Starting MQTT connection..."); #endif if (client.connect(MQTTClientName, USER, MQTT_PASSWORD)) { @@ -58,9 +58,7 @@ void MQTT_Connect(const char *MQTTClientName) client.publish(statusTopic.c_str(), "connected"); } #ifdef DEBUG - Serial.print("Failed MQTT connection, rc="); - Serial.print(client.state()); - Serial.println(" try again in 5 seconds"); + Serial.println("โŒ Failed MQTT connection, trying again in 5 seconds"); #endif } diff --git a/hardware/src/lib/inet/WifiConnection.cpp b/hardware/src/lib/inet/WifiConnection.cpp index 350cc78..e835d18 100644 --- a/hardware/src/lib/inet/WifiConnection.cpp +++ b/hardware/src/lib/inet/WifiConnection.cpp @@ -1,10 +1,8 @@ #include - - WiFiClient wifiClient; -static bool wifiConnected = false; -static TaskTimer wifiTimer{0, 500}; +bool wifiConnected = false; +TaskTimer_t wifiTimer{0, 1000}; void setColor(uint8_t r, uint8_t g, uint8_t b) { @@ -39,7 +37,7 @@ void WiFi_Init() WiFi.mode(WIFI_STA); WiFi.begin(SSID, WIFI_PASSWORD); #ifdef DEBUG - Serial.print("๐ŸŸก Intentando conectar a WiFi: "); + Serial.print("๐ŸŸก Trying to connect to WiFi: "); Serial.println(SSID); #endif } @@ -64,9 +62,10 @@ void WiFi_Handle() if (!wifiConnected) { #ifdef DEBUG - Serial.println("๐ŸŸข Conectado a la red WiFi"); - Serial.print("IP: "); - Serial.println(WiFi.localIP()); + Serial.print("๐ŸŸข Connected to WiFi. IP: "); + Serial.print(WiFi.localIP()); + Serial.print(" | SSID: "); + Serial.println(SSID); #endif setColor(0, 255, 0); wifiConnected = true; @@ -74,13 +73,13 @@ void WiFi_Handle() return; } - if (now - wifiRetryTimer.lastRun >= wifiRetryTimer.interval) + if (now - wifiTimer.lastRun >= wifiTimer.interval) { #ifdef DEBUG - Serial.println("๐Ÿ” Reintentando conexiรณn WiFi..."); + Serial.println("๐Ÿ” Retrying WiFi connection..."); #endif WiFi.disconnect(true); WiFi.begin(SSID, WIFI_PASSWORD); - wifiRetryTimer.lastRun = now; + wifiTimer.lastRun = now; } } \ No newline at end of file diff --git a/hardware/src/main.cpp b/hardware/src/main.cpp index e8cc304..6759370 100644 --- a/hardware/src/main.cpp +++ b/hardware/src/main.cpp @@ -2,15 +2,14 @@ const uint32_t DEVICE_ID = getChipID(); const String mqttId = "CUS-" + String(DEVICE_ID, HEX); -int GROUP_ID; +int GROUP_ID = -1; -TaskTimer globalTimer{0, 10000}; -TaskTimer mqttTimer{0, 5000}; -TaskTimer wifiTimer{0, 5000}; +TaskTimer_t globalTimer{0, 30000}; +TaskTimer_t mqttTimer{0, 2000}; #if DEVICE_ROLE == ACTUATOR -TaskTimer matrixTimer{0, 25}; -TaskTimer displayTimer{0, 1000}; +TaskTimer_t matrixTimer{0, 25}; +TaskTimer_t displayTimer{0, 1000}; String currentMessage = ""; String lastMessage = ""; extern MD_Parola display; @@ -41,7 +40,6 @@ void setup() { #if DEVICE_ROLE == SENSOR - GROUP_ID = getGroupId(DEVICE_ID); BME280_Init(); Serial.println("Sensor BME280 inicializado"); GPS_Init(); @@ -76,13 +74,15 @@ void loop() return; } - if (!mqttStarted) + if(GROUP_ID == -1) { - MQTT_Init(MQTT_SERVER, MQTT_PORT); + GROUP_ID = getGroupId(DEVICE_ID); + } + + if (!mqttStarted && GROUP_ID != -1) + { + MQTT_Init(MQTT_URI, MQTT_PORT); mqttStarted = true; -#ifdef DEBUG - Serial.println("Iniciando conexiรณn MQTT..."); -#endif } uint32_t now = millis(); @@ -113,6 +113,7 @@ void loop() if (now - globalTimer.lastRun >= globalTimer.interval) { + #if DEVICE_ROLE == SENSOR readBME280(); readGPS(); @@ -124,6 +125,7 @@ void loop() sendSensorData(); #endif + globalTimer.lastRun = now; } @@ -159,12 +161,14 @@ void readBME280() void readGPS() { - gpsData = GPS_Read(); + gpsData = GPS_Read_Fake(); } void printAllData() { Serial.println("---------------------"); + Serial.println("๐Ÿ“ฆ Batch medida:"); + Serial.println("---------------------"); Serial.print("ID: "); Serial.println(DEVICE_ID, HEX); @@ -188,6 +192,8 @@ void printAllData() Serial.println(mq7Data.co); Serial.print("D0: "); Serial.println(mq7Data.threshold); + + Serial.println("---------------------"); } void sendSensorData()