Gestion des sorties numériques

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

Connexion à l’Arduino :

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