(par le protocole ”Firmata Express”)
Pour modifier l’état d’une sortie numérique (l’équivalent d’un ”digitalWrite” en langage Arduino), il faut au préalable déclarer la broche en sortie digitale à l’aide de l’instruction suivante :
loop.run_until_complete(board.set_pin_mode_digital_output(pin))
où :
– ”board” est l’objet créé lors de l’appel de la méthode ”PymataExpress” du module ”pymata-express”,
– ”pin” est le numéro de la broche du microcontrôleur que l’on souhaite déclarer en sortie digitale,
– ”loop” est la boucle des tâches ”asyncio” déclarée ainsi :
loop = asyncio.get_event_loop()
Le plus simple est de créer une fonction qui sera appelée dans nos programmes en Python pour déclarer une broche en sortie numérique :
def Set_DigitalOutput_Pin(board, pin): loop.run_until_complete(board.set_pin_mode_digital_output(pin)) |
Ainsi, l’instruction pour déclarer la broche ”11”, de l’objet ”board”, en sortie numérique est :
Set_DigitalOutput_Pin(board, 11)
L’état logique de la sortie est alors modifié à l’aide de l’instruction suivante :
loop.run_until_complete(board.digital_write(pin, val))
De même, on peut définir une fonction pour l’écriture sur une sortie digitale :
def Digital_Write(board, pin, val): loop.run_until_complete(board.digital_write(pin, val)) |
Ainsi, l’instruction pour mettre la sortie numérique ”11”, de l’objet ”board”, à l’état haut est :
Digital_Write(board, 11, 1)
Exemple :
L’exemple d’application de la gestion des sorties numériques avec ”Firmata Express” est le même que celui avec ”Firmata Standard”.
Le programme adapté à la bibliothèque ”pymata_express” 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 (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 Express”, est importé. L’importation de ce module importe également les bibliothèques :
– ”PymataExpress” pour contrôler l’Arduino,
– ”serial.tools.list_ports” pour déterminer la liste des ports COM disponibles,
– ”sys” pour sortir du programme.
. ”asyncio” nécessaire au fonctionnement de ”PymataExpress”
. Fonction ”Set_DigitalOutput_Pin” pour déclarer une broche en sortie numérique,
. Fonction ”Digital_Write” pour modifier l’état logique d’une broche numérique,
. Fonction ”Arduino_Exit” pour fermer le port COM et se déconnecter de l’Arduino
– Déclaration des constantes et variables :
. PinLedR = 11 (constante correspondant au n° de la broche sur laquelle la DEL rouge est connectée)
. PortComArduino (port COM sur lequel l’Arduino est connecté)
. Appel de la fonction de sélection du port COM du module ”ConnectToArduino.py”:
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 Express” 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 Express” n’a pas été téléversé dans la mémoire de l’Arduino.
. Si la connexion à l’Arduino est réussie:
–> définition d’une boucle asyncio :
loop = asyncio.get_event_loop()
–> Déclaration de la broche de la DEL rouge en sortie numérique :
Set_DigitalOutput_Pin(board, PinLedR)
– Boucle principale du programme (boucle ”while True”) :
. 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” : Digital_Write(board,PinLedR,1)
elif saisie==”OFF” : Digital_Write(board,PinLedR,0)
– Fin du programme en appuyant sur Ctrl-C
–> La DEL rouge est éteinte et le port série est fermé.