Bonjour
C’est mon 1er post…
Je voudrais récupérer la date sur un serveur NTP avec un arduino Uno et un shield W5500 ou W5100.
Pour ça j’ai copié un programme qui fonctionne sur ESP8266 en remplaçant la bibliothèque Wifi par la bibliothèque Ethernet.
A première vue, tout fonctionne sauf que je me retrouve en 2054. Pour le reste, tout est bon, j’ai le bon jour et le bon mois.
Si je coupe la connexion, la date affichée est le 1/1/2000, alors que je devrais avoir le 1/1/1970, là encore j’ai 30 ans de décalage.
#include <SPI.h>
#include <Ethernet.h>
#include <NTPClient.h>
#include <EthernetUdp.h>
#include <time.h>
//Week Days
String weekDays[7]={"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};
//Month names
String months[12]={"janvier", "février", "mars", "avril", "mai", "juin", "juillet", "août", "septembre", "octobre", "novembre", "décembre"};
// L'adresse MAC du shield
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0E, 0xA5, 0x55 };
// L'adresse IP que prendra le shield
IPAddress ip(192,168,1,115);
// connection au serveur NTP
EthernetUDP ntpUDP;
NTPClient timeClient(ntpUDP, "europe.pool.ntp.org", 3600, 600000); // ntpUDP : protocole
void setup() {
// configuration de la liaison Serie
Serial.begin(9600);
Serial.println(" ");
// On démarre le shield Ethernet avec IP fixe
Ethernet.begin(mac, ip); // IP fixe locale
delay(1000); // donne le temps à la carte Ethernet de s'initialiser
// Démarrage du client NTP - Start NTP client
timeClient.begin();
delay(1000);
}
void loop() {
timeClient.update();
Serial.print("Format Time: ");
Serial.println(timeClient.getFormattedTime());
Serial.print("Jour avec timeClient.getDay(): ");
Serial.println(weekDays[timeClient.getDay()]); // ici le jour est bon
time_t epochTime = timeClient.getEpochTime(); // fonction epochTime de type time_t
Serial.print("Epoch Time: ");
Serial.println(epochTime);
// La structure temporelle contient les éléments suivants : https://cplusplus.com/reference/ctime/tm/
struct tm *ptm = gmtime ((time_t *)&epochTime); // Structure temporelle de date et heure
Serial.print("Date avec La structure tm: ");
Serial.println((weekDays[ptm->tm_wday]) + "-" + String(ptm->tm_mday) + "-" + (months[ptm->tm_mon]) + "-" + String(ptm->tm_year +1900));
Serial.println("");
delay(2000);
}
J’ai comparé l’ EpochTime entre l’ESP et le Uno, il est identique à l’instant T.
J’ai récupéré je jour de la semaine avec timeClient.getDay(). Le jour de la semaine est bon.
Puis avec la structure tm qui dépend de l’ EpochTime, Le jour de la semaine correspond à l’année 2054.
Pouvez-vous m’aider, SVP ? Merci d’avance.
Cordialement,