(par le protocole ”Firmata standard”)
Pour modifier l’état d’une sortie numérique (l’équivalent d’un ”digitalWrite” en langage Arduino), la syntaxe est la suivante :
board.digital[numéro_de_pin].write(0_ou_1)
où :
– ”board” est l’objet créé lors de l’appel de la méthode ”Arduino” du module ”pyfirmata”,
– ”numéro_de_pin” est le numéro de la sortie du microcontrôleur dont on veut modifier l’état,
– ”0_ou_1” est le niveau logique souhaité.
Le plus simple est de créer une fonction qui sera appelée dans nos programmes en Python pour modifier l’état d’une sortie numérique :
def DigitalWrite(board,pin,val): board.digital[pin].write(val) |
Ainsi, l’instruction pour mettre la sortie numérique ”9”, de l’objet ”board”, à l’état haut est :
DigitalWrite(board, 9, 1)
Remarque :
Contrairement à un programme Arduino, avec Pyfirmata, il n’est pas nécessaire de déclarer au préalable une broche en sortie numérique avant de l’utiliser.
Exemple :
Avec notre circuit support des exemples, nous allons reprendre le programme Arduino qui demande à l’utilisateur de saisir une instruction:
- si l’instruction est ”ON”, la DEL rouge s’allume,
- et si c’est ”OFF”, la DEL rouge s’éteint).
et l’adapter en langage Python en utilisant la bibliothèque ”pyfirmata” (programme ”LedRVBDigitalOutput.py”) :
Déroulement du programme :
– Importation des librairies et définition de fonctions :
. Le module ”ConnectToArduino.py”, contenant les fonctions de connexion à l’arduino via le protocole ”Firmata standard”, est importé.
L’importation de ce module importe également les bibliothèques :
– ”pyfirmata” pour contrôler l’Arduino,
– ”serial.tools.list_ports” pour déterminer la liste des ports COM disponibles,
– ”sys” pour sortir du programme.
. Fonction ”DigitalWrite” pour modifier l’état logique d’une broche numérique.
– Déclaration des constantes et variables :
. PinLedR = 11 (constante correspondant au n° de la broche sur laquelle la DEL rouge est connectée)
. Appel de la fonction du module ”ConnectToArduino.py” de sélection du port COM :
PortComArduino = SelectPortCOM()
Le nombre de port COM disponible est alors déterminé :
PortsCOM = list(serial.tools.list_ports.comports()
–> si nombre de port COM = 0 : message d’erreur,
–> si nombre de port COM = 1 : sélection de ce port COM pour la connexion,
–> si nombre de port COM > 1 : L’utilisateur doit sélectionner le bon port COM.
. Tentative d’ouverture du port COM sélectionné (PortComArduino) et de connexion à l’Arduino via le protocole ”Firmata standard” avec la fonction ”OpenPortCom” du module ”ConnectToArduino.py”:
board = OpenPortCom(PortComArduino)
–> message d’erreur et le programme est arrêté si l’ouverture du port COM sélectionné ou la création de l’objet ”board” a échoué.
Un échec lors de la connexion se produit si le port COM indiqué ne correspond pas à un port Arduino ou si le protocole ”Firmata standard” n’a pas été téléversé dans la mémoire de l’Arduino.
– Boucle principale du programme (boucle ”while True”) :
. Si la connexion à l’Arduino est réussie, attente de la saisie de l’instruction :
saisie = str(input(””))
. La DEL rouge est allumée ou éteinte suivant l’instruction saisie :
if saisie==”ON” : DigitalWrite(board,PinLedR,1)
elif saisie==”OFF” : DigitalWrite(board,PinLedR,0)
– Fin du programme en appuyant sur Ctrl-C :
–> La DEL rouge est éteinte et le port COM est fermé.