MicroPython: pilote pour l'horloge RTC PCF8523
Bonjour à tous,
Ayant pour idée de réaliser une petite horloge avec la PYBStick et une matrice en CharliePlexing. C'est que je n'aime pas la lumière durant la nuit mais désire parfois savoir quelle heure il est! Tapoter sur un reveil qui s'allume faiblement pendant 10 secondes ferait mon bonheur... et si cela ne coûtait pas trop cher ce serait vraiment cool.
Seulement voila, toutes les plateformes MicroPython ne sont pas sur le même pied face à l'horloge temps réel (dite RTC).
- Certaines n'ont pas de RTC
- D'autres ont des RTC avec une dérive de plusieurs secondes par jours
- Les plateformes les plus chères dispose d'une RTC bien calibrée.
PCF8523 - Horloge temps réel
Le PCF8523 de NXP est très populaire. Il est maintenant très facile d'en trouver sous forme de Breakout.
Adafruit AdaLogger FeatherWing (PCF8523) et PiRTC (PCF8523) |
Je me suis donc mis en tête de faire un backport du pilote PCF8523 CircuitPython vers MicroPython.
J'ai par ailleurs apporté des améliorations puisque le PCF8523 dispose d'une option de gestion d'alarme, répétitive ou non, avec statut alarme logiciel ou matériel (broche d'interruption).
Cette section du pilote à été entièrement réécrite pour pouvoir exploiter pleinement la fonctionnalité d'alarme.
Activer la broche d'interruption sur Alarme permet d'activer un microcontrôleur a intervalle régulier (toutes les heures, tous les jours, tous les lundi, tous les samedi, ...). De quoi permettre la mise en place de projets de collectes de données fonctionnant seul sur de très lonnngues périodes.
Bancher
N'ayant qu'un Adafruit AdaLogger FeatherWing dans mon matériel perso, c'est ce dernier que j'ai utilisé pour tester la bibliothèque.
Tester
La lecture de l'heure sur la RTC est trivial:
from machine import I2C from pcf8523 import PCF8523 import time # PYBStick - S3=sda, S5scl i2c = I2C(1) rtc = PCF8523( i2c ) _time = rtc.datetime print( "Time: %s secs" % _time ) # Transformer en annee, mois, jour, heure, min, .... )
_tuple =y
time.localtime(_time)
print( "Year: %s, month: %s, day: %s, hour: %s, min: %s, sec: %s, weekday: %s, yearday: %s" % _tuple ) # 0 = Lundi ... 6 = Dimanche days = ['lundi','mardi', 'mercredi', 'jeudi', 'vendredi', 'samedi', 'dimancge' ] weekday = time.localtime(_time)[6] print( 'Day of week: %s' % days[weekday] )
Tester l'alarme
Le plus intéressant c'est encore la gestion de l'alarme.
L'exemple ci-dessous, place une alarme toutes les heures... la minute choisie est justement l'heure de démarrage du script + 1minutes (pour ne pas devoir attendre)
L'exemple ci-dessous, place une alarme toutes les heures... la minute choisie est justement l'heure de démarrage du script + 1minutes (pour ne pas devoir attendre)
from machine import I2C from pcf8523 import PCF8523 import time # PYBStick - S3=sda, S5=scl i2c = I2C(1) rtc = PCF8523( i2c ) now = rtc.datetime # Calculer l'alarme 1 minute dans le future alarm_time = now + 60 alarm_tuple = time.localtime(alarm_time) # année, mois, jour, heure, min, sec, jour_de_le_semaine, jour_de_l_annee alarm_minutes = alarm_tuple[4] # Activer l'alarme pour déclenchement toutes les heures et <alarm_min> rtc.alarm_weekday( enable=False ) rtc.alarm_day ( enable=False ) rtc.alarm_hour ( enable=False ) rtc.alarm_min( alarm_minutes, True ) # Attendre les alarmes et afficher un message counter = 0 while True: counter += 1 print('Test alarme, pass %i' % counter ) if rtc.alarm_status: # Vérifier le statut de l'alarme print( "Alarm catched!") # Alarme capturee print( "Tuuut Tuuut Tuuut Tuuut Tuuut Tuuut") print( "Reset alarm status ") rtc.alarm_status = False # désactive l'alarme time.sleep( 10 ) # attendre 10 secondes
Ressource
Envie d'en savoir plus? Voyez le dépôt du pilote MicroPython pour le PCF8523 ainsi que nos autres dépôts.
- Pilote MicroPython pour PCF8523 (MCHobby, GitHub, Français/anglais)
- Dépôt des pilotes MicroPython Multiplateforme (MCHobby, GitHub, Français/anglais)
- Pilotes et plateformes spécifiques MicroPython
Où acheter
- Carte PYBStick
- PiRTC (PCF8523) @ MC Hobby
- Adafruit AdaLogger FeatherWing (PCF8523) @ MC Hobby
MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.
Écrire un commentaire