Synchoniser RTC par NTP avec carte wemos mega - esp8266 intégré

Bonsoir a tous,

Je suis nouveau dans l'arduino. J'ai un projet de faire une thermostat avec un écran LCD avec affichage de l'heure. Le problème est que je ne trouve pas de tuto pour m'aider a synchroniser le module RTC d3231 avec un serveur NTP une fois par jour pour pour ne pas avoir de décalage. J'ai trouvé beaucoup de chose mais comme je suis sur une carte avec l'ESP intégré je suis perdu. J'aurais aimé savoir aussi, si je peux utiliser uniquement un module ESP pour exécuter le programme (avec utilisation de relais et pourquoi pas d'une interface WEB) sans passer par un arduino pour faire tout ceci. J'ai essayé avec ma carte wemos seulement ça n'affiche rien sur mon LCD.

Merci de votre aide

oui vous pouvez faire tout cela avec votre Wemos et votre RTC sans autre Arduino

  • pour le NTP, il y a la librairie NTPClient de Fabrice Weinberg qui est simple d'emploi

  • la librairie RTClib ou celle de bricoleau vous permettra de vous interfacer avec une DS3231 par exemple (celle de bricoleau à une "fonction" reglerNTP() )

  • le pilotage d'un relai adapté se fait par une des pins

  • il y a des petits modules OLED sous forme de Shield en 64X48 pixels qui se branchent simplement sur votre Wemos

Merci de votre réponse, je vais me pencher dessus

C'est faisable mais est-ce utile et surtout de le faire tous les jours.

La DS3231 est donné pour varier au max de 2 ppm.
24 h = 1440 mn = 86 400 s
2 ppm de 86 400 s = 0,17 s
Sur 1 an la dérive max sera de 63 secondes, la dérive réelle sera plus faible.
Pour un thermostat je ne pense pas que ce soit gênant.

La DS3231 n'a rien à voir avec les RTC classiques comme la DS1307 qui ont le quartz externe au circuit intégré et qui subissent la dérive du quartz avec les variations de température.
Le circuit "resonnant" de la DS3231 est interne à la puce et est compensé en température d'où les performances incomparables.

Bonjour

Si l'ESP dispose d'un accès à internet permanent, l'usage d'un RTC externe de type DS3231 ne me semble absolument pas nécessaire.

De mon côté je suis en train d'expérimenter la chose en ce moment, à temps perdu.

Sur mes premières constatations, je vois qu'une horloge logicielle basée sur la fonction millis() d'un ESP, a une dérive d'environ 10 secondes par jour.
Avec une synchro NTP une fois par heure, la dérive est en permanence inférieure à une seconde, ce qui rend caduque l'usage d'un DS3231.

Pour info, là je suis en train de mettre au point un système qui s'auto-contrôle pour :

  • ajuster la fréquence de synchro NTP en fonction de la dérive constatée.
  • ajuster l'heure courante à partir de la fonction millis() + une dérive estimée depuis la dernière synchro NTP (en fonction de la dérive constatée lors de la période précédente, supposée linéaire).

Mon objectif (que j'estime atteignable) est d'arriver à une horloge temps réel entièrement logicielle pour ESP, définie jusqu'aux millisecondes, avec une dérive en permanence inférieure à un centième de seconde.

Mon objectif (que j'estime atteignable) est d'arriver à une horloge temps réel entièrement logicielle pour ESP, définie jusqu'aux millisecondes, avec une dérive en permanence inférieure à un centième de seconde.

C'est un timing ambitieux avec les couches WiFi - curieux de voir comment vous allez gérer avec la variabilité du delta qu'on voit fréquemment, mais j'ai jamais regardé en détail donc n'hésitez pas à partager

Wé c'est un os intéressant à ronger :smiley:

La plupart des codes NTP pour arduino exploitent très partiellement les infos disponibles dans les trames.
A la base, le protocole NTP permet de traiter le temps avec une définition à 2-32 seconde.

Deux obstacles majeurs pour arriver à une précision maxi :

  1. gérer les latences accidentelles irrégulières dans les échanges de flux (effet WIFI ou fiston qui bouffe la bande passante avec ses jeux en ligne :stuck_out_tongue: )

  2. gérer la différence de débit de la ligne, entre le flux montant et le flux descendant, fréquente dans nos installations domestiques et pas vraiment prévues par le protocole NTP, qui table sur le fait que les trames circulent à la même vitesse dans les deux sens.

Et encore : les serveurs NTP ne sont pas tous pile poil synchro entre eux.
Le meilleur algo permettra de se synchroniser à un serveur NTP avec une précision diabolique, mais lors du changement de serveur NTP il faut déclencher une requalibration.

Bonjour,

Je suis en train de faire un test avec un esp8266 pour voir la dérive de deux rtc une DS3231 et une DS1307 par rapport à l'heure donnée par un serveur NTP.

J'en suis actuellement à 5jours 8heures de test à partir du moment ou j'ai initialisé le deux rtc à partir de l'heure NTP. Les RTC ont fonctionné à peu près la moitié du temps sur leur pile et la moitié du temps alimentés.

Résultat actuellement
différence de l'heure DS3231 avec l'heure NTP: -1 secondes
différence de l'heure DS1307 avec l'heure NTP: +120 secondes !!

J'ai aussi fait le test d'une horloge avec millis() par rapport à l'heure NTP sur 1 jour: entre -3 et -4s

En tout cas ça confirme vraiment ce qu'on lit sur le forum la précision du DS1307 est vraiment lamentable (dérive d'environ 1s par heure)