ARDUINO : NTP sur Ethernet

Salut à tous.

Tout est dans le titre.

arduino-ntp-sur-ethernet

Comment récupérer l'heure d'un serveur NTP avec une carte Ethernet W5100 ou W5500.
Avec gestion de l'heure été / hiver bien entendu.

Cordialement
Henri

1 Like

Salut Henri, si tu va voir sur mon projet de gestion chaudière, il y a un exemple....

Oui mais il n'y a pas de gestion de changement d'heure été / hiver, à moins que ton code ne soit pas à jour.

en effet il est peut etre plus ajour, car mon code evolue de temps en temps,

j'ai aujourd'hui une gestion de l'heure d"été et hiver.

voila la partie de code qui gere, la remise a l'heure reguliere dus systeme (car je n'ai pas d'horloge integrer, et donc un decalage de 5 a 10 minute par semaine, mais je remet a l'heure chaque semaine)

je verifie que l'on est dimanche a 00:00:01 et je lance la verification de l'heure.
si j'ai un probleme ethernet l'heure par defaut sera en 1970, alors dans ce cas je refais un essais une heure plus tard
il faut faire une sauvegarde en EEprom du decalage horaire 1h ou 2 h,

il m'arrive parfois de devoir changer le serveur NTP, car non fonctionnel, dans mon code de serveur NTP, j'ai desormis integrer 5 differents NTP, et si ils ne reponde pas, je fais un changement automatique de serveur!

if (((weekday() == 1) && (hour() == 00) && (minute() == 00) && (second() < 2)) )
{
start = 0;
}

if ( ( (year() == 1970) && (hour() == 1)))
{
start = 0;
resetFunc();
}
// remise a l'heure toute les semaines
if (start == 0)
{

setSyncProvider(getNtpTime); // essais encore
start = 1;
}

// ++++++++++ Gestion de l'heure d'été pour la France ++++++++++
// En France le changement d'heure fonctionne selon la règle suivante :
// Le dernier dimanche de mars à 3 heure on ajoute une heure,
// Le dernier dimanche d'octobre à 3 heure on retranche une heure

if ((weekday() >= 1) && (weekday() <= 3) && (month() == 3) && (day() >= 25) && (day() <= 31) && (hour() >= 3) && (heure == 1)) // On verifie si on est en heure d'hiver, un dimanche après le 25 mars à 3H
{
heure = 2;
EEPROMWriteInt(heure_adr, heure); // On change l'indicateur d'heure d'été à 1 pour indiquer que l'heure d'été a déjà été règlée
Serial.println(" changement d'heure hiver!!! ");
delay(10000);
start = 0;

resetFunc();
}
if (weekday() >= 1 && weekday() <= 3 && month() == 10 && day() >= 25 && day() <= 31 && hour() >= 3 && heure == 2) // On verifie si on est en heure d'été, un dimanche après le 25 octobre à 3H
{
heure = 1;
EEPROMWriteInt(heure_adr, heure); // On change l'indicateur d'heure d'été à 1 pour indiquer que l'heure d'été a déjà été règlée
Serial.println(" changement d'heure ete!!! ");
Serial.println(EEPROMReadInt(heure_adr));

delay(10000);
start = 0;

resetFunc();
}
// ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Un peu bourrin comme solution.

Comme je suis un gros fainéant je me suis inspiré de cette librairie :

Elle permet de paramétrer les changements d'heures été/hiver :

 // last sunday in march 2:00, timetone +120min (+1 GMT + 1h summertime offset)
 ntp.ruleDST("CEST", Last, Sun, Mar, 2, 120);
 // last sunday in october 3:00, timezone +60min (+1 GMT)
  ntp.ruleSTD("CET", Last, Sun, Oct, 3, 60);

Et j'ai adapté à l'Ethernet.

en effet il est peut etre plus ajour, car mon code evolue de temps en temps,

C'est un peu le problème avec des fichiers en pièce jointe dans un topic.
Le code évolue, et n'est jamais reposté.

Tu pourrais facilement créer ton projet sur GitHub et donner simplement un lien sur la repository.
Prends exemple sur les libriaries ARDUINO.

L'intérêt n'est pas seulement pour partager, mais aussi pour toi-même :

  • retrouver l'historique des modifications de ton code
  • gérer des versions (tag)
  • et ton code est à l'abri
  • c'est aussi valable pour le hard : schémas, routage, photos, etc.
  • tu peux aussi avoir des photos affichées sur la page GitHub

Je n'ai jamais travaillé autrement.

merci, en effet plus propre que ma maniere bourrin que j'avais trouver a l'époque.