/*************************************************************
* ESP32 + Blynk
* V0 -> OUVERTURE (GPIO2)
* V1 -> FERMETURE (GPIO15)
*************************************************************/
#define BLYNK_TEMPLATE_ID "TMPL2t2FmvBPm"
#define BLYNK_TEMPLATE_NAME "Esp32 Led"
#define BLYNK_AUTH_TOKEN "pGQ9VbTr6ONHyLlvmIV4arOEOauEEqwc"
#include <WiFi.h>
#include <BlynkSimpleEsp32.h>
// Wi-Fi
char ssid[] = "Wokwi-GUEST";
char pass[] = "";
// Broches
#define OUVERTURE_PIN 2
#define FERMETURE_PIN 15
// variables globales qui vont recueillir les états des boutons virtuels
int etatV0 = 0;
int etatV1 = 0;
static unsigned long momentDeconnexion = 0; // Déclaration et initialisation de la variable qui va contenir le durée de déconnexion
BlynkTimer timer;
// =====================================================
// Bouton V0 → OUVERTURE
// =====================================================
BLYNK_WRITE(V0)
{
etatV0 = param.asInt();
digitalWrite(OUVERTURE_PIN, LOW);
// Renvoyer l'état réel de l'ouverture vers une led dans l'interface de commande
Blynk.virtualWrite(V2, etatV0);
}
// =====================================================
// Bouton V1 → FERMETURE
// =====================================================
BLYNK_WRITE(V1)
{
etatV1 = param.asInt();
digitalWrite(FERMETURE_PIN, LOW);
// Renvoyer l'état réel de la fermeture vers une led dans l'interface de commande
Blynk.virtualWrite(V3, etatV1);
}
// fonction qui va gérer les états de sorties des PIN GPIO 2 (LED1_PIN) et GPIO 15 (LED2_PIN)
void GestionDesSorties () {
if (etatV0 == 0 && etatV1 == 0) {
digitalWrite(OUVERTURE_PIN, LOW);
digitalWrite(FERMETURE_PIN, LOW);
}
if (etatV0 == 1 && etatV1 == 1) {
digitalWrite(OUVERTURE_PIN, LOW);
digitalWrite(FERMETURE_PIN, LOW);
}
if (etatV0 == 1 && etatV1 == 0) {
digitalWrite(OUVERTURE_PIN, HIGH);
digitalWrite(FERMETURE_PIN, LOW);
}
if (etatV0 == 0 && etatV1 == 1) {
digitalWrite(OUVERTURE_PIN, LOW);
digitalWrite(FERMETURE_PIN, HIGH);
}
}
// =====================================================
// Synchronisation lors de la connexion
// =====================================================
BLYNK_CONNECTED()
{
Serial.println("Connecté à Blynk");
Blynk.syncVirtual(V0);
Blynk.syncVirtual(V1);
}
// création d'une fonction qui gerera le redémarrage automatique de l'ESP32 en cas de perte de connexion
void RedemarrageESP32 () {
if (momentDeconnexion == 0) {
momentDeconnexion = millis(); //Début de la déconnexion, le chronomètre est lancé
}
if ((millis() - momentDeconnexion) > 120000) {
ESP.restart(); // rédemarrage apès 2 minutes
}
}
// =====================================================
// Vérification de la connexion
// =====================================================
void checkConnection()
{
if (WiFi.status() != WL_CONNECTED)
{
Serial.println("Wi-Fi déconnecté");
// mettre les deux sorties en mode sécurité
digitalWrite(OUVERTURE_PIN,LOW);
digitalWrite(FERMETURE_PIN,LOW);
RedemarrageESP32();
}
else {
momentDeconnexion = 0; //Réinitialisation si la connexion s'est rétablie
}
if (!Blynk.connected())
{
Serial.println("Blynk déconnecté");
// mettre les deux sorties en mode sécurité
digitalWrite(OUVERTURE_PIN,LOW);
digitalWrite(FERMETURE_PIN,LOW);
RedemarrageESP32();
}
else {
momentDeconnexion = 0; //Réinitialisation si la connexion s'est rétablie
}
}
// =====================================================
// Setup
// =====================================================
void setup()
{
Serial.begin(115200);
pinMode(OUVERTURE_PIN, OUTPUT);
pinMode(FERMETURE_PIN, OUTPUT);
digitalWrite(OUVERTURE_PIN, LOW);
digitalWrite(FERMETURE_PIN, LOW);
Serial.println("Connexion à Blynk...");
Blynk.begin(BLYNK_AUTH_TOKEN, ssid, pass);
timer.setInterval(100L, checkConnection);
Serial.println("Système prêt");
}
// =====================================================
// Loop
// =====================================================
void loop()
{
Blynk.run();
timer.run();
GestionDesSorties ();
}