#line 1 "C:\\Users\\espi_\\Documents\\Arduino\\4. Bell Systems\\1. Main Projects\\Project - Vesper\\MQTT_WiFi_Utilities.hpp" #pragma once TimerHandle_t mqttReconnectTimer; TimerHandle_t wifiReconnectTimer; String GetPayloadContent(char * data, size_t len) { String content = ""; for(size_t i = 0; i < len; i++) { content.concat(data[i]); } return content; } void ConnectToMqtt() { Serial.println("Connecting to MQTT..."); mqttClient.connect(); } void OnMqttConnect(bool sessionPresent) { Serial.println("Connected to MQTT."); Serial.print("Session present: "); Serial.println(sessionPresent); SuscribeMqtt(); } void OnMqttDisconnect(AsyncMqttClientDisconnectReason reason) { Serial.println("Disconnected from MQTT."); if(WiFi.isConnected()) { xTimerStart(mqttReconnectTimer, 0); } } void OnMqttSubscribe(uint16_t packetId, uint8_t qos) { Serial.println("Subscribe acknowledged."); Serial.print(" packetId: "); Serial.println(packetId); Serial.print(" qos: "); Serial.println(qos); } void OnMqttUnsubscribe(uint16_t packetId) { Serial.println("Unsubscribe acknowledged."); Serial.print(" packetId: "); Serial.println(packetId); } void OnMqttPublish(uint16_t packetId) { Serial.println("Publish acknowledged."); Serial.print(" packetId: "); Serial.println(packetId); } void ConnectWiFi_STA(bool useStaticIP = false) { Serial.println(""); WiFi.mode(WIFI_STA); if(useStaticIP) { WiFi.config(ip, gateway, subnet); WiFi.setHostname(hostname); } WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(100); Serial.print('.'); } Serial.println(""); Serial.print("Iniciado STA:\t"); Serial.println(ssid); Serial.print("IP address:\t"); Serial.println(WiFi.localIP()); } void ConnectWiFi_AP(bool useStaticIP = false) { Serial.println(""); WiFi.mode(WIFI_AP); while(!WiFi.softAP(ssid, password)) { Serial.println("."); delay(100); } if(useStaticIP) WiFi.softAPConfig(ip, gateway, subnet); Serial.println(""); Serial.print("Iniciado AP:\t"); Serial.println(ssid); Serial.print("IP address:\t"); Serial.println(WiFi.softAPIP()); } void WiFiEvent(WiFiEvent_t event) { Serial.printf("[WiFi-event] event: %d\n", event); switch(event) { case ARDUINO_EVENT_WIFI_STA_GOT_IP: Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); ConnectToMqtt(); break; case ARDUINO_EVENT_WIFI_STA_DISCONNECTED: Serial.println("WiFi lost connection"); xTimerStop(mqttReconnectTimer, 0); // ensure we don't reconnect to MQTT while reconnecting to Wi-Fi xTimerStart(wifiReconnectTimer, 0); break; } } void InitMqtt() { mqttReconnectTimer = xTimerCreate("mqttTimer", pdMS_TO_TICKS(2000), pdFALSE, (void*)0, reinterpret_cast(ConnectToMqtt)); wifiReconnectTimer = xTimerCreate("wifiTimer", pdMS_TO_TICKS(5000), pdFALSE, (void*)0, reinterpret_cast(ConnectWiFi_STA)); mqttClient.onConnect(OnMqttConnect); mqttClient.onDisconnect(OnMqttDisconnect); mqttClient.onSubscribe(OnMqttSubscribe); mqttClient.onUnsubscribe(OnMqttUnsubscribe); mqttClient.onMessage(OnMqttReceived); mqttClient.onPublish(OnMqttPublish); mqttClient.setServer(MQTT_HOST, MQTT_PORT); mqttClient.setCredentials(MQTT_USER, MQTT_PASS); }