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.

  • Coté Arduino, il faut installer un programme (firmware) firmata
  • Coté ordinateur, on peut utiliser n’importe quel logiciel utilisant le protocole firmata.

Sites de référence :

Voici quelques modules Python permettant d’utiliser le protocole Firmata avec Python :

 

FirmataExpress + pymata4

Installation

Arduino

  • Ouvrir l’IDE Arduino
  • Installer les bibliothèques FirmataExpress et Ultrasonic : (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

 

Ordinateur

Depuis une fenêtre de commande (ou depuis pyzo), exécuter la commande

pip install pymata4

 

Programme de base

#!/usr/bin/env python
# -*- coding: utf-8 -*-

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.

 

Activité : buzzer
Câbler sur la platine de prototypage un buzzer et un potentiomètre (voir les potentiomètres)
 
Compléter le programme suivant (remplacer les ???????) pour que l’action sur le potentiomètre modifie la fréquence du Buzzer.
 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from pymata4 import pymata4
import time

# Objet représentant la carte Arduino
carte = pymata4.Pymata4()

# Constantes
DELAY = 0.01 # période de la boucle infinie (s)
OUT_PIN = 3
A_IN_PIN = 0

F_MINI = 50   # fréquence minimale (Hz)
F_MAXI = 3000 # fréquence maximale (Hz)

# Initialisation ....................................
carte.set_pin_mode_digital_output(OUT_PIN)
carte.set_pin_mode_analog_input(A_IN_PIN)


# Fonction de test
def loop():
    f = carte.analog_read(A_IN_PIN)[0]
    f = ?????????
    carte.play_tone_continuously(OUT_PIN, f)

    time.sleep(DELAY)

# Lancement du programme ............................
try:
    # Boucle infinie ................................
    while True:
        loop()
except KeyboardInterrupt:
    carte.play_tone_off(OUT_PIN)
    carte.shutdown()
    sys.exit(0)
finally:
    carte.shutdown()  

 

 

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.

 

 

 

Laisser un commentaire

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