Connexion automatique au Wifi pour synchro heure NTP sur ESP32

Bonjour !

J'ai créé un sketch pour afficher l'heure et les éphémérides sur un petit écran LCD.
Pour cela je me connecte au Wifi et à un serveur NTP durant le setup.
J'utilise pour ça la bibliothèque native "time.h" du ESP32, avec les possibilités de changement d'heure d'été et d'hiver automatiques associées, ainsi que la bibliothèque "esp_sntp.h" qui me permet de contrôler la synchronisation effective avec un serveur NTP.

Le code en relation avec tout ça (je ne mets que ce qui sert à la connexion) :

En début de sketch :

#include <WiFi.h>                                // Gestion de la connexion au WiFi
#include <esp_sntp.h>                            // Permet le contrôle de la synchro avec l'heure NTP

// ******** Valeurs pour l'horloge internet
const char* ntpServer = "pool.ntp.org";          // Serveur NTP
bool timeSync = false;                           // mis sur true quand synchro avec heure NTP OK (librairie "esp_sntp.h" nécessaire)

Dans le setup :

  const char* ssid = "xxxxxx";
  const char* mdp = "yyyyyy";
  const int TimeOut_connexion = 50;                 // Time-out connexion Wifi après 50 essais
  int timeOut_counter = 0;                          // Compteur de nombre d'essais de connexion au Wifi
  tft.loadFont(Gadugi_Smooth_24);
  tft.setTextDatum(TC_DATUM);
  tft.drawString("Connexion au réseau ",160,55);
  lgChain = ((tft.drawString(ssid,160,100)/2)+160); // Affichage du SSID et calcul de la position de la fin de la chaîne
  tft.setTextDatum(TL_DATUM);
  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, mdp);
  while (WiFi.status() != WL_CONNECTED)             // Boucle de vérification si la connexion est OK
   {
    delay(250);
    lgChain += tft.drawString(" .",lgChain,100);    // Affiche un point de plus après chaque itération à la suite du SSID
    ++timeOut_counter;                              // redémarrage de l'ESP si pas de connexion pendant 10 sec
    if (timeOut_counter > 40) ESP.restart();        // 40 x 250 ms = 10 s
   }
  delay(1000);
  tft.fillScreen(TFT_BLACK);
  tft.setTextColor(TFT_YELLOW, TFT_BLACK);
  tft.setTextDatum(TC_DATUM);
  tft.drawString("Connecté au réseau WiFi !",160,20);
  tft.drawString("Adresse IP: "+(WiFi.localIP().toString()),160,50);
  delay(1500);

  // Prise en compte du décalage horaire et des dates de début et de fin d'heure d'été par rapport au temps UTC
  // Fonction propre à la librairie "time.h" (CET = Central european time, CEST = Central European Summer Time)
  configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", ntpServer);
  
  // renvoie vers la fonction "void time_sync_notification()" quand la synchro de l'heure avec un serveur NTP est OK
  // Nécessite la librairie "esp_sntp.h"
  sntp_set_time_sync_notification_cb(time_sync_notification);

  // Vérification de la synchronisation effective de l'heure au démarrage  
  timeOut_counter = 0;
  tft.setTextColor(TFT_GREEN, TFT_BLACK);
  tft.drawString("Synchronisation de l'heure",160,100);    // Affiche un message avec la police définie pour la connexion WiFi
  lgChain = ((tft.drawString("en cours",160,130)/2)+160);  // Affichage message et calcul de la position de fin de la chaîne
  tft.setTextDatum(TL_DATUM);
  while (timeSync == false)                                // mis à "true" par la fonction time_sync_notification()
   { 
    delay(250); 
    lgChain += tft.drawString(" .",lgChain,130);           // Affiche un point de plus après chaque itération à la suite de "en cours"
    ++timeOut_counter;                                     // redémarrage de l'ESP si pas de connexion pendant 10 sec
    if (timeOut_counter > 40) ESP.restart();               // 40 x 250 ms = 10 s
   }
  tft.unloadFont();

Tout ça fonctionne sans le moindre problème (quel plaisir le passage automatique de l'heure d'été à l'heure d'hiver !), mais je me pose une question :
Mon sketch n'a besoin du WiFi que pour la synchro au serveur de temps.
Je crois que celle-ci se fait ensuite par défaut une fois par heure.
Alors je me pose la question suivante :
Si à la fin de ma connexion je mets un WiFi.disconnect(); (pour l'instant je reste connecté au WiFi tout le temps) que va-t-il se passer quand l'ESP32 voudra refaire une synchro avec le serveur de temps ?
Est-il assez "intelligent" pour se reconnecter au Wifi tout seul pour l'occasion et se déconnecter ensuite ?
Ou vu autrement si je me connecte au Wifi tous les xxx minutes ou heures, la synchro avec le serveur de temps se fera-t-elle automatiquement ?

Si quelqu'un avait une réponse à ces questions, grand merci !

Roland

Bonsoir @rollmops67

Quel bénéfice comptes-tu tirer d'une déconnection WiFi ? Economie d'énergie ?

Si tu déconnectes ta carte du réseau local Wifi il faudra explicitement la reconnecter avant d'espérer pouvoir interroger le serveur NTP

Bonsoir @al1fch
Oui il y a un peu de ça, l'économie de quelques mW ! :upside_down_face:
Et puis aussi la curiosité de savoir comment faire...
Et au final éviter que mon ESP essaie de se reconnecter en boucle au WiFi si mon serveur avait un problème.

Roland

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.