Cet article se base sur une carte Feather STM32F405 Express d’Adafruit. Il s’agit au final d’une «PyBoard» au format Feather utilisant une notation du type Arduino pour ces broches à un tarif très intéressant !
Cette carte de développement est disponible chez Mouser.fr pour un peu plus de 20 € !
Un shield Grove au format Feather est également disponible chez Mouser.fr au alentour des 5 €.
IDE de développement
Thonny reste un des meilleurs outils de développement pour les cartes microcontrôleurs sous MicroPython.
Noms des broches
C’est la classe Pin
du module pyb
qui gère les broches d’entrée/sortie. Il est possible de lister le nom des broches de la carte de la manière suivante :
Pour faire simple :
- les entrées/sorties digitales sur D5, D6 et de D9 à D13.
- les entrées analogiques de A0 à A5 (fonctionnent également en digital !).
- le premier port I2C sur SCL et SDA.
- le port série UART sur RX et TX.
LED utilisateur
La carte intègre une LED utilisateur de couleur rouge (LED1) connectée en interne à D13.
Sorties digitales
L’exemple ci-dessous allume ou éteint une LED connectée à la broche D5.
Entrées digitales
Lecture directe d’un niveau logique
Cet exemple utilise un bouton poussoir et une résistance de tirage vers le haut pour imposer un niveau logique (0 ou 1) sur l’entrée D5.
La méthode value()
retourne le niveau logique (0
ou 1
) de la broche en question.
Activer la résistance de tirage interne
Sur toutes les entrées digitales, deux résistances de tirage respectivement vers le haut (PULL_UP
) et le bas (PULL_DOWN
) sont activables. Ce qui simplifie, par exemple, la connexion d’un interrupteur ou d’un bouton poussoir.
Mesurer une durée d’impulsion
La programme ci-dessous montre comment mesurer la durée d’une impulsion à l’état haut sur l’entrée D13.
Entrées analogiques (12 bits)
Les entrées analogiques sont accessibles sur les broches A0 à A5.
Lecture directe
Une montage potentiométrique applique une tension réglable (de 0 à 3,3 V) sur l’entrée analogique A0.
- C’est la classe
ADC
qui gère les entrées analogiques. - Le constructeur
ADC(pin)
active une entrée analogique sur la brochepin
. - La méthode
read()
retourne la valeur de la tension (entier entre 0 et 4095) sur l’entrée analogique concernée.
Affichage en volt
La tension correspondante s’obtient par la relation :
Pour plus de précision, la tension Vcc a été mesurée au voltmètre.
Acquisition d’une série de mesures en fonction du temps
Seules les cartes Pyboard implémentent la méthode read_timed
pour une lecture de plusieurs valeurs à une fréquence d’échantillonnage pouvant aller jusqu’à 750 kHz ! Cette mesure est cadencée par le timer 6 du microcontrôleur STM32F405.
A noter que la fréquence d’échantillonnage est calculée au plus proche de celle disponible par le timer. La méthode freq()
de la classe Timer
renvoie la fréquence réelle du timer.
Les lignes suivantes calculent les instants et les tensions mesurées dans deux listes respectives.
Sorties analogiques (12 bits)
La Pyboard compte deux convertisseurs numérique-analogique (CNA ou DAC) sur les broches A0 et A1. La tension est délivrée sur 8 bit (par défaut) ou 12 bit varie de 0 à 3,3 V.
Sortie PWM
La Pyboard ne dispose pas de fonction spécifique pour générer un signal PWM. Il faut donc le construire à partir d’un timer.
Le programme suivant règle l’intensité d’une LED sur la broche D5.
- La méthode
pulse_width_percent(duty)
génère le signal avec un rapport cycliqueduty
. - Contrairement à l’Arduino, il est possible ici de régler la fréquence du signal avec la méthode
freq(value)
appliquée sur le timer !
Port I2C
Bien que le module pyb
dispose de sa propre classe I2C (plus évoluée), il est préférable d’utiliser le module machine
qui est compatible avec toutes les cartes microcontrôleur fonctionnant sous MycroPython.
I2C matériel
Le premier port I2C est présent sur les broches SCL et SDA.
Attention : le second port I2C(2) est présent sur les broches TX (SCL2) et RX (SDA2) du port UART. Malheureusement avec un connecteur Grove, ces deux broches sont inversées et donc la communication I2C ne fonctionnera pas ! La solution consiste à utiliser un port I2C logiciel (voir ci-dessous)I2C logiciel
Il est possible mettre en oeuvre un bus I2C logiciel à partir de deux broches digitales quelconques.