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 :

Sites de référence :

 

 

FirmataExpress + pymata4

Installation

Arduino

  • Ouvrir l’IDE Arduino
  • Installer les bibliothèques FirmataExpress by Alan Yorinks et Ultrasonic by Erick Simöes : (voir installer une bibliothèque)
     
  • 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 :

Comment s’appelle l’objet « python » qui représente le microcontrôleur ?
×
Sur quel port numérique doit être connectée la LED à faire clignoter ?
×
Quelle est la période du clignotement de la LED ?
×
À quelle ligne la LED est-elle éteinte ?
×
Que faut-il faire à l’objet « python » représentant le microcontrôleur avant de terminer l’exécution du programme (nom de la méthode) ?
×

 

Activité : Buzzer

 

 

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

 

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *