#include <WiFi.h>
#include <PubSubClient.h>
#include <Adafruit_Sensor.h>
#include <ArduinoJson.h>
#include <DHT.h>
#include <HTTPClient.h>
#define DHTPIN 19 // Broche de données du capteur DHT22
#define DHTTYPE DHT22 // Type de capteur DHT22
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const char* mqttServer = "http://api.beebotte.com/v1/data/read/projet/leds?limit=3";
const int mqttPort = 1883;
const char* mqttTopic = "projet/leds";
DHT dht(DHTPIN, DHTTYPE);
WiFiClient wifiClient;
PubSubClient mqttClient(mqttServer, mqttPort, wifiClient);
void callback(char* topic, byte* payload, unsigned int length) {
StaticJsonDocument<200> doc;
deserializeJson(doc, payload, length);
boolean etat = doc["data"];
digitalWrite(23, etat);
digitalWrite(22, etat);
digitalWrite(21, etat);
}
void setup() {
Serial.begin(115200);
pinMode(23, OUTPUT); // LED rouge
pinMode(22, OUTPUT); // LED verte
pinMode(21, OUTPUT); // LED orange
dht.begin();
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
Serial.println("Connected to WiFi");
mqttClient.setCallback(callback);
if (mqttClient.connect("ESP32Client")) {
mqttClient.subscribe(mqttTopic);
Serial.println("Connected to MQTT server");
} else {
Serial.println("Failed to connect to MQTT server");
}
}
void loop() {
HTTPClient http;
http.begin(mqttServer);
http.addHeader("Content-Type", "application/json");
http.addHeader("X-Auth-Token", "token_Py10HzPLGQ7Z1Y8s");
int httpCode = http.GET();
if (httpCode > 0) {
String payload = http.getString();
DynamicJsonDocument doc(1024);
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.println("Failed to parse JSON");
} else {
boolean etat = doc[0]["data"];
digitalWrite(23, etat);
digitalWrite(22, etat);
digitalWrite(21, etat);
}
} else {
Serial.println("Failed to connect to the server");
}
http.end();
delay(1000);
mqttClient.loop();
float temperature = dht.readTemperature();
float humidity = dht.readHumidity();
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.print(" °C, Humidity: ");
Serial.print(humidity);
Serial.println(" %");
if (temperature > 30) {
digitalWrite(23, HIGH);
Serial.println("Seuil de température dépassé");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" °C");
} else {
digitalWrite(23, LOW);
}
if (humidity > 40) {
digitalWrite(22, HIGH);
Serial.println("Seuil d'humidité dépassé");
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.println(" %");
} else {
digitalWrite(22, LOW);
}
delay(1000);
}