Arduino+Python via Firmata
Firmata est un protocole de communication entre un microcontrôleur Arduino et d’autres les logiciels sur l’ordinateur hôte.
Matériel et logiciels nécessaires
- Un microcontrôleur Arduino (avec le câble USB)
- Le logiciel IDE Arduino
- Un IDE Python (Pyzo, VSCode, Edupython, …)
- Coté Arduino, il faut installer un programme (firmware) firmata
Une fois le firmware installé sur l’Arduino, à partir de l’IDE Arduino (voir méthode plus bas), on n’y touche plus : on programme depuis l’ordinateur ! - Coté ordinateur, on peut utiliser n’importe quel logiciel utilisant le protocole firmata. Pour les activités à suivre, nous utiliserons le langage Python.
Voici quelques modules Python permettant d’utiliser le protocole Firmata avec Python :- pymata4 (documentation) : celui que nous préférerons pour les activités à suivre.
- pyFirmata
Sites de référence :
FirmataExpress + pymata4
Installation
Arduino
- Ouvrir l’IDE Arduino
- Installer les bibliothèques FirmataExpress by Alan Yorinks : (voir installer une bibliothèque)
- Installer Ultrasonic by Erick Simöes :
- Ouvrir l’exemple : Fichier > Exemples > FirmataExpress > FirmataExpress
- Connecter l’Arduino via le port USB
- Configurer le modèle de carte et le port série (voir Préparation)
- Téléverser le programme
On peut alors fermer l’IDE Arduino : la programmation du microcontrôleur se fait désormais en langage Python, depuis un IDE Python (Pyzo, VSCode, EduPython, …), sur l’ordinateur.
L’Arduino doit rester branché en USB !
Ordinateur
Il faut exécuter la commande OS (Windows, Linux ou MacOS) :
pip install pymata4
Selon l’IDE choisi, cette commande doit être saisie de différentes manières :
- avec Pyzo : dans la fenêtre du shell
- avec VSCode (ou VSCodium) : depuis un terminal de commande (l’interpréteur python doit déjà être défini)
- avec Edupython : depuis le menu
- sinon, depuis une fenêtre de commande Windows
Programme de base
Voici un petit programme qui peut servir de base de départ pour programmer un Arduino en Python.
Ce programme ultra simple permet de faire clignoter une LED.
from pymata4 import pymata4 import time # Objet représentant la carte Arduino carte = pymata4.Pymata4() # Constantes DELAY = 0.5 # période d'attente PIN = 13 # Initialisation .................................... carte.set_pin_mode_digital_output(PIN) # Fonction de test def blink(): print('ON') carte.digital_write(PIN, 1) time.sleep(DELAY) print('OFF') carte.digital_write(PIN, 0) time.sleep(DELAY) # Lancement du programme ............................ try: # Boucle infinie ................................ while True: blink() except KeyboardInterrupt: # Ctrl+C (sauf pyzo) carte.shutdown() sys.exit(0) finally: carte.shutdown()
Remarque : le programme peut être interrompu en faisant Ctrl+C, ou en cliquant sur avec pyzo.
Analyse du programme :
Firmata + pyFirmata
Installation
Arduino
- Ouvrir l’IDE Arduino
- Ouvrir l’exemple : Fichier > Exemples > Firmata > StandardFirmata
- Connecter l’Arduino via le port USB
- Configurer le modèle de carte et le port série
- Téléverser le programme
Ordinateur
Depuis une fenêtre de commande (ou depuis pyzo), exécuter la commande
pip install pyFirmata
Erreurs fréquentes
serial.serialutil.SerialException: could not open port ‘COM5’: FileNotFoundError(2, ‘Le fichier spécifié est introuvable.’, None, 2)
Le port série n’a pas pu être ouvert
- Vérifier que l’Arduino est bien connecté sur le port spécifié
serial.serialutil.SerialException: could not open port ‘COM4’: PermissionError(13, ‘Accès refusé.’, None, 5)
Le port série n’a pas pu être ouvert
- Vérifier qu’un autre logiciel ne l’utilise pas (IDE Arduino par exemple)
- Débrancher puis rebrancher l’Arduino
- Ajouter le code suivant à la fin du programme Python :
xxx.exit() (pyFirmata) xxx.shutdown() (pymata4)
RuntimeError: Firmata Sketch Firmware Version Not Found
Erreur rencontrée avec pymata4 : ce n’est pas le bon firmware !
Installer le firmware compatible avec pymata4.
Activité Python+Arduino