Bien sûr, voici le code avec les modifications demandées :
```c++
#include <ESP8266WiFi.h>
#include <BlynkSimpleEsp8266.h>
#include <SimpleTimer.h>
#include <SMTPClient.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";
// Variables pour les adresses emails
char emailToSend[] = "tshinyingilouis99@[Link]";
char emailCC[] = "louistshinyingi9@[Link]";
// Configuration Blynk
char auth[] = "n9pNRAQ0hRfpIiMHS05IAt3XfR6X_8Ya";
char template_id[] = "TMPL2GXLEuxuI";
char template_name[] = "TFC";
// Objet pour l'envoi d'email
SMTPClient smtp("[Link]", 587, "tshinyingilouis99@[Link]", "1005ltmw@1999");
// Timer pour les mesures
SimpleTimer 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) * ([Link]() / 1000 / 3600);
return energieConsommee;
// Fonction pour envoyer un email
void envoyerEmail(char* emailTo, char* emailCc, char* subject, char* message) {
[Link]("tshinyingilouis99@[Link]", emailTo, emailCc, subject, message);
// 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);
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
[Link](1000, actualiserMesures);
void loop() {
// Exécute les tâches du timer
[Link]();
// Vérifie la tension
if (tension < 100) {
char subject[] = "Alerte : Tension trop faible";
char message[] = "La tension est inférieure à 100V";
envoyerEmail(emailToSend, "", subject, message);
} else if (tension > 250) {
char subject[] = "Alerte : Tension trop élevée";
char message[] = "La tension est supérieure à 250V. Activation du relais R1.";
envoyerEmail(emailToSend, emailCC, subject, message);
// Mettre ici le code pour activer le relais R1
// Mettre à jour le total d'énergie consommée
totalKWh = energieConsommee / 1000;
// Vérifie si l'objectif de 2 kWh est atteint
if (totalKWh >= 2) {
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]();
```
Veuillez noter que le code pour activer le relais R1 et arrêter le système automatiquement est
marqué avec des commentaires "Mettre ici le code pour..." Vous devrez y ajouter le code spécifique
pour votre configuration matérielle.
Assurez-vous également de remplacer le `template_id`, `template_name`, l'email et le mot de passe
de l'objet `SMTPClient` avec vos propres informations.