jeudi 12 août 2021

Horloge temps réel DS3231 et Raspberry Pi Pico (MicroPython)

Tel que mentionné dans un récent article, le Raspberry Pi Pico comporte une horloge temps réel (RTC) interne qui permet à nos programmes de connaître la date et l'heure à n'importe quel moment. Cependant, cette horloge interne retourne au 1er janvier 2021 chaque fois que l'alimentation du Raspberry Pi Pico est interrompue.

Pour éviter cet irritant, on peut utiliser un module RTC externe.  Grâce à sa pile, le module RTC continuera de se mettre à jour pendant que le Raspberry Pi Pico sera hors tension.

Module DS3231

Le module RTC DS3231 est économique et très facile à trouver. Les données sont communiquées par I2C, et une pile de 3 V (qui pourra typiquement fonctionner quelques années sans nécessiter de remplacement) assure le fonctionnement continu de l'horloge.

Mon module DS3231 ne comporte pas de support pour y insérer une pile, ce qui explique la présence de ruban gommé pour tenir la pile! Un avantage, c'est que je peux utiliser n'importe quel format de pile 3 V.

Connexions

J'ai branché le module DS3231 au Raspberry Pi Pico de la façon suivante:

  • Broche "+ " du module DS3231: sortie 3,3 V du Raspberry Pi Pico
  • Broche "D" du module DS3231: broche GP8 du Raspberry Pi Pico
  • Broche "C" du module DS3231:  broche GP 9 du Raspberry Pi Pico
  • Broche "-" du module DS3231: broche GND du Raspberry Pi Pico

Si votre module comporte une broche identifiée par la mention "NC", vous n'avez pas à connecter cette broche.

Bibliothèque MicroPython uRTC par Adafruit

La bibliothèque uRTC d'Adafruit permet de contrôler quelques modèles courants d'horloges temps réel (DS1307, DS3231 et PCF8523). Adafruit ne supporte plus cette bibliothèque depuis que la compagnie a choisi de prioriser CircuitPython plutôt que MicroPython. Malgré tout, uRTC demeure disponible et fonctionnelle.

Comme d'habitude, il faut copier le fichier urtc.py dans le Raspberry Pi Pico afin de pouvoir profiter des fonctionnalités de cette bibliothèque­.


Script #1: consulter la date et l'heure

Voici un script qui affiche la date et l'heure une fois par seconde.  La méthode datetime() (utilisée à la ligne 21) retourne la mesure du temps sous la forme d'un DateTimeTuple contenent l'année, le mois, le jour, le jour de la semaine, l'heure, la minute, la seconde et la milliseconde. Il est facile d'extraire de ce tuple les informations qui nous intéressent.


-

-

Script #2: régler la date et l'heure

Si la date et l'heure fournies par le module DS3231 sont incorrectes, il est facile de les modifier en utilisant encore une fois la méthode datetime, mais en fournissant comme argument le DateTimeTuple correspondant à la valeur désirée.

Par exemple, pour régler le module RTC à 11 heures, 29 minutes et 45 secondes le 12 aoùt 2021, on peut écrire:

urtc.datetime_tuple(year=2021, month=8, day=12, hour=11, minute=29, second=45)

Le script ci-dessous permet de régler la date et l'heure du module DS3231.

-

-

À lire également


Yves Pelletier (Facebook)


mercredi 11 août 2021

Connaître la date et l'heure avec un Raspberry Pi Pico (machine.RTC)

Grâce à la classe machine.RTC de MicroPython, il est possible d'utiliser l'horloge temps réel interne du Raspberry Pi Pico, ce qui permet de connaître la date et l'heure à n'importe quel moment.


MicroPython: version 1.16 ou plus récente

Pour le Rasbperry Pi Pico, la classe machine.RTC n'est disponible que depuis la version 1.16 de MicroPython (sortie en juin 2021). Si vous utilisez la version 1.14 ou 1.15, il faudra faire une mise à jour avant d'aller plus loin.  (Rappel: on presse le bouton BOOTSEL au moment où on branche le Pico à un porte USB, et on y copie le fichier uf2 approprié).

Si vous utilisez Thonny, le numéro de version de MicroPython s'affiche dans la console.


Script #1: Affichage de la date et de l'heure

Le script ci-dessous affiche la date et l'heure à chaque seconde. La méthode datetime() (utilisée à la ligne 17) retourne la date et l'heure en format "datetimetuple".  Il s'agit d'un tuple comportant 8 éléments: l'année, le mois (1 à 12), le jour (1 à 31), le jour de la semaine (0 à 6), l'heure (0 à 24), la minute (0 à 59), la seconde (0 à 59) et les "subsecondes".

Lors de la première exécution de ce script, vous obtiendrez probablement un tuple qui indique le 1er janvier 2021: l'horloge interne du Raspberry Pi Pico redémarre à cette valeur chaque fois que son alimentation a été interrompue.

-

-


Script #2: Réglage de la date et de l'heure

Puisque nous ne sommes plus le 1er janvier 2021, il va sans dire que nous avons besoin d'une méthode pour régler l'horloge interne du Raspberry Pi Pico à la bonne date Pour ce faire, il s'agit d'utiliser encore une fois la méthode datetime, mais en lui fournissant en argument le tuple correspondant à la date et l'heure actuelle.

Par exemple, je peux régler l'horloge du Pico à 9 heures, 12 minutes et 17 secondes le lundi 16 août 2021 en utilisant:

rtc.datetime((2021, 8, 16, 0, 9, 12, 17, 0))

Une fois la date et l'heure correctement réglée au moyen de la méthode datetime(), le Raspberry Pi Pico va afficher la date et l'heure correctes aussi longtemps qu'il est alimenté, peu importe que vous exécutiez un script ou non. Mais si vous interrompez son alimentation, il retournera inévitablement au 1er janvier 2021 (dans le prochain article, nous aborderons l'utilisation d'un module RTC externe pour éviter cet irriant).

Le script ci-dessous permet de régler la date et l'heure.

-

-

Après avoir réglé la date et l'heure grâce au script #2, vous pouvez exécuter à nouveau le script #1 pour constater que le Raspberry Pico affiche maintenant l'heure correcte.


À lire également


Yves Pelletier (Facebook)


dimanche 8 août 2021

Module GPS NEO 6MV2 et Raspberry Pi Pico

Dans cet article, nous déterminons notre position (latitude et longitude) au moyen d'un module GPS NEO 6MV2 branché à un Raspberry Pi Pico programmé en MicroPython.


Tel que mentionné lors de notre première exploration du module GPS NEO 6MV2, le module GPS est presque autonome: il s'agit de l'alimenter au moyen d'une tension de 3,3 V pour qu'il se mette à capter des signaux en provenances des satellites GPS et communique les résultats par UART. Une LED bleue intégrée au module GPS clignote pour indiquer que le GPS dispose de données fiables (suite au démarrage du module, plusieurs dizaines de secondes sont parfois nécessaires avant que la LED ne se mette à clignoter).


Le circuit

Puisque le rôle du Raspberry Pi Pico se limite à recevoir les données qui lui seront communiquées par le module GPS, j'ai branché le module GPS au Raspberry Pi Pico de la façon suivante:

  • Broche VCC du module GPS: sortie 3,3 V du Raspberry Pi Pico.
  • Broche RX du module GPS: broche GP4 du Raspberry Pi Pico*
  • Broche TX du module GPS: broche GP5 du Raspberry Pi Pico
  • Broche GND du module GPS: broche GND du Raspberry Pi Pico

* Notez qu'il n'est pas nécessaire de brancher la broche RX du module GPS (car le Raspberry Pi Pico n'enverra aucune information vers le GPS).

Premier script: affichage des données brutes

Dans un premier temps, nous nous contenterons d'afficher dans la console les données brutes émis par le module GPS. Sans surprise, le script est très court, puisqu'il se résume à démarrer le bus UART 1 (associé aux broches GP 4 et GP 5) avec une vitesse de transmission de 9600 bauds, et d'afficher tout ce qui est reçu.

-

-

Si votre module GPS capte des signaux en provenance des satellites (donc si sa LED clignote), vous devriez voir s'afficher des messages débutant par $GPRMC, $GPVTG, etc.

Voici ce que j'ai obtenu dans la console de Thonny:


Installation de la bibliothèque microGPS

Si le coeur vous en dit,  vous pouvez vous documenter sur la norme NMEA 0183 afin d'extraire vous-même les informations qui vous intéressent (latitude, longitude, etc).

Je vous propose plutôt d'installer la bibliothèque micropyGPS de Calvin McCoy.

Prenez soin d'enregistrer le fichier micropyGPS.py dans le Raspberry Pi Pico afin de pouvoir utiliser le deuxième script que je vous propose ci-dessous.


Deuxième script: affichage des données pertinentes

La bibliothèque microGPS met à notre disposition plusieurs méthodes permettant d'extraire la latitude, la longitude, l'altitude, etc. à partir des données brutes fournies par le module GPS:

  • latitude retourne la latitude sous la forme d'un tuple:  [degrés, minutes, Nord ou Sud]
  • longitude retourne la longitude sous la forme d'un tuple:   [degrés, minutes, Est ou Ouest]
Ces tuples sont particulièrement pratiques pour le stockage de données ou pour effectuer des calculs. Pour afficher la latitude et la latitude (sur un écran, par exemple), vous préférerez peut-être utiliser latitude_string() et longitude_string(), qui offrent la même information sous la forme d'une chaîne de caractères.

Ce court script affiche la latitude, la longitude, l'altitude, la vitesse et la date.

-
-

Voici ce que j'ai obtenu dans la console de Thonny:

Il ne vous reste plus qu'à modifier le script pour qu'il réponde à vos besoins (affichage sur un écran, etc.).

À lire également


Yves Pelletier (Facebook)