#include <Wire.h>
#include <RTClib.h>
#include <WiFi.h>
#include <PubSubClient.h>
#include <DHT.h>
#include <ArduinoJson.h>
// Configuration du capteur DHT22
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
// Configuration RTC
RTC_DS1307 rtc; // Utilisation de RTC_DS1307 pour le DS1307
// Configuration WiFi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// Configuration MQTT
const char* mqttServer = "broker.hivemq.com";
const int mqttPort = 1883;
const char* mqttTopic = "projet/capteurs";
WiFiClient espClient;
PubSubClient client(espClient);
void setup() {
Serial.begin(115200);
dht.begin();
// Initialisation de l'RTC
if (!rtc.begin()) {
Serial.println("Impossible de trouver un RTC DS1307");
while (1);
}
// Connexion au réseau WiFi
connectToWiFi();
// Configuration du client MQTT
client.setServer(mqttServer, mqttPort);
}
void loop() {
if (!client.connected()) {
connectToMQTT();
}
client.loop();
// Lecture des données du capteur
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Erreur de lecture des données DHT");
return;
}
// Application d'un offset aléatoire
float offsetTemp = random(0, 24); // Valeur aléatoire entre 0 et 24
float offsetHum = random(0, 40); // Valeur aléatoire entre 0 et 40
temperature += offsetTemp;
humidity += offsetHum;
// Obtention de l'heure actuelle
DateTime now = rtc.now();
String timestamp = String(now.hour()) + "" + String(now.minute()) + "" + String(now.second());
// Création du message JSON
StaticJsonDocument<256> doc;
doc["temperature"] = temperature;
doc["humidity"] = humidity;
doc["timestamp"] = timestamp; // Ajouter l'heure actuelle
char payload[512];
serializeJson(doc, payload);
// Publication des données MQTT
client.publish(mqttTopic, payload);
// Affichage des données au format CSV
Serial.print(temperature);
Serial.print(",");
Serial.print(humidity);
Serial.print(",");
Serial.println(timestamp);
delay(10000); // Envoi de données toutes les 10 secondes
}
void connectToWiFi() {
Serial.print("Connexion au WiFi...");
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.print(".");
}
Serial.println(" connecté");
}
void connectToMQTT() {
while (!client.connected()) {
Serial.print("Connexion au serveur MQTT...");
if (client.connect("ESP32Client")) {
Serial.println("connecté");
client.subscribe(mqttTopic);
} else {
Serial.print("échec, rc=");
Serial.print(client.state());
Serial.println(" nouvelle tentative dans 5 secondes");
delay(5000);
}
}
}