Synthèse communication

ARDUINO / PYTHON

 


(Cliquez pour afficher la version PDF)

 

Les méthodes de communications entre un arduino et un programme Python sont résumées à l’aide des schémas suivant :

Communication Arduino – Python via le port série avec ”Pyserial” :

 

  • L’Arduino envoie des données sur le port série par la fonction Serial.print()
  • Le programme Python réceptionne les données de la liaison série, envoyées par l’Arduino, à l’aide de la fonction readline()
  • Le programme Python envoie des données sur le port série avec la fonction write() 
  • L’arduino réceptionne les données envoyées par le programme Python sur la liaison série grâce à la fonction Serial.read() 

 

Communication Arduino-Python via le protocole de communication ”Firmata”

 

Avec le protocole de communication Firmata, la lecture et l’écriture sur les entrées et sorties de l’Arduino se font directement à partir du programme en Python.

Pour contrôler l’Arduino via le protocole de communication ”Firmata standard”, le programme Python utilise la bibliothèque ”PyFirmata” (le sketch Firmata standarddoit être téléversé dans la mémoire de l’Arduino au préalable).

Toutes les fonctions utiles à l’utilisation de ”PyFirmata” (fonction de déclaration des entrées et sorties, d’itérateur, d’écritures…) que nous avons définies jusqu’à présent ont été regroupées dans un fichier Python, nommé PyFirmataDef.Py que l’on peut importer dans tous les programmes, à condition que le fichier des fonctions soit dans le même dossier que le fichier du programme, avec l’instruction :

from PyFirmataDef import *

 

 

Le programme (SyntheseFirmataStandard.py) ci-dessous met en application toutes ces fonctions avec le circuit suivant :

Ce circuit est composé:
. d’une DEL RVB dont les DELs rouge, verte et bleue sont respectivement connectés aux sorties, 11, 9 et 10 de l’Arduino,
. d’un potentiomètre, dont le « point milieu » est relié à l’entrée analogique A0 du microcontrôleur,
. et d’un bouton poussoir dont la sortie est reliée à la borne 12 de l’Arduino.


Avec ce programme:

. La DEL bleue est allumée ou éteinte avec le bouton poussoir,

. La luminosité de la DEL rouge est réglée avec le potentiomètre.

 

  • Firmata Express

Pour contrôler l’Arduino via le protocole de communication ”Firmata Express,” le programme Python utilise la bibliothèque pymata-express (le sketch Firmata Expressdoit être téléversé dans la mémoire de l’Arduino au préalable).

Toutes les fonctions utiles à l’utilisation de ”Pymata-express (fonction de déclaration des entrées et sorties, de lectures, d’écritures…) que nous avons définies jusqu’à présent ont été regroupées dans un fichier Python, nommé PymataExpressDef.Py que l’on peut importer dans tous les programmes, à condition que le fichier des fonctions soit dans le même dossier que le fichier du programme, avec l’instruction :

from PymataExpressDef import *

 

Avec le même circuit que celui du programme de synthèse du protocole ”Firmata Standard”, auquel un buzzer a été ajouté sur la broche N°3 de l’Arduino, le programme, nommé SynthèseFirmataExpress.py, met en application toutes ces fonctions :


Avec ce programme:

. La DEL rouge est allumée ou éteinte avec le bouton poussoir,
. La luminosité de la DEL bleue est réglée avec le potentiomètre,
. Un son est émis en appuyant sur le bouton poussoir.

 

Remarque :

Comme vous avez pu le constater, le fichier Python, nommé ”PymataExpressDef.Py”, regroupant les fonctions utiles à l’utilisation de ”Pymata-express”, ne contient pas les fonctions gérant les capteurs ultrasoniques.

En effet, ces fonctions font intervenir une fonction asyncio (”Get_Distance”) qui utilise une variable globale et qui doit donc se trouver dans le fichier du programme principal.

 

Il est cependant possible d’importer les autres fonctions du fichier ”PymataExpressDef.Py” afin de pouvoir les utiliser conjointement avec les fonctions de gestion des capteurs ultrasoniques, comme dans l’exemple ci-dessous (programme Sonar2.py) avec ce circuit :

 

Le programme permet de mesurer la distance entre un capteur ultrasonique à 2 broches (comme le HC‐SR04) et un obstacle, et de l’afficher dans la console Python, quand le bouton poussoir est appuyé :

 

Conclusion :

Le principal avantage de la méthode de communication par protocole ”Firmata” est que toute la gestion de l’Arduino se fait au sein du programme en Python.

En effet, une fois le programme ”pilote” (Firmata standard ou Express) téléversé dans la mémoire de l’Arduino, il n’est plus nécessaire de le changer, puisque c’est le programme en Python qui sera modifié en fonction du matériel connecté au microcontrôleur.

Cependant, dans le cas d’utilisation de certains capteurs (par exemple, le capteur de température et d’humidité DHT 11), avec des bibliothèques uniquement développées pour le langage ”Arduino IDE”, il est plus simple d’utiliser un programme spécifique téléversé dans la mémoire de l’Arduino et de communiquer avec celui-ci à l’aide de ”pyserial”.

Et si l’Arduino doit être utilisé de façon autonome (sans liaison série avec un ordinateur), il est possible d’utiliser un module (un shield) ajoutant une carte SD à l’Arduino sur laquelle des données pourront être enregistrées et exploitées ultérieurement.

 

Finalement, quel que soit la méthode de communication utilisée, le programme en python d’analyse et d’exploitation des données reste le même.

 

L’essentiel concernant la communication entre un Arduino et un programme Python ayant été vu, il est maintenant possible de développer des projets regroupant quelques activités programmées en Python pour les Arduino Uno.