lundi 1 octobre 2018

Horloge Wi-Fi (ESP8266 ou ESP32)

N.B.: Cet article a été mis à jour le 28 juillet 2019 (ajout d'informations sur l'ESP32).

Le projet d'aujourd'hui consiste à utiliser un module ESP8266 ou ESP32 afin d'obtenir l'heure et la date d'un serveur NTP (Network Time Protocol). De cette façon, nous obtiendrons une horloge qui vérifiera périodiquement, par Wi-Fi,  que l'heure qu'elle affiche est en accord avec l'heure officielle. Cette fonctionnalité peut également s'avérer utile pour toute autre application pour laquelle votre ESP8266 aurait besoin de connaître l'heure ou la date: data logging, tâches qui doivent être effectuées automatiquement à un moment particulier, etc.

Sketch 1: affichage de l'heure et de la date sur le moniteur série

Le sketch ci-dessous constitue un bon point de départ pour explorer l'utilisation d'un serveur NTP, puisque vous pouvez en faire l'essai sans qu'il soit nécessaire de brancher quoi que ce soit à votre module ESP8266 ou ESP32. Le module communique avec un serveur NTP afin de connaître la date et l'heure. Chaque seconde, la date et l'heure sont affichées dans le moniteur série de l'IDE Arduino.  Toutes les 5 minutes, le serveur NTP est interrogé pour s'assurer que l'heure affichée est correcte (remarquez que, pour la plupart des applications, il n'est probablement pas utile d'interroger le serveur aussi souvent).

Le sketch ne nécessite l'installation d'aucune bibliothèque, mises à part celles qui sont déjà installées par défaut pour la programmation de l'ESP.

Le fuseau horaire est pris en compte grâce à la constante "decalage": une valeur de -4 convient au fuseau horaire de l'est de l'Amérique du Nord (c'est là que j'habite) mais si vous habitez ailleurs, il faudra certainement modifier sa valeur (je crois que 2 serait la valeur appropriée pour la France).

Même remarque concernant l'adresse choisie pour le serveur NTP. J'ai utilisé une adresse permettant d'interroger des serveurs canadiens (ca.pool.ntp.org), mais vous préférerez peut-être faire appel à un serveur situé plus près de chez vous, comme europe.pool.ntp.org ou africa.pool.ntp.org .






Sketch 2: affichage de l'heure et de la date sur un afficheur TM1638

Dans cette deuxième version, l'heure est affichée sur un afficheur à base de TM1638. Pendant que le bouton S1 est enfoncé, l'heure est remplacée par la date.




Ce sketch nécessite l'installation de la bibliothèque ErriezTM1638, et le module afficheur LED and KEY a été branché de la même façon que dans mon billet ESP8266 / ESP32 et afficheur à base de TM1638:
  • La broche VCC du module TM1638 est branchée à 3,3 V.
  • Les la broche GND du module TM1638 est branchée à GND.
  • La broche STB du TM1638 est branchée à la broche GPIO 4 de l'ESP8266 ou de l'ESP32
  • La broche CLK du TM1638 est branchée à la broche GPIO 16 de l'ESP8266 ou de l'ESP32
  • La broche DIO du TM1638 est branchée à la broche GPIO 5 de l'EP8266 ou de l'ESP32




-


Yves Pelletier   (TwitterFacebook)

6 commentaires:

  1. Bonjour,
    Merci pour votre partage et pour sa clarté.
    Si j'ai bien compris, le changement d'heure hiver/été en Europe n'est pas pris en compte ?
    Bonne continuation.

    RépondreSupprimer
  2. Bonjour et merci,
    mais pourquoi : while (time(nullptr) <= 100000)

    RépondreSupprimer
  3. testé avec un nodemcu v3 (esp8266), il a fallut changer les gpio et j'ai retiré le défilement de seconde (énervent!) mais sinon c'est nickel, merci

    RépondreSupprimer
  4. J'ai rajouté un contraste automatique (moins fort le soir que la journée) et un capteur de température et humidité (dht22), voila le code: http://domochris.canalblog.com/archives/2021/01/11/38753401.html

    RépondreSupprimer
    Réponses
    1. Bonjour,
      J'ai refait une modification, rajout d'un 3éme bouton pour le changement d'heure hiver / été et puis j'ai trouvé une commande pour que ce changement soit automatique en fonction du time zone; time zone a récupérer ici : https://sites.google.com/a/usapiens.com/opnode/time-zones
      et ligne a modifier en fonction du time zone configTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", "fr.pool.ntp.org");

      Supprimer