#include <WiFi.h>
#include <PubSubClient.h>
// Définition des pins des LED RGB
uint8_t ledR = 2; // Pin Rouge
uint8_t ledG = 4; // Pin Vert
uint8_t ledB = 5; // Pin Bleu
// Configuration du réseau et du serveur MQTT
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqttServer = "broker.hivemq.com";
const int mqttPort = 1883;
// WiFi et MQTT
WiFiClient espClient;
PubSubClient client(espClient);
// Fonction de configuration initiale
void setup() {
Serial.begin(115200);
// Connexion au réseau Wi-Fi
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWi-Fi connecté!");
// Connexion au broker MQTT
client.setServer(mqttServer, mqttPort);
client.setCallback(mqttCallback);
// Initialisation des pins comme sorties
pinMode(ledR, OUTPUT);
pinMode(ledG, OUTPUT);
pinMode(ledB, OUTPUT);
// Test initial des LEDs
setRGB(1, 0, 0); delay(1000); // Rouge
setRGB(0, 1, 0); delay(1000); // Vert
setRGB(0, 0, 1); delay(1000); // Bleu
setRGB(0, 0, 0); // Éteindre
}
// Boucle principale
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
// Fonction de connexion au broker MQTT
void reconnect() {
while (!client.connected()) {
Serial.print("Connexion au MQTT...");
if (client.connect("ESP32_Client")) {
Serial.println("Connecté!");
client.subscribe("lampadaire/1/color"); // S'abonner au topic MQTT
} else {
Serial.print("Échec, erreur : ");
Serial.println(client.state());
delay(2000);
}
}
}
// Fonction appelée lorsqu'un message est reçu via MQTT
void mqttCallback(char* topic, byte* payload, unsigned int length) {
String message = "";
for (int i = 0; i < length; i++) {
message += (char)payload[i];
}
Serial.print("Message reçu : ");
Serial.println(message);
// Traitement des couleurs MQTT
if (String(topic) == "lampadaire/1/color") {
setColorFromMQTT(message);
}
}
// Fonction pour définir la couleur via MQTT
void setColorFromMQTT(String color) {
color.toLowerCase(); // Convertir en minuscules pour éviter les erreurs
if (color == "red") {
setRGB(1, 0, 0);
} else if (color == "green") {
setRGB(0, 1, 0);
} else if (color == "blue") {
setRGB(0, 0, 1);
} else if (color == "yellow") {
setRGB(1, 1, 0);
} else if (color == "cyan") {
setRGB(0, 1, 1);
} else if (color == "magenta") {
setRGB(1, 0, 1);
} else if (color == "white") {
setRGB(1, 1, 1);
} else {
setRGB(0, 0, 0); // Éteindre la LED pour une couleur non reconnue
Serial.println("Couleur non reconnue !");
}
}
// Fonction pour régler les couleurs RGB
void setRGB(uint8_t red, uint8_t green, uint8_t blue) {
digitalWrite(ledR, red); // Rouge
digitalWrite(ledG, green); // Vert
digitalWrite(ledB, blue); // Bleu
// Afficher les couleurs actuelles dans le moniteur série
Serial.print("Couleurs réglées - R: ");
Serial.print(red);
Serial.print(", G: ");
Serial.print(green);
Serial.print(", B: ");
Serial.println(blue);
}