configTzTime() : comment savoir lorsque l'horloge est synchronisée

Bonjour,

Sur ESP32, je synchronise l'horloge par NTP grace au code suivant :

configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", "pool.ntp.org");

qui est asynchrone. Sauf que mon problème est maintenant de sauvegarder cette heure dans la puce RTC.
Du coup, comment puis-je etre au courant que le NTP est terminée ?

Merci

Il y a une requête NTP toutes les heures. Normalement aucun RTC n'est nécessaire, à moins que ton ESP32 ne possède un oscillateur très bas de gamme.

Mais as-t-on un moyen de savoir quand elle est passée ?
(j'ai chercher les sources sur Github mais je n'ai pas vu de callback :face_with_raised_eyebrow:)

Ben en l’occurrence, elle est fourni d'office sur ma TWatch (mais la, pas de pb car je fais une synchro lorsqu'elle passe en mode basse conso), et sur mon LilyPI.
Ca sera utile si je le démarre hors de porté du WiFi ou si l'ADSL est en rade ... genre hier :rofl:

Dans ce cas, rien ne t'empêche de mettre à l'heure le système (clock_settime()) au démarrage à l'aide d'un requête envoyée de manière classique, UDP, si le réseau est accessible.
Si la requête NTP n'aboutit pas, mets à l'heure le système à l'aide de la RTC.
Normalement un DS3231 a besoin d'une mise à jour peu fréquente : 1 fois par mois.

Pas sûr : voir sntp_set_time_sync_notification_cb()
https://github.com/espressif/esp-idf/blob/master/examples/protocols/sntp/main/sntp_example_main.c

Confirmation : c'est la bonne méthode.

#include <Arduino.h>
#include "WiFi.h"

#define MAX_SIZE 80

const char *ssid = "SSSSSSSSSS";
const char *password = "PPPPPPPPP";

const char* ntpServer = "pool.ntp.org";

void time_sync_notification(struct timeval *tv)
{
  Serial.println("Notification of a time synchronization event");
}

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    Serial.print('.');
    delay (500);
  }
  Serial.println("");
  Serial.print("Connected to ");
  Serial.println(ssid);
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP());
  sntp_set_time_sync_notification_cb(time_sync_notification);
  configTzTime("CET-1CEST-2,M3.5.0/02:00:00,M10.5.0/03:00:00", ntpServer);
}

void loop() {
  time_t timestamp = time( NULL );
  char buffer[MAX_SIZE];
  struct tm *pTime = localtime(&timestamp );
  strftime(buffer, MAX_SIZE, "%d/%m/%Y %H:%M:%S", pTime);
  Serial.println(buffer);
  delay(10000);
}
.....
Connected to SSSSSSSSSS
IP address: 192.168.1.30
01/01/1970 01:00:02
Notification of a time synchronization event
04/08/2021 18:21:04
04/08/2021 18:21:14
1 Like

Ok, merci, j'essaie de suite :smiley:

Pour le GITHub, je n'avais chercher que les sources pas dans les exemples. Mais du coup, c'est cool.