// Inclure les bibliothèques nécessaires
#include <DHT.h>
#include <LiquidCrystal_I2C.h>
#include <HTTPClient.h>
#include <Adafruit_NeoPixel.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
// Définir les constantes et les broches
#define DHTPIN 13
#define DHTTYPE DHT22
#define LED_COUNT 1
#define LED_PIN_R 12
#define LED_PIN_G 27
#define LED_PIN_B 14
const char* ssid = "Wokwi-GUEST";
const char* password = "";
const int proxyPort = 3000;
const char* serverAddress = "host.wokwi.internal";
// Initialiser les objets
DHT dht(DHTPIN, DHTTYPE);
LiquidCrystal_I2C lcd(0x27, 20, 4);
Adafruit_NeoPixel strip(LED_COUNT, LED_PIN_R, NEO_GRB + NEO_KHZ800);
WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org", 0);
// Déclarer les variables globales
unsigned long previousMillis = 0;
const long interval = 1000;
bool climActif = false;
bool deshumidActif = false;
void afficherMesures(float Temperature, float Humidite) {
if (isnan(Humidite) || isnan(Temperature)) {
Serial.println("Echec de lecture du capteur DHT");
return;
}
lcd.setCursor(0,0);
lcd.print(F("Temp :"));
lcd.print(Temperature);
lcd.print(" C");
lcd.setCursor(0,1);
lcd.print(F("Hum :"));
lcd.print(Humidite);
lcd.print(" %");
}
void gererLEDs(float Temperature, float Humidite) {
if (Temperature > 25 || Humidite > 60) {
// Activer la LED pour indiquer que la climatisation ou le déshumidificateur est actif
digitalWrite(LED_PIN_R, HIGH); // Allumer la LED rouge
} else {
// Désactiver la LED pour indiquer que la climatisation et le déshumidificateur sont inactifs
digitalWrite(LED_PIN_R, LOW); // Éteindre la LED rouge
}
climActif = (Temperature > 25);
deshumidActif = (Humidite > 60);
lcd.setCursor(0, 2);
lcd.print(climActif ? "Clim: Actif" : "Clim: HS");
lcd.setCursor(0, 3);
lcd.print(deshumidActif ? "D.humid: Actif" : "D.humid: HS");
}
void envoyerDonnees(float temperature, float humidity, bool climActif, bool deshumidActif) {
if (WiFi.status() == WL_CONNECTED && checkServerConnection()) {
sendToServer(temperature, humidity, climActif, deshumidActif);
}
}
bool checkServerConnection() {
WiFiClient client;
return client.connect(serverAddress, 3000);
}
void sendToServer(float temperature, float humidity, bool climActif, bool deshumidActif) {
HTTPClient http;
// Données à envoyer
String dataToSend = "temperature=" + String(temperature) + "&humidity=" + String(humidity) + "&climActif=" + String(climActif) + "&deshumidActif=" + String(deshumidActif);
// Connexion au serveur
http.begin(serverAddress, 3000); // Spécifiez le port 3000 pour HTTPS
http.addHeader("Content-Type", "application/x-www-form-urlencoded");
// Envoi de la requête POST
int httpResponseCode = http.POST(dataToSend);
if (httpResponseCode > 0) {
Serial.print("HTTP Response code: ");
Serial.println(httpResponseCode);
} else {
Serial.println("Error on sending POST request");
}
http.end();
}
void setup() {
// put your setup code here, to run once:
Serial.begin(115200);
WiFi.begin(ssid, password);
timeClient.begin();
dht.begin();
strip.begin();
strip.show(); // Initialisez toutes les LED avec la couleur 0 (éteintes)
pinMode(LED_PIN_R, OUTPUT);
pinMode(LED_PIN_G, OUTPUT);
pinMode(LED_PIN_B, OUTPUT);
lcd.init();
lcd.backlight();
lcd.setCursor(4,0);
lcd.println("Connexion");
lcd.setCursor(4,1);
lcd.println("au WiFi");
lcd.clear();
}
void loop() {
// Gérer le temps
timeClient.update();
lcd.setCursor(0, 0);
lcd.print("Heure: ");
lcd.print(timeClient.getHours());
lcd.print(":");
lcd.print(timeClient.getMinutes());
lcd.print(":");
lcd.print(timeClient.getSeconds());
lcd.setCursor(0, 1);
lcd.print(timeClient.getFormattedTime());
lcd.setCursor(0, 2);
lcd.print("0");
lcd.setCursor(0, 3);
lcd.print("0");
delay(1000);
lcd.clear();
// Mesurer les capteurs
unsigned long currentMillis = millis();
if (currentMillis - previousMillis >= interval) {
previousMillis = currentMillis;
float Humidite = dht.readHumidity();
float Temperature = dht.readTemperature();
afficherMesures(Temperature, Humidite);
gererLEDs(Temperature, Humidite);
envoyerDonnees(Temperature, Humidite , climActif, deshumidActif);
}
}