ESP8266. Récupérer ...
 
Notifications
Retirer tout

ESP8266. Récupérer l'heure avec NTPClient, stockage SPIFFS, calculer le temps écoulé et déclencher un événement


fe36ca0d4d6bdcc500dbd432c3c08731?s=80&d=mm&r=g
Posts: 509
Admin
Début du sujet
(@christophe)
Membre
Inscription: Il y a 6 ans
wpf-cross-image

L'ESP8266 ne disposent pas d'horloge temps réel. Il est possible d'ajouter une horloge temps réelle via un module RTC (Real Time Clock). Pour des projets connectés au réseau WiFi et donc la plupart du temps à internet, il est beaucoup plus facile (et moins chère) de récupérer l'heure sur un serveur de temps (NTP) directement…

Répondre
3 Réponses
722ecafa9651ee84ee562971dfbd0ce2?s=80&d=mm&r=g
Posts: 3
 vVDB
Anonyme
(@vVDB)
Inscription: Il y a 11 mois

Au lieu de faire de nombreux accès aux réseaux pour mettre à l'heure l'ESP. Et éventuellement saturer le serveur d'heure avec des millions d'objets similaires... Si si vous êtes lu ;-)))
Ne peut-on pas prévoir dans le setup() de récupérer l'heure et de l'associer/synchroniser au compteur interne de millisecondes.
On a ainsi l'heure 'juste' en permanence même si on met OFF le WiFi
Limite : Le compteur se remet à zéro tous les 45 jours. c'est un UINT32 de mémoire.
Un bon système redémarre tous les jours ;-)))
En deepsleep() le RTC fonctionne, je ne sais plus ce qu'est ce RTC pour EXPRESSIF...

Répondre
1 Répondre
fe36ca0d4d6bdcc500dbd432c3c08731?s=80&d=mm&r=g
Admin
(@christophe)
Inscription: Il y a 6 ans

Membre
Posts: 509

Bonjour VDB. Oui c'est une excellente stratégie. Il suffira de convertir le temps au format UNIX Epoc, qui est juste un compteur depuis la création du monde - Unix ;). La mémoire RTC (pour Real Time Clock) peut être utile mais la mémoire est volatile, c'est à dire qu'en cas de coupure d'alimentation, tout est perdu...l'heure avec. L'idéal est d'utiliser un module RTC (DS3231 par exemple) avec une sauvegarde de l'heure par batterie (comme dans nos vieux PC). D'ailleurs, je sens une pointe d'ironie dans votre message...non non, il n'est pas nécessaire de redémarrer l'ESP tous les jours...pas comme un certain système d'exploitation 🤣

Répondre
722ecafa9651ee84ee562971dfbd0ce2?s=80&d=mm&r=g
Posts: 3
 vVDB
Anonyme
(@vVDB)
Inscription: Il y a 11 mois

Je suis allé voir dans le code de NTPClient et j'ai trouvé cela

unsigned long NTPClient::getEpochTime() const {
return this->_timeOffset + // User offset
this->_currentEpoc + // Epoc returned by the NTP server
((millis() - this->_lastUpdate) / 1000); // Time since last update
}

Donc l'auteur a déjà prévu la synchro.

On ne devrait lire qu'une seule fois sur le serveur de Temps au boot par exemple.
Puis ensuite utiliser getEpochTime() car l'heure est à jour.
Modulo la dérive de millis() qui doit être assez faible sur une journée. Valeur à trouver...

Je ne parlais pas d'un composant externe RTC mais quand l'ESP est en mode deepSleep, seul le module dit 'RTC' de l'ESP reste actif. Il y a un compteur qui tourne.
Le but serait d'exploiter ce compteur pour ajuster millis() avec le temps passé en deepSleep. Mais comme le systeme fait un reboot en sortant d'un deepSleep...

Répondre
Share:
Rejoignez nous!
Chercher sur le forum
Derniers tutoriels
Derniers messages postés sur le forum
Domotique et objets connectés à faire soi-même
Domotique et objets connectés à faire soi-même
Vous avez aimé ce tutoriel

Ne manquez plus les prochains projets

Recevez chaque semaine le récapitulatif des tutoriels et projets.

Vous pouvez vous désabonner à tout moment.