//Les bibliothéques nécessaires :
#include "WiFi.h"
#include <stdio.h>
#include <LiquidCrystal_I2C.h>
#include <DHT.h>;
#include "PubSubClient.h"
#include <Wire.h>
//Le serveur mqtt (implémenté sur Microsoft Azure) :
const char* mqtt_server = "20.123.219.209";
WiFiClient espClient;
PubSubClient client(espClient);
char clientId[50];
//Initialisation de LCD :
LiquidCrystal_I2C lcd(0x27, 16, 2);
//Initialisation du capteur DHT22 :
#define DHTPIN 15
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
void setup() {
//Setup de DHT22 et LCD et moniteur série :
Wire.begin(14,26);
lcd.init();
lcd.backlight();
Serial.begin(115200);
dht.begin();
//Etablir la connexion WIFI :
Serial.println("Début de simulation... ");
Serial.println("Initialisation WiFi...");
WiFi.mode(WIFI_STA);
Serial.println("Connexion WiFi en cours... ");
WiFi.begin("Wokwi-GUEST", "");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("Adresse IP Wifi : ");
String ip = WiFi.localIP().toString();
Serial.println(ip);
client.setServer(mqtt_server, 1883);
mqttReconnect();
}
//Vérifier la connexion MQTT :
void mqttReconnect()
{
while (!client.connected())
{
Serial.print("Etablir la connexion MQTT...");
if (client.connect(clientId))
{
Serial.println("Connectee \n");
client.subscribe("projet");
}
else
{
Serial.println("Connexion échouée, merci de réessayer dans 5 secondes");
delay(5000);
}
}
}
void loop() {
delay(2000);
//Lire la température à partir du capteur :
float T = dht.readTemperature();
//Si la température est sup à 35°c, on affiche sur l'ecran LCD et le moniteur serie
// sa valeur et l'état du climat et on les publie vers le client dans le topic "projet"
if(T >= 35.00){
lcd.setCursor(0, 0);
lcd.print("Temp : ");
lcd.print(T);
lcd.print(" °C \n");
lcd.setCursor(0, 1);
lcd.print("--Climat chaud--");
Serial.print("Temp: ");
Serial.print(T);
Serial.println(" °C --> Climat chaud\n");
client.publish("projet", "Temp(en degre Celsius) : ");
char temString[8];
dtostrf(T, 1, 2, temString);
client.publish("projet", temString);
client.publish("projet", " °C --> Climat chaud\n");
}
//Si la température est inf à 20°C, on affiche sur l'ecran LCD et le moniteur serie
// sa valeur et l'état du climat et on les publie vers le client dans le topic "projet"
else if(T <= 20.00){
lcd.setCursor(0, 0);
lcd.print("Temp : ");
lcd.print(T);
lcd.print(" °C \n");
lcd.setCursor(0, 1);
lcd.print("--Climat froid--");
Serial.print("Temp: ");
Serial.print(T);
Serial.println(" °C --> Climat froid\n");
client.publish("projet", "Temp(en degre Celsius) : ");
char temString[8];
dtostrf(T, 1, 2, temString);
client.publish("projet", temString);
client.publish("projet", " °C --> Climat froid\n");
}
//Si la température est entre 20°C et 35°C, on affiche sur l'ecran LCD et le moniteur serie
// sa valeur et l'état du climat et on les publie vers le client dans le topic "projet"
else{
lcd.setCursor(0, 0);
lcd.print("Temp : ");
lcd.print(T);
lcd.print(" °C \n");
lcd.setCursor(0, 1);
lcd.print("-Climat tempere-");
Serial.print("Temp: ");
Serial.print(T);
Serial.println(" °C --> Climat tempere\n");
client.publish("projet", "Temp(en degre Celsius) : ");
char temString[8];
dtostrf(T, 1, 2, temString);
client.publish("projet", temString);
client.publish("projet", "--> Climat tempere\n");
}
}