Outils pour utilisateurs

Outils du site


issue203:micro-ci_micro-la

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
issue203:micro-ci_micro-la [2024/04/03 07:36] d52frissue203:micro-ci_micro-la [2024/04/03 12:38] (Version actuelle) auntiee
Ligne 7: Ligne 7:
 That is a good thing, isn’t it? Well, yes. Most of the time.** That is a good thing, isn’t it? Well, yes. Most of the time.**
  
-Salutations, chers amis. J'espère que vous avez déjà lu mon tutoriel Python dans le monde réel n° 149 dans ce numéro, parce que c'est le début de cet article. Considérez ceci comme la seconde moitié de l'article. Si ce n'est pas le cas, je vous invite à retourner au sommaire (généralement la page 2) et à le lire en premier. J'attendrai.+Salutations, chers amis. J'espère que vous avez déjà lu mon tutoriel Python dans le monde réel n° 149 dans ce numéro, parce que c'est le début de cet article. Considérez ceci comme la deuxième moitié de l'article. Si ce n'est pas le cas, je vous invite à retourner au sommaire (généralement la page 2) et à le lire en premier. J'attendrai.
  
-Vous êtes prêt ? C'EST GÉNIAL ! Nous parlons du passage de l'heure normale à l'heure d'été, puis à l'heure normale. Pourquoi est-ce important ? Eh bien, si vous avez un microcontrôleur qui traite des données sensibles au temps ou qui doit faire quelque chose à un moment donné, votre appareil doit savoir quelle est l'heure exacte à tout moment.+Vous êtes prêt ? C'EST GÉNIAL ! Nous parlons du passage de l'heure normale à l'heure d'été, puis à l'heure normale. Pourquoi est-ce important ? Eh bien, si vous avez un microcontrôleur qui traite des données sensibles au temps ou qui doit faire quelque chose à un moment donné, votre appareil doit savoir l'heure exacte à tout moment.
  
-Vous vous dites peut-être que ce n'est pas très grave, surtout si vous utilisez Thonny comme IDE pour programmer votre appareil. Avez-vous déjà remarqué que lorsque vous obtenez l'heure actuelle sur votre appareil, celle-ci est correcte ? C'est parce que, par défaut, Thonny règle l'heure sur l'appareil et plus souvent qu'autrement, il est également réglé, toujours par défaut, pour utiliser l'heure locale de l'ordinateur sur lequel vous exécutez Thonny.+Vous vous dites peut-être que ce n'est pas très grave, surtout si vous utilisez Thonny comme IDE pour programmer votre appareil. Avez-vous déjà remarqué que lorsque vous obtenez l'heure actuelle sur votre appareil, celle-ci est correcte ? C'est parce que, par défaut, Thonny règle l'heure sur l'appareil et, la plupart du temps, il est également réglé, toujours par défaut, pour utiliser l'heure locale de l'ordinateur sur lequel vous exécutez Thonny.
  
-C'est une bonne chose, n'est-ce pas ? Oui, bien sûr. La plupart du temps.+C'est une bonne chose, n'est-ce pas ? Oui, bien sûr. En général.
  
  
Ligne 30: Ligne 30:
 Il y a quatre options qui peuvent être activées ou désactivées en cliquant sur les petits carrés (Radiobuttons dans le monde Tkinter). Cliquez sur les deux options centrales (« Synchroniser l'horloge temps réel de l'appareil » et « Utiliser l'heure locale dans l'horloge temps réel ») pour désactiver les options. Redémarrez ensuite Thonny. Il y a quatre options qui peuvent être activées ou désactivées en cliquant sur les petits carrés (Radiobuttons dans le monde Tkinter). Cliquez sur les deux options centrales (« Synchroniser l'horloge temps réel de l'appareil » et « Utiliser l'heure locale dans l'horloge temps réel ») pour désactiver les options. Redémarrez ensuite Thonny.
  
-A l'origine, j'avais prévu un projet complet incluant le code pour cet article. Cependant, de nombreux écueils m'ont empêché de le faire. L'un d'entre eux, et non des moindres, est un problème dans la fonction ntptime de MicroPython. Il semble que ce problème soit présent sur tous les types de microcontrôleurs, et pas seulement sur le RPi-Pico W. Donc, mon plan de repli est d'expliquer comment cela DEVRAIT être fait, puis d'essayer d'établir un plan sur la façon dont cela devrait être mis en œuvre (au moins jusqu'à ce que les choses se règlent dans le monde de MicroPython) et de vous donner le code du projet le mois prochain.+A l'origine, j'avais prévu un projet complet incluant le code pour cet article. Cependant, de nombreux écueils m'ont empêché de le faire. L'un d'entre eux, et non des moindres, est un problème dans la fonction ntptime de MicroPython. Il semble que ce problème soit présent sur tous les types de microcontrôleurs, et pas seulement sur le RPi-Pico W. Donc, mon plan de repli est d'expliquer comment cela DEVRAIT être fait, puis d'essayer d'établir un plan sur la façon dont il devrait être mis en œuvre (au moins jusqu'à ce que les choses se règlent dans le monde de MicroPython) et de vous donner le code du projet le mois prochain.
  
  
Ligne 39: Ligne 39:
 NTPTIME NTPTIME
  
-Le micrologiciel MicroPython dispose d'un module appelé ntptime qui, en supposant que votre appareil supporte la communication Internet, se rendra à une adresse Internet spéciale et demandera l'heure. CEPENDANT, l'heure renvoyée n'est pas celle que l'on croit. Il s'agit d'un très grand nombre entier qui indique le nombre de secondes écoulées depuis le 1er janvier 1900 à minuit, puis un décalage est appliqué pour l'ajuster au nombre de secondes écoulées depuis le 1er janvier 1970 ou le 1er janvier 2000. C'est ce qu'on appelle l'EPOCH. Cela dépend du microcontrôleur que vous utilisez. Vous ne devriez pas avoir à vous préoccuper des calculs internes profonds, puisque le module ntptime devrait s'en charger pour vous. Ce dont vous devez vous préoccuper, c'est qu'il y a deux temps qui sont conservés dans le système. L'un est gmtime et l'autre est localtime. Comme vous pouvez le deviner, gmtime est l'UTC (Universal Coordinated Time - Temps universel coordonné), ou heure moyenne de Greenwich. Ce chiffre n'est jamais soumis à l'heure d'été. On pourrait penser que l'heure locale est au moins associée au fuseau horaire et au mieux à la valeur de l'heure d'été. Comme le disait John Belushi... « MAIS NOOOOOOOOOOONNNN ». Dans le monde de MicroPython (du moins actuellement), gmtime et localtime sont identiques. Cela a donné lieu à une grande discussion que vous pouvez suivre si vous le souhaitez à l'adresse https://github.com/orgs/micropython/discussions/12378. Comme je l'ai dit plus haut, les fuseaux horaires ne sont actuellement pas implémentés dans MicroPython.+Le micrologiciel de MicroPython dispose d'un module appelé ntptime qui, en supposant que votre appareil supporte la communication Internet, se rendra à une adresse Internet spéciale et demandera l'heure. CEPENDANT, l'heure renvoyée n'est pas celle que l'on croit. Il s'agit d'un très grand nombre entier qui indique le nombre de secondes écoulées depuis le 1er janvier 1900 à minuit, puis un décalage est appliqué pour l'ajuster au nombre de secondes écoulées depuis le 1er janvier 1970 ou le 1er janvier 2000. C'est ce qu'on appelle l'EPOCH. Cela dépend du microcontrôleur que vous utilisez. Vous ne devriez pas avoir à vous préoccuper des calculs internes profonds, puisque le module ntptime devrait s'en charger pour vous. Ce dont vous devez vous préoccuper, c'est qu'il y a deux temps qui sont conservés dans le système. L'un est gmtime et l'autre est localtime. Comme vous pouvez le deviner, gmtime est l'UTC (Universal Coordinated Time - Temps universel coordonné), ou heure moyenne de Greenwich. Ce chiffre n'est jamais soumis à l'heure d'été. On pourrait penser que l'heure locale est au moins associée au fuseau horaire et au mieux à la valeur de l'heure d'été. Comme le disait John Belushi... « MAIS NOOOOOOOOOOONNNN ». Dans le monde de MicroPython (du moins actuellement), gmtime et localtime sont identiques. Cela a donné lieu à une grande discussion que vous pouvez suivre si vous le souhaitez à l'adresse https://github.com/orgs/micropython/discussions/12378. Comme je l'ai dit ci-dessus, les fuseaux horaires ne sont actuellement pas implémentés dans MicroPython.
  
  
Ligne 58: Ligne 58:
 Ainsi, si vous souhaitez obtenir l'heure correcte quel que soit l'endroit où se trouve votre microcontrôleur à ce moment-là, vous devez jouer à un tas de jeux. Ainsi, si vous souhaitez obtenir l'heure correcte quel que soit l'endroit où se trouve votre microcontrôleur à ce moment-là, vous devez jouer à un tas de jeux.
  
-Puisqu'il n'y a pas de consensus sur ce sujet, examinons les jeux auxquels nous pouvons jouer pour obtenir les valeurs que nous voulons/nécessaires, du moins pour l'instant.+Puisqu'il n'y a pas de consensus sur ce sujet, examinons les jeux auxquels nous pouvons jouer pour obtenir les valeurs voulues/nécessaires, du moins pour l'instant.
  
 La solution la plus simple à ce stade est d'écrire votre propre fonction d'heure locale qui prendra l'information sur le fuseau horaire et renverra une heure locale correcte. Cependant, vous n'avez pas besoin de faire cela, puisque j'en ai trouvé une pour vous. La solution la plus simple à ce stade est d'écrire votre propre fonction d'heure locale qui prendra l'information sur le fuseau horaire et renverra une heure locale correcte. Cependant, vous n'avez pas besoin de faire cela, puisque j'en ai trouvé une pour vous.
Ligne 83: Ligne 83:
 Il faut d'abord convertir ce décalage horaire en secondes. QUOI ? Il faut d'abord convertir ce décalage horaire en secondes. QUOI ?
  
-Oui. Nous savons tous qu'il y a 60 secondes dans une minute et 60 minutes dans une heure, ce qui donne 60*60*-6 (-21600) ou 60*60*-5 (-18000). Ce sont ces nombres que vous devez envoyer à la fonction de remplacement de l'heure locale.+Oui. Nous savons tous qu'il y a 60 secondes dans une minute et 60 minutes dans une heure, ce qui donne 60*60*-6 (-21600) ou 60*60*-5 (-18000). Ce sont ces nombres que vous devez envoyer à la fonction de « remplacement » de l'heure locale.
  
-Pour ne rien arranger, le module ntptime n'est pas très convivial. Il en va de même pour le serveur de temps NTP. Souvent, le serveur ntptime ne renvoie rien du tout et parfois il renvoie une valeur qui fera planter votre programme. Lorsque cela se produit, la « pensée actuelle » est que le serveur NTP vous envoie un paquet KoD ou « Kiss-'o-Death » (le baiser de la mort) qui dit en gros que vous avez fait trop d'appels dans un laps de temps trop court.+Pour ne rien arranger, le module ntptime n'est PAS très convivial. Il en va de même pour le serveur de temps NTP. Souvent, le serveur ntptime ne renvoie rien du tout et parfois il renvoie une valeur qui fera planter votre programme. Lorsque cela se produit, la « pensée actuelle » est que le serveur NTP vous envoie un paquet KoD ou « Kiss-'o-Death » ( baiser de la mort) qui dit en gros que vous avez fait trop d'appels dans un laps de temps trop court.
  
  
Ligne 110: Ligne 110:
 Ce qui est intéressant avec le module de Peter, c'est qu'il permet non seulement de passer une valeur de fuseau horaire (toujours en secondes), mais qu'il renvoie également soit la bonne valeur de temps (en secondes), soit un 0 si le serveur NTP n'a pas répondu à temps. Ce qui est intéressant avec le module de Peter, c'est qu'il permet non seulement de passer une valeur de fuseau horaire (toujours en secondes), mais qu'il renvoie également soit la bonne valeur de temps (en secondes), soit un 0 si le serveur NTP n'a pas répondu à temps.
  
-Il y a une discussion à ce sujet à https://github.com/peterhinch/micropython-samples/blob/master/README.md#414-ntp-time et une discussion plus large à https://forum.micropython.org/viewtopic.php?t=12726.+Il y a une discussion à ce sujet à https://github.com/peterhinch/micropython-samples/blob/master/README.md#414-ntp-time et une discussion plus longue à https://forum.micropython.org/viewtopic.php?t=12726.
  
  
Ligne 129: Ligne 129:
 Malheureusement, le module de Peters ne règle pas l'heure, il ne fait que l'obtenir. Voici donc comment vous pouvez utiliser son code tout en réglant correctement l'heure : Malheureusement, le module de Peters ne règle pas l'heure, il ne fait que l'obtenir. Voici donc comment vous pouvez utiliser son code tout en réglant correctement l'heure :
  
-essais=10+trials=10
 while trials > 0 : while trials > 0 :
  lt=port_ntptime.time()  lt=port_ntptime.time()
Ligne 135: Ligne 135:
 lt est la valeur de retour. Vérifiez si elle est égale à 0 ou non. Si c'est le cas, appelez la fonction ntptime.settime(). Si ce n'est pas le cas, attendez 15 secondes, puis réessayez (en haut à droite). lt est la valeur de retour. Vérifiez si elle est égale à 0 ou non. Si c'est le cas, appelez la fonction ntptime.settime(). Si ce n'est pas le cas, attendez 15 secondes, puis réessayez (en haut à droite).
  
-La fonction ntptime.settime() forcera le temps corrigé dans utime.gmtime. Une fois de plus, le problème est que gmtime et localtime sont identiquesvous devez donc vous rappeler que lorsque vous voulez utiliser localtime, vous devez utiliser la fonction localtime2.+La fonction ntptime.settime() forcera le temps corrigé dans utime.gmtime. Une fois de plus, le problème est que gmtime et localtime sont identiques vous devez donc vous rappeler que lorsque vous voulez utiliser localtime, vous devez utiliser la fonction localtime2.
  
 J'espère que cela va régler les problèmes du code que je veux présenter le mois prochain et me permettre de le tester complètement sans qu'il ne plante. J'espère que cela va régler les problèmes du code que je veux présenter le mois prochain et me permettre de le tester complètement sans qu'il ne plante.
issue203/micro-ci_micro-la.1712122600.txt.gz · Dernière modification : 2024/04/03 07:36 de d52fr