/*
*****************************************************************************
*
* Tempo EDF ESP32 LED version 2024
*
*****************************************************************************
Il vous faut : 6 led pour le projet (2 bleu, 2 blanches, 2 rouges),
2 résistances de 220 ohms,
1 ESP32 S1,
1 breadboard,
des fils de connexion.
Change ton mot de passe wifi et ton ssid dans le code( ligne 34 et 35).
API : https://www.api-couleur-tempo.fr/api
Vous pouvez aussi passer par un écran LCD pour afficher la couleur du jour et de demain.
Deux leds RGB ca ferais aussi bien le job.
Merci de regarder ma petite chaine =)
* Web : https://www.makertronic-yt.com
* version : 2.0
* Copyright 2024
*/
// include des librairies
#include <Arduino.h>
#include <WiFi.h>
#include "time.h"
#include <HTTPClient.h>
#include <ArduinoJson.h>
// connexion wifi
const char* ssid = "Wokwi-GUEST";
const char* password = "";
// leds
const int ledJourBleu = 4;
const int ledJourBlanc = 16;
const int ledJourRouge = 17;
const int ledDemainBleu = 25;
const int ledDemainBlanc = 26;
const int ledDemainRouge = 27;
void setup(){
Serial.begin(9600);
delay(1000);
WiFi.mode(WIFI_STA); //Optional
WiFi.begin(ssid, password);
Serial.println("\nConnection Wifi ...");
while(WiFi.status() != WL_CONNECTED){
Serial.print(".");
delay(100);
}
Serial.println("\nConnecté au réseau Wifi !");
Serial.print("IP locale: ");
Serial.println(WiFi.localIP());
// leds en sortie
pinMode(ledJourBleu, OUTPUT);
pinMode(ledJourBlanc, OUTPUT);
pinMode(ledJourRouge, OUTPUT);
pinMode(ledDemainBleu, OUTPUT);
pinMode(ledDemainBlanc, OUTPUT);
pinMode(ledDemainRouge, OUTPUT);
}
void loop() {
// On coupe les leds avant de les allumer
digitalWrite(ledJourBleu, LOW);
digitalWrite(ledJourBlanc, LOW);
digitalWrite(ledJourRouge, LOW);
digitalWrite(ledDemainBleu, LOW);
digitalWrite(ledDemainBlanc, LOW);
digitalWrite(ledDemainRouge, LOW);
// URL JSON
String urlToDay = "https://www.api-couleur-tempo.fr/api/jourTempo/today";
//Serial.println(urlToDay); // debug url
String urlTomorrow = "https://www.api-couleur-tempo.fr/api/jourTempo/tomorrow";
//Serial.println(urlTomorrow); // debug url
// reponse :
//{
// "dateJour": "2024-09-03",
// "codeJour": 1,
// "periode": "2024-2025"
//}
// Effectuer la requête HTTP
HTTPClient http;
http.begin(urlToDay);
int httpCode = http.GET();
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
// Parse JSON avec ArduinoJSON
const size_t capacity = JSON_OBJECT_SIZE(3) + 100;
DynamicJsonDocument doc(capacity);
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}
// Extraire les valeurs
String date = doc["dateJour"];
Serial.print("Date du jour : ");
Serial.println(date);
int codeJour = doc["codeJour"];
// Afficher la couleur en fonction du code
//Code couleur du tarif Tempo applicable:
// - 0: tarif inconnu (pas encore communiqué par RTE)
// - 1: tarif bleu
// - 2: tarif blanc
// - 3: tarif rouge
String couleur;
switch(codeJour) {
case 0:
couleur = "INCONNU";
break;
case 1:
couleur = "BLEU";
digitalWrite(ledJourBleu, HIGH);
digitalWrite(ledJourBlanc, LOW);
digitalWrite(ledJourRouge, LOW);
break;
case 2:
couleur = "BLANC";
digitalWrite(ledJourBleu, LOW);
digitalWrite(ledJourBlanc, HIGH);
digitalWrite(ledJourRouge, LOW);
break;
case 3:
couleur = "ROUGE";
digitalWrite(ledJourBleu, LOW);
digitalWrite(ledJourBlanc, LOW);
digitalWrite(ledJourRouge, HIGH);
break;
default:
couleur = "INCONNU";
}
// Afficher le résultat debug
Serial.print("Couleur du jour : ");
Serial.println(couleur);
}
} else {
Serial.println("Erreur lors de la requête HTTP");
}
http.end(); // Libérer les ressources
http.begin(urlTomorrow);
int httpCodeDemain = http.GET();
if (httpCodeDemain > 0) {
if (httpCodeDemain == HTTP_CODE_OK) {
String payload = http.getString();
// Parse JSON avec ArduinoJSON
const size_t capacity = JSON_OBJECT_SIZE(3) + 100;
DynamicJsonDocument doc(capacity);
DeserializationError error = deserializeJson(doc, payload);
if (error) {
Serial.print("deserializeJson() failed: ");
Serial.println(error.c_str());
return;
}
// Extraire les valeurs
int codeJour = doc["codeJour"];
// Afficher la couleur en fonction du code
//Code couleur du tarif Tempo applicable:
// - 0: tarif inconnu (pas encore communiqué par RTE)
// - 1: tarif bleu
// - 2: tarif blanc
// - 3: tarif rouge
String couleur;
switch(codeJour) {
case 0:
couleur = "INCONNU";
break;
case 1:
couleur = "BLEU";
digitalWrite(ledDemainBleu, HIGH);
digitalWrite(ledDemainBlanc, LOW);
digitalWrite(ledDemainRouge, LOW);
break;
case 2:
couleur = "BLANC";
digitalWrite(ledDemainBleu, LOW);
digitalWrite(ledDemainBlanc, HIGH);
digitalWrite(ledDemainRouge, LOW);
break;
case 3:
couleur = "ROUGE";
digitalWrite(ledDemainBleu, LOW);
digitalWrite(ledDemainBlanc, LOW);
digitalWrite(ledDemainRouge, HIGH);
break;
default:
couleur = "INCONNU";
}
// Afficher le résultat debug
Serial.print("Couleur de demain : ");
Serial.println(couleur);
}
} else {
Serial.println("Erreur lors de la requête HTTP");
}
http.end(); // Libérer les ressources
delay(600000); // Attendre 5 minutes avant de recommencer
//delay(10000); // Attendre 10 secondes avant de recommencer (pour debug)
}
Aujourd'hui
Demain