Bonjour,
Je suis entrain de tester un programme que j'incorporerai dans un plus gros ensuite. Je cherche à récupérer l'heure sur Internet (pour m'éviter l'achat d'un module RTC) via un shield Ethernet W5100. Cependant, je ne sais pas comment faire pour récupérer seulement l'heure et non tout le code HTML du site (heure.com).
personnellement je ne ferai pas l'économie d'une horloge locale... au prix où sont les RTC...
Entièrement d'accord avec JML
Actuellement pour environ 1 € tu as une DS3231.
Surtout ne pas prendre la référence DS1307 que par flemme tous les sites de vulgarisation mettent en avant et qui est disons nulle coté précision.
Cerise sur le gâteau la DS3231 offre deux alarmes qui peuvent servir à déclencher des actions.
La DS3231 est un "tout en un" c'est dire que le quartz est dans le boîtier du circuit intégré c'est rassurant parce que c'est celui choisi et garanti par le fabricant de l'horloge.
Et c'est la mise en œuvre du quartz et sa qualité qui font toute la précision.
Cette grâce à cette intégration que le fabricant peut compenser les dérives du quartz en température, ce qui permet à Maxim/Dallas d'annoncer une dérive inférieure à +/- 2 ppm.
Dans un premier temps 2 ppm c'est 60 secondes sur une année mais attention dans toute l'étendue de la gamme de température qui est 0°C/+70°C pour le DS3231S et -40°C/+85°C pour le modèle DS3231SN.
Déjà si l'horloge ne fonctionne qu'à l'intérieur, c'est à dire à 22°C +/- 3°C la variation max sera bien inférieure à +/- 2ppm.
Ensuite la compensation se fait par pas. Selon le cas l'algorithme prendra le pas supérieur ou le pas inférieur. Sur une année il y aura un moyenage naturel qui réduira encore la valeur de 60 s maximum.
Sauf si tu ton application demande une heure ultra précise ce sera plus simple avec une horloge sauvegardée (RTC) qu'extraire l'heure d'internet bien que cela représente un beau défit.
Tenez voici un bout de code que j’avais qui trainait et qui utilise le code de l’exemple NTP client pointé plus haut mais mis dans un sketch pour le shield ethernet
Dans le setup() on initialise le shield ethernet et l’instance UDP et la loop() appelle la fonction de l’exemple (que j’avais un peu modifiée) toutes les 5 secondes (le delay(5000) de la fin de la boucle) et va demander l’heure à un serveur NTP (“pool.ntp.org” mais vous pourriez mettre “fr.pool.ntp.org” qui est en france - ça ne sert pas à grand chose car vous serez routé surement là bas automatiquement). L’appel à la fonction retourne “l’unix time”, le nombre de secondes depuis le 1er janvier 1970 à 0h00 ou alors 0 s’il y a eu un problème.
Ensuite si j’ai bien obtenu l’heure, je convertis le temps unix en une structure qui permet une représentation “éclatée” de l’heure et j’imprime l’heure unix et l’heure correspondante en UTC+2 (j’ai rajouté DELTA_AVEC_UTC qui vaut 2) sur la console (réglée à 115200 bauds)
Si vous voulez l’heure donc, après l’appel à la fonction ptm = gmtime(&unixTime);ptm va pointer sur une structure qui vous donne l’information sur l’heure UTC (sans Daylight Saving Time flag) ptm->tm_hour ce sont les heures, ptm->tm_min les minutes etc