#include <Wire.h>
#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <esp_sntp.h> // Permet le contrôle de la synchro avec un serveur NTP
//#define NTP_SERVER "pool.ntp.org"
//#define UTC_OFFSET 0
//#define UTC_OFFSET_DST 0
const char* ntpServer = "fr.pool.ntp.org"; // Adresse du serveur NTP
time_t moment; // utilisé pour stocker la date et l'heure au format unix
struct tm loc; // Structure qui contient les informations de l'heure et de la date
const String baseUrl = "https://particulier.edf.fr/services/rest/referentiel/searchTempoStore?dateRelevant=";
const int ledBleu = 2; // Broche de la LED jour BLEU
const int ledBlanc = 4; // Broche de la LED jour BLANC
const int ledRouge = 5; // Broche de la LED jour ROUGE
const int ledHP = 18; // Broche de la LED HP Rouge
const int ledHC = 19; // Broche de la LED HC Jaune
const int swtAbo = 21; // Switch EJP / Tempo
//const delaiBoucle = 60000; // Boucle globale d'1 minute
HTTPClient http;
/*
void printLocalTime() {
boolean HP;
int Heure;
//struct tm timeinfo;
moment = time(NULL); // Mise de la date et de l'heure au format unix dans la variable "moment" de type time_m
timeinfo = *(localtime(&moment)); // Mise dans la structure loc des éléments de date et de l'heure
if (!getLocalTime(&timeinfo)) {
Serial.println("Connection Err");
return;
}
Serial.println(&timeinfo, "%H%M");
if ( timeinfo.tm_hour >= 6 && timeinfo.tm_hour < 22)
{
HP = true;
Heure = int(%timefinfo.tm_hour + %timeinfo.tm_min);
} else
{
HP = false;
}
//Heure = &timefinfo->tm_hour + &timeinfo->tm_min;
//return Heure;
}
*/
void setup() {
pinMode(ledBleu, OUTPUT);
pinMode(ledBlanc, OUTPUT);
pinMode(ledRouge, OUTPUT);
pinMode(ledHC, OUTPUT);
pinMode(ledHP, OUTPUT);
Serial.begin(115200);
delay(2000);
connect_WiFi(); // Initialisation de la connexion wifi
}
void connect_WiFi()
{
const char* ssid = "Wokwi-GUEST";
const char* mdp = "";
const int TimeOut_connexion = 40; // Time-out connexion après 40 essais
int timeOut_counter = 0; // Compteur de nombre d'essais de connexion au Wifi
sntp_sync_status_t syncStatus; // Renvoie le statut de synchro au serveur SNTP, nécessite la librairie "esp_sntp.h"
Serial.println("Connection au WiFi");
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, mdp);
while (WiFi.status() != WL_CONNECTED)
{
delay(250);
Serial.write('.');
++timeOut_counter; // redémarrage de l'ESP si pas de connexion pendant 10 sec
if (timeOut_counter > TimeOut_connexion) ESP.restart();
}
Serial.print("\nConnecté au WiFi avec l'adresse IP ");
Serial.println(WiFi.localIP());
delay(1000);
// Prise en compte automatique du décalage horaire et des dates de début et de fin d'heure d'été par rapport au temps UTC
// Fonction intégrée à la librairie "time.h"
configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", ntpServer);
// Vérification de la synchronisation effective de l'heure au démarrage
timeOut_counter = 0;
Serial.println("\nSynchronisation de l'heure en cours ");
while (syncStatus != SNTP_SYNC_STATUS_COMPLETED)
{
syncStatus = sntp_get_sync_status();
delay(250);
Serial.write('.');
++timeOut_counter; // redémarrage de l'ESP si pas de connexion pendant 10 sec
if (timeOut_counter > TimeOut_connexion) ESP.restart();
}
Serial.println("\nSynchronisation de l'heure OK !\n");
moment = time(NULL);
loc = *(localtime(&moment));
//Serial.println(String(loc.tm_year+1900)+"-"+String(loc.tm_mon+1)+"-"+String(loc.tm_mday));
Serial.printf("Date et heure actuelles : %02d/%02d/%04d %02d:%02d:%02d\n", loc.tm_mday, loc.tm_mon+1, loc.tm_year+1900, loc.tm_hour, loc.tm_min, loc.tm_sec);
delay(1000);
}
void loop() {
int counter = 0;
int Heure;
String url;
String date;
String JourJ;
String JourJ1;
if (WiFi.status() == WL_CONNECTED) {
Serial.println("Récupération des données actualisées...");
//Heure = printLocalTime();
//Serial.println(Heure);
date = String(loc.tm_year+1900)+"-"+String(loc.tm_mon+1)+"-"+String(loc.tm_mday);
url = baseUrl + date;
Heure = int(loc.tm_hour);
Serial.println(url);
//Serial.println(Heure);
http.begin(url);
int httpCode = http.GET();
Serial.print("HTTP Code: ");
Serial.println(httpCode);
Serial.println(HTTP_CODE_OK);
if (httpCode == HTTP_CODE_OK)
if (httpCode == 200)
{
StaticJsonDocument<100> doc;
deserializeJson(doc, (http.getString()));
JourJ = doc["couleurJourJ"].as<String>();
JourJ1 = doc["couleurJourJ1"].as<String>();
Serial.print("JourJ:");
Serial.println(JourJ);
//Serial.print("JourJ1:");
//Serial.println(JourJ1);
//Serial.print("heure: ");
//Serial.println(Heure);
/* // pour debug
//JourJ = "TEMPO_ROUGE";
Heure = 8;
Serial.print("heure forcée: ");
Serial.println(Heure);
*/
if (Heure >= 6 && Heure < 22)
{
Serial.print("Heure HP: ");
Serial.println(Heure);
digitalWrite(ledHP, HIGH);
digitalWrite(ledHC, LOW);
} else
{
Serial.print("Heure HC: ");
Serial.println(Heure);
digitalWrite(ledHP, LOW);
digitalWrite(ledHC, HIGH);
}
if (JourJ == "TEMPO_BLEU")
{
Serial.print("BLEU Jour J : ");
Serial.println(JourJ);
//Serial.print("Jour J1 : ");
//Serial.println(JourJ1);
digitalWrite(ledBleu, HIGH);
digitalWrite(ledBlanc, LOW);
digitalWrite(ledRouge, LOW);
} else if (JourJ == "TEMPO_BLANC")
{
Serial.print("BLANC Jour J : ");
Serial.println(JourJ);
//Serial.print("Jour J1 : ");
//Serial.println(JourJ1);
digitalWrite(ledBleu, LOW);
digitalWrite(ledBlanc, HIGH);
digitalWrite(ledRouge, LOW);
} else if (JourJ == "TEMPO_ROUGE")
{
Serial.print("ROUGE Jour J : ");
Serial.println(JourJ);
//Serial.print("Jour J1 : ");
//Serial.println(JourJ1);
digitalWrite(ledBleu, LOW);
digitalWrite(ledBlanc, LOW);
digitalWrite(ledRouge, HIGH);
} else
{
int ledUp = 0;
while (counter < 10) // Clignote pendant 10 secondes
{
if (ledUp == 0)
{
digitalWrite(ledBlanc, HIGH);
ledUp = 1;
} else
{
digitalWrite(ledBlanc, LOW);
ledUp = 0;
}
delay(1000);
Serial.println("Couleur Tempo Inconnu.");
++counter;
}
}
}
http.end();
} else
{
ESP.restart(); // Si perte de connexion au Wifi durant le fonctionnement, reboot de l'ESP.
}
Serial.println("---------------------------");
delay(60000);
}