#include <ESP8266WiFi.
h>
#include <BlynkSimpleEsp8266.h>
// Pin pour le capteur de tension ZMPT100B
const int pinTension = A0;
// Pin pour le capteur de courant ACS712
const int pinCourant = D0;
// Variables pour les mesures
float tension;
float courant;
float puissanceActive;
float facteurPuissance;
float energieConsommee = 0;
float prixKWh = 0.069;
float totalKWh = 0;
// Variables pour la connexion WiFi
char ssid[] = "Itel S32";
char pass[] = "12345LTL";
// Configuration Blynk
char auth[] = "n9pNRAQ0hRfpIiMHS05IAt3XfR6X_8Ya";
// Objet pour le timer
Ticker timer;
// Fonction pour lire la tension
float lireTension() {
int tensionBrute = analogRead(pinTension);
float tension = map(tensionBrute, 0, 1023, 0, 250);
return tension;
// Fonction pour lire le courant
float lireCourant() {
int courantBrute = analogRead(pinCourant);
float courant = map(courantBrute, 0, 1023, -30, 30);
return courant;
// Fonction pour calculer la puissance active
float calculerPuissanceActive() {
float puissanceActive = tension * courant;
return puissanceActive;
// Fonction pour calculer l'énergie consommée
float calculerEnergieConsommee() {
energieConsommee += (puissanceActive / 1000) * (1000 / 3600); // intervalle de temps fixe à 1
seconde
return energieConsommee;
}
// Fonction pour mettre à jour les mesures et l'interface Blynk
void actualiserMesures() {
tension = lireTension();
courant = lireCourant();
puissanceActive = calculerPuissanceActive();
facteurPuissance = cos(puissanceActive / (tension * courant));
[Link](V0, tension);
[Link](V1, courant);
[Link](V2, puissanceActive);
[Link](V3, energieConsommee);
[Link](V4, facteurPuissance);
// Fonction pour commander le relais
BLYNK_WRITE(V5) {
int valeurRelais = [Link]();
if(valeurRelais == 1) {
// Mettre ici le code pour activer le relais
} else {
// Mettre ici le code pour désactiver le relais
void setup() {
// Initialize la carte ESP8266
[Link](115200);
[Link](ssid, pass);
while ([Link]() != WL_CONNECTED) {
delay(1000);
[Link](auth, ssid, pass, IPAddress(192, 168, 1, 100), 8080);
// Configure le timer pour les mesures avec une interruption toutes les 1 seconde
[Link](1, actualiserMesures);
void loop() {
// Mettre à jour le total d'énergie consommée
totalKWh = energieConsommee / 1000;
// Vérifie si l'objectif de 2 kWh est atteint
if (totalKWh >= 2) {
[Link](V5, 0);
char subject[] = "Alerte : Objectif atteint";
char message[] = "L'objectif de 2 kWh est atteint. Arrêt du système automatique.";
// envoyerEmail(emailToSend, subject, message);
// Mettre ici le code pour arrêter le système automatiquement
[Link]();
}
// Fonction pour commander le relais
BLYNK_WRITE(V5) {
int valeurRelais = [Link]();
if(valeurRelais == 1) {
digitalWrite(RELAIS_PIN, HIGH); // Activer le relais
} else {
digitalWrite(RELAIS_PIN, LOW); // Désactiver le relais
void stopSystem() {
// Mettre ici le code pour arrêter le système automatiquement
void loop() {
// Mettre à jour le total d’énergie consommée
totalKWh = energieConsommee / 1000;
// Vérifie si l’objectif de 2 kWh est atteint
if (totalKWh >= 2) {
[Link](V5, 0);
char subject[] = “Alerte : Objectif atteint”;
char message[] = “L’objectif de 2 kWh est atteint. Arrêt du système automatique.”;
// envoyerEmail(emailToSend, subject, message);
stopSystem();
[Link]();