Gestion des sorties numériques

(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é)

Connexion à l’Arduino :

. 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é.