Outils pour utilisateurs

Outils du site


arduino:communication_entre_arduino_et_python_par_la_liaison_serie

Communication entre Arduino et Python par la liaison série


Objectif

L'objectif est de récupérer dans Python des mesures réalisées par un Arduino en utilisant la liaison série.

Le montage et le code Arduino

La photorésistance est connectée à une entrée analogique (A0) et nécessite un diviseur de tension réalisé avec une résistance de 1 KΩ (marron / noir / rouge).



Le code suivant permet d'afficher dans le moniteur série les valeurs lue sur la broche analogique A0.

void setup() {
    Serial.begin(9600);  // Initialise la communication avec l'ordinateur
}
 
void loop() { 
  int valeur = analogRead(A0);  // Mesure la tension sur la broche A0
  Serial.println(valeur);  // Affiche la mesure sur l'ordinateur
  delay(250);
}



Lecture des données envoyées sur le port série en Python

Avant de lire avec Python les données envoyées sur le port série, il faut fermer le moniteur série d'Arduino !

Pour lire sur le port série, il faut :

  • importer le module serial ;
  • initialiser la liaison série en précisant le nom du port utilisé et la vitesse de transmission ;
  • lire avec la fonction readline() ;
  • fermer le port série avec la fonction close().
import serial
port_serie = serial.Serial(port = "COM4", baudrate = 9600)
print(port_serie.readline())
port_serie.close()

Après l’exécution de ce code, la console Python pourrait afficher une chaine de caractères (byte) de la forme : b'795\r\n'

  • 795 : est la valeur (entre 0 et 1023) envoyer par l'Arduino ;
  • \n : indique un retour chariot ;
  • \r : indique un retour à la ligne (println).


Stocker les données envoyées par l'Arduino dans une liste

Les données envoyées par l’Arduino peuvent être stockées dans une liste :

import serial
port_serie = serial.Serial(port = "COM4", baudrate = 9600)
 
liste_mesures = []
 
for i in range(10):                           # pour lire les 10 premières lignes sur le port série
    mesure = port_serie.readline().split()    # la fonction split() décompose la chaîne de caractères est supprime '\r\n'
    liste_mesures.append(mesure)              # ajoute la valeur de "mesure" à la liste "liste_mesures"
 
port_serie.close()
print(liste_mesures)

ContactContact

arduino/communication_entre_arduino_et_python_par_la_liaison_serie.txt · Dernière modification: 23/12/2021 16:17 par Stéphane LAURENT