Lors de la création d'un projet IoT qui dépend de l'heure de la journée, vous souhaitez qu'il affiche l'heure correcte sans nécessiter d'ajustements manuels. Il semblerait que cela soit facile à accomplir avec l'ESP32 car il dispose d'une connexion sans fil intégrée et peut se connecter à Internet.
Cependant, bien qu'il existe de nombreux exemples en ligne qui montrent comment configurer l'ESP32 pour se connecter à Internet et synchroniser l'heure avec une heure serveur, la plupart d'entre eux vous obligent à vous ajuster manuellement à l'heure d'été deux fois par an, ce qui semble assez ridicule pour n'importe quel serveur électronique du 21e siècle. appareil.
Ici, nous vous présenterons une solution qui permettra à l'ESP32 d'afficher l'heure correcte, pour n'importe quel endroit dans le monde, toute l'année. Mais d'abord, regardons l'exemple SimpleTime dans l'IDE Arduino et voyons ce qu'il fait et comment nous pouvons l'améliorer.
L'exemple SimpleTime
Si vous utilisez l'IDE Arduino avec l'ESP32, vous constaterez qu'il a un exemple appelé SimpleTime ça ressemble à ça :
Vous pouvez accéder à cet exemple en configurant l'IDE Arduino pour utiliser une carte ESP32, à partir du Outils menu, par exemple en sélectionnant le Module de développement ESP32. Une fois cela fait, vous pouvez accéder à l'exemple SimpleTime à partir du Outils menu sous Exemples,ESP32,Temps, et Temps simple.
On pourrait s'attendre à ce que cet exemple officiel démontre la meilleure façon de faire les choses, mais il y a un énorme problème dans cet exemple. Pour configurer le fuseau horaire et l'heure d'été, vous devez modifier les deux lignes suivantes :
const long gmtOffset_sec = 3600 ;
const int daylightOffset_sec = 3600;
Réglage du fuseau horaire à l'aide de gmtOffset_sec n'est pas pratique car vous devez trouver le décalage GMT pour votre emplacement particulier. Vous pouvez le faire en consultant le Site Web sur l'heure moyenne de Greenwich. Heureusement, vous n'avez besoin de le faire qu'une seule fois. le daylightOffset_sec présente un problème plus important, car vous devez l'ajuster deux fois par an. Cela peut vous obliger à supprimer votre projet et à le connecter à l'IDE Arduino deux fois par an, ce qui le rend totalement inapproprié pour un projet IoT que vous souhaitez configurer et oublier.
À la recherche d'une meilleure approche
Alors, quelle serait la meilleure façon de configurer le fuseau horaire et l'heure d'été? Pour répondre à cette question, ne cherchez pas plus loin que la façon dont votre PC Windows gère la situation :
Remarquez comment au lieu d'avoir à lui donner des décalages horaires par rapport à GMT, nous disons à Windows quel est notre fuseau horaire et notre emplacement - dans notre cas Heure des Rocheuses (États-Unis et Canada)—puis cochez la case Ajustez automatiquement l'horloge à l'heure d'été. À partir de ce moment, Windows le gère automatiquement pour nous toute l'année. C'est le genre de commodité que nous attendons de notre ESP32.
En rapport: Comment personnaliser l'horloge de la barre d'état système sous Windows
Création d'une base de données de localisation pour l'ESP32
Faire la même chose sur l'ESP32 nécessite quelques démarches. nous avons commencé par un article de blog qui décrit comment configurer le fuseau horaire à l'aide de la variable d'environnement TZ. Pour notre emplacement, il s'est avéré que MST7MDT, M3.2.0,M11.1.0, selon ce tableau des fuseaux horaires. Bien que cela ait résolu le problème d'avoir à régler manuellement l'heure d'été, nous voulions le processus est plus simple, sans avoir besoin de rechercher une chaîne de chiffres et de lettres pour chaque emplacement.
Nous avons converti les données du site Web en une base de données que vous pouvez utiliser directement à partir de vos croquis Arduino. Suivre ce lien pour télécharger directement un fichier zip avec le sketch Arduino.
La base de données elle-même est stockée dans le fichier time_zone.h. En utilisant la base de données, le code de SimpleTime ressemble à ceci :
Nous avons mis en surbrillance les modifications apportées à l'exemple SimpleTime en jaune. Cette ligne permettra à l'esquisse d'utiliser la base de données :
#include "fuseaux_horaires.h"
Cette ligne configure votre emplacement :
const char* location = "Amérique/Denver" ;
Il y a 461 emplacements possibles. Vous pouvez trouver les emplacements disponibles en consultant le time_zone.h fichier, ou en regardant la liste des fuseaux horaires sur ce site.
Enfin, la ligne suivante indique à l'ESP32 de synchroniser l'heure avec un serveur Internet en utilisant le Network Time Protocol (NTP) :
configTimeWithTz (getTzByLocation (emplacement), ntpServer);
Le serveur de temps Internet particulier peut être configuré à l'aide de la ligne suivante, bien que la valeur par défaut devrait fonctionner correctement pour vous :
const char* ntpServer = "pool.ntp.org" ;
Vous voulez également vous assurer d'ajouter les informations de votre point d'accès sans fil sur les deux lignes suivantes :
const char* ssid = "VOTRE_SSID" ;
const char* password = "VOTRE_PASS" ;
Remplacer VOTRE_SSID avec le nom de votre réseau sans fil et VOTRE TICKET avec le mot de passe utilisé pour s'y connecter.
En rapport: Façons de configurer en toute sécurité un routeur sans fil en tant que point d'accès public
Finir
Une fois que vous avez terminé les étapes de configuration, téléchargez le croquis sur l'ESP32 et il utilisera l'heure correcte toute l'année sans aucune intervention !
Bien que ce code vous donne un bon point de départ, il existe des moyens plus conviviaux d'accomplir la même chose. Par exemple, vous pouvez autoriser l'utilisateur à tout configurer à partir d'une page Web plutôt que de le faire au moment de la compilation. Cela représente un peu plus de travail, car vous auriez besoin de faire les choses suivantes dans votre croquis Arduino :
- Configurez l'ESP32 en tant que point d'accès sans fil pour la configuration initiale
- Lancer un serveur Web pour présenter à l'utilisateur une page de configuration
- Créer un formulaire HTML pour permettre à l'utilisateur de saisir les informations du réseau sans fil et de sélectionner son emplacement
- Créer le code pour traiter les choix de l'utilisateur et le stocker en mémoire non volatile
- A la mise sous tension de la carte :
- Lire la configuration à partir de la mémoire non volatile
- Connectez-vous au réseau sans fil et synchronisez l'heure
Un projet qui illustre ces étapes est le Horloge Dali ESP32. C'est ce projet qui nous a amenés à trouver une meilleure façon de faire la synchronisation de l'heure sur l'ESP32.
Vérifiez code source pour l'horloge ESP32 Dali pour voir comment afficher une page de configuration Web complète. La page de configuration affiche un menu déroulant pour permettre à l'utilisateur de sélectionner son emplacement et son fuseau horaire et permet également à l'utilisateur de régler l'heure manuellement à l'aide d'un widget d'heure et de calendrier, pour un non-connecté alternative!
Synchronisation de l'heure du réseau basée sur la localisation sur l'ESP32
Vous avez maintenant toutes les informations dont vous avez besoin pour pouvoir régler automatiquement l'horloge de votre ESP32 à l'heure correcte, et également l'ajuster à l'heure d'été. C'est parfait pour les projets IoT que vous ne voulez pas avoir à ajuster manuellement.
Si vous cherchez des projets intéressants avec ESP32, vous êtes au bon endroit.
Lire la suite
- DIY
- ESP32
- Internet des objets
Je suis un maker avec un intérêt particulier pour les logiciels open-source, l'électronique, l'impression 3D, l'infographie et le rétro-informatique.
Abonnez-vous à notre newsletter
Rejoignez notre newsletter pour des conseils techniques, des critiques, des ebooks gratuits et des offres exclusives !
Cliquez ici pour vous abonner