#include <WiFi.h>
#include <PubSubClient.h>
// WIFI
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// MQTT
const char* mqtt_server = "broker.hivemq.com";
WiFiClient espClient;
PubSubClient client(espClient);
// Broches LED & capteurs
const int red1 = 15, green1 = 26, blue1 = 27, pir1 = 32;
const int red2 = 14, green2 = 12, blue2 = 13, pir2 = 33;
const int red3 = 18, green3 = 19, blue3 = 21, pir3 = 25;
const int ldrPin = 34;
void setup_wifi() {
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("\nWiFi connecté !");
}
void reconnect() {
while (!client.connected()) {
Serial.print("Connexion MQTT...");
if (client.connect("ESP32Client")) {
Serial.println("connecté !");
client.subscribe("test/topic"); // tu peux changer le topic
} else {
Serial.print("Échec, rc=");
Serial.print(client.state());
Serial.println(" nouvelle tentative dans 5 sec");
delay(500);
}
}
}
void setup() {
Serial.begin(115200);
pinMode(red1, OUTPUT); pinMode(green1, OUTPUT); pinMode(blue1, OUTPUT); pinMode(pir1, INPUT);
pinMode(red2, OUTPUT); pinMode(green2, OUTPUT); pinMode(blue2, OUTPUT); pinMode(pir2, INPUT);
pinMode(red3, OUTPUT); pinMode(green3, OUTPUT); pinMode(blue3, OUTPUT); pinMode(pir3, INPUT);
setup_wifi();
client.setServer(mqtt_server, 1883);
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop(); // Important : ne bloque pas
int motion1 = digitalRead(pir1);
int motion2 = digitalRead(pir2);
int motion3 = digitalRead(pir3);
int ldrValue = analogRead(ldrPin);
Serial.println("LDR: " + String(ldrValue));
int seuilRouge = 3000;
int seuilVert = 1000;
if (motion1 == HIGH) {
afficherCouleurSelonLDR(ldrValue, red1, green1, blue1, seuilRouge, seuilVert);
} else {
eteindreLED(red1, green1, blue1);
}
if (motion2 == HIGH) {
afficherCouleurSelonLDR(ldrValue, red2, green2, blue2, seuilRouge, seuilVert);
} else {
eteindreLED(red2, green2, blue2);
}
if (motion3 == HIGH) {
afficherCouleurSelonLDR(ldrValue, red3, green3, blue3, seuilRouge, seuilVert);
} else {
eteindreLED(red3, green3, blue3);
}
delay(500); // petit délai mais pas trop
}
void afficherCouleurSelonLDR(int ldr, int r, int g, int b, int seuilRouge, int seuilVert) {
if (ldr > seuilRouge) {
setColor(r, g, b, "red");
} else if (ldr > seuilVert) {
setColor(r, g, b, "green");
} else {
setColor(r, g, b, "blue");
}
}
void setColor(int r, int g, int b, String color) {
digitalWrite(r, color == "red" ? HIGH : LOW);
digitalWrite(g, color == "green" ? HIGH : LOW);
digitalWrite(b, color == "blue" ? HIGH : LOW);
}
void eteindreLED(int r, int g, int b) {
digitalWrite(r, LOW);
digitalWrite(g, LOW);
digitalWrite(b, LOW);
}