Envoi de données par Python

(vers l’Arduino)

 


Pour répondre à un besoin d’information du programme téléversé dans la mémoire de l’Arduino (valeurs d’une variable, actions à effectuer…), il est parfois nécessaire que le programme Python envoie des données vers le microcontrôleur via le port série.

Pour cela, on utilise la fonction write()” de l’objet port série” créé au préalable :

SerialPort = serial.Serial(”COM 5”, baudrate=9600, timeout=1)


Généralement, les données à envoyer seront des chaines de caractères que le programme de l’Arduino pourra traiter selon les méthodes vues précédemment. Cependant la fonction write()” écrit des données binaires sur le port série. Ces données sont envoyées comme une série d’octets.

Il faut donc convertir la chaine de caractères à envoyer en données binaires. On utilise pour cela la fonction encode(‘utf-8’)” qui permet de convertir la chaine de caractères en une séquence d’octets selon un encodage universel, l’UTF-8 (abréviation de l’anglais Universal Character Set Transformation Format – 8 bits), qui réunit les caractères utilisés par toutes les langues.

L’instruction d’envoi d’une chaine de caractères ”String” est alors :

SerialPort.write(String.encode(‘utf-8’))

 

Exemple de programme d’envoi de données :

Revenons à notre programme nommé LedRVB.ino”, avec le circuit support des exemples, qui sera téléversé dans la mémoire de l’Arduino et qui demande à l’utilisateur de saisir un caractère :

. ‘R’, ‘V’ ou ‘B’ pour allumer respectivement la DEL rouge, verte ou bleue

. ‘0’ pour éteindre les DELs

Le programme Python nommé WriteLedRVB.py suivant, gère la demande de saisie de caractère et envoie la donnée à l’Arduino afin qu’il effectue l’action demandée :

 

Jusqu’à la boucle principale, le déroulement du programme est identique à celui du programme précédent de réception de données (importations des librairies, déclaration des variables, connexion à l’Arduino).

Après avoir affiché, les informations sur les caractères à saisir pour effectuer les actions programmé dans l’Arduino, le programme attend la saisie d’un caractère avec l’instruction :

saisie = str(input(””))

Puis envoie la donnée à l’Arduino :

SerialPort.write(saisie.encode(‘utf-8’))

Ces instructions étant dans une boucle infinie, une fois la donnée envoyée, le programme attend une nouvelle saisie jusqu’à la fin du programme en appuyant sur Ctrl-C.

 

Le même programme python peut être utilisé avec le programme pour Arduino (nommé ReadString.ino ) qui, toujours avec le même circuit, va demander à l’utilisateur d’envoyer un message. Si le message est ON”, la DEL rouge s’allume, et si c’est OFF”, la DEL rouge s’éteint.

La seule modification est sur l’information affichée précisant le message à envoyer (programme nommé WriteLedRVB2.py ):