#include <WiFi.h>
#include <PubSubClient.h>

// Informations WiFi et MQTT
const char* ssid = "Wokwi-GUEST";         // Nom du réseau WiFi
const char* password = "";                // Mot de passe WiFi
const char* mqtt_server = "mqtt.thingsboard.cloud";  // Serveur MQTT
const char* mqtt_user = "OKwJidAWhQOIC5Ey817g";      // Ton access token
const char* mqtt_topic = "v1/devices/me/telemetry";  // Topic MQTT pour ThingsBoard

// Déclaration des objets WiFi et MQTT
WiFiClient espClient;
PubSubClient client(espClient);

// Définitions des LEDs pour le statut WiFi et MQTT
#define WIFI_LED 2  
#define MQTT_LED 15 

void setup_wifi() {
    Serial.begin(115200);
    Serial.println("\nConnexion au WiFi...");

    WiFi.mode(WIFI_STA);
    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }

    Serial.println("\nWiFi connecté !");
    Serial.print("Adresse IP: ");
    Serial.println(WiFi.localIP());
}

void reconnect() {
    while (!client.connected()) {
        Serial.print("Connexion à MQTT...");
        
        // Connexion au broker MQTT avec l'access token de ThingsBoard
        if (client.connect("ESP32_Client", mqtt_user, "BO0X2rrMoQRZkgFDwWV8")) {
            Serial.println(" Connecté à MQTT !");
        } else {
            Serial.print(" Échec, code erreur = ");
            Serial.print(client.state());
            Serial.println(". Nouvelle tentative dans 5s...");
            delay(5000);
        }
    }
}

// Vérifie l'état du WiFi et met à jour la LED correspondante
void checkWiFi() {
    digitalWrite(WIFI_LED, WiFi.status() == WL_CONNECTED ? HIGH : LOW);
}

// Vérifie l'état de la connexion MQTT et met à jour la LED
void checkMQTT() {
    digitalWrite(MQTT_LED, client.connected() ? HIGH : LOW);
}

void setup() {
    pinMode(WIFI_LED, OUTPUT);
    pinMode(MQTT_LED, OUTPUT);

    setup_wifi();
    
    client.setServer(mqtt_server, 1883);
}

void loop() {
    checkWiFi();
    reconnect();
    checkMQTT();
    client.loop(); // Nécessaire pour maintenir la connexion MQTT
}
esp:0
esp:2
esp:4
esp:5
esp:12
esp:13
esp:14
esp:15
esp:16
esp:17
esp:18
esp:19
esp:21
esp:22
esp:23
esp:25
esp:26
esp:27
esp:32
esp:33
esp:34
esp:35
esp:3V3
esp:EN
esp:VP
esp:VN
esp:GND.1
esp:D2
esp:D3
esp:CMD
esp:5V
esp:GND.2
esp:TX
esp:RX
esp:GND.3
esp:D1
esp:D0
esp:CLK
led1:A
led1:C
led2:A
led2:C
r1:1
r1:2
r2:1
r2:2