Appel des broches Arduino dans les scipts MicroPython

La NUCLEO-WB55 est opportunément équipée des broches Arduino, donc le mappage (standardisé par la carte Arduino UNO) est rappelé ici.

Cas numéro 1 : vous utilisez le firmware distribué sur ce site

Dans le firmware MicroPython que nous proposons en téléchargement ici, les alias des broches Arduino ont été redéfinis de telle sorte que leur appel soit aussi simple que possible. Par exemple, l’exercice avec le buzzer Grove, connecté sur la broche D3, donne le script main.py suivant :

# Objet du script : Jouer un jingle sur un buzzer (Grove ou autre).
# Cet exemple fait la démonstration de l'usage de la PWM pour la broche D3 sur laquelle est 
# branché le buzzer.

from pyb import Pin, Timer

# Liste des notes qui seront jouées par le buzzer
frequency = [262, 294, 330, 349, 370, 392, 440, 494]

# D3 génère une PWM avec TIM1, CH3
BUZZER = Pin('D3') 

while True :
	# Itération entre 0 et 7
	for i in range (0,7) :
		# On ajuste la fréquence pendant l'itération
		tim1 = Timer(1, freq=frequency[i])
		ch3 = tim1.channel(3, Timer.PWM, pin=BUZZER)
		# Rapport cyclique paramétré à 5% (le buzzer est alimenté 5% du temps d'une période)
		ch3.pulse_width_percent(5)

L’appel à la broche D3 se fait tout simplement par l’instruction Pin('D3').

Cas numéro 2 : vous utilisez un firmware distribué sur le site officiel de MicroPython

Par défaut, les firmwares MicroPython pour les cartes équipées de microcontrôleurs STM32 n’utilisent pas les mêmes alias que l’API Arduino pour accéder aux broches mais ceux de la carte Pyboard. Aussi, si vous utilisez un firmware MicroPython provenant du site micropython.org, vous trouverez peut-être commode de redéfinir les alias vers les broches Arduino à l’aide de la procédure que nous allons expliquer.

Veuillez noter que tous les exemples que nous donnons sur ce site utilisent un firmware modifié qui intègre déjà des alias pour les broches Arduino et ne nécessitent pas (à cette date) cette redéfinition de leurs noms.

Commencez par enregistrez le contenu qui suit dans un fichier nommé arduino_pins.py.

# Equivalence broches Arduino / broches Pyboard
from pyb import Pin
A0=Pin.cpu.C0
A1=Pin.cpu.C1
A2=Pin.cpu.A1
A3=Pin.cpu.A0
A4=Pin.cpu.A4
A5=Pin.cpu.A5
D0=Pin.cpu.A3
D1=Pin.cpu.A2
D2=Pin.cpu.C6
D3=Pin.cpu.A10
D4=Pin.cpu.C10
D5=Pin.cpu.A15
D6=Pin.cpu.A8
D7=Pin.cpu.C13
D8=Pin.cpu.C12
D9=Pin.cpu.A9
D10=Pin.cpu.A4
D11=Pin.cpu.A7
D12=Pin.cpu.A6
D13=Pin.cpu.A5
D14=Pin.cpu.B9
D15=Pin.cpu.B8

Ce fichier doit être copié sur PYBFLASH et importé dans le script main.py de votre application. Par exemple, la version modifiée de l’exercice avec le buzzer Grove donnera le script main.py suivant :

# Objet du script : Jouer un jingle sur un buzzer (Grove ou autre).
# Cet exemple fait la démonstration de l'usage de la PWM pour la broche D3 sur laquelle est 
# branché le buzzer.

import arduino_pins # Alias pour accéder aux broches Arduino 
from pyb import Timer

# Liste des notes qui seront jouées par le buzzer
frequency = [262, 294, 330, 349, 370, 392, 440, 494]

# D3 génère une PWM avec TIM1, CH3
BUZZER = arduino_pins.D3 # Appel de la broche selon la convention Arduino

while True :
	# Itération entre 0 et 7
	for i in range (0,7) :
		# On ajuste la fréquence pendant l'itération
		tim1 = Timer(1, freq=frequency[i])
		ch3 = tim1.channel(3, Timer.PWM, pin=BUZZER)
		# Rapport cyclique paramétré à 5% (le buzzer est alimenté 5% du temps d'une période)
		ch3.pulse_width_percent(5)

Tous les exemples que nous donnons sur ce site utilisent les définitions de broches Arduino données dans le “Cas numéro 1” adaptées à notre firmware “personnalisé”. Aussi, si vous utilisez un firmware du site MicroPython, vous devrez (éventuellement) leur apporter les modifications que nous venons d’expliquer.