Comandare Arduino con Python

In questo articolo vi farò vedere molto semplicemente come comandare Arduino usando un linguaggio di programmazione molto semplice e versatile, cioè il Python.

Per coloro che non conosco il Python consiglio di consultare delle guide online come quella su html.it in modo da capirne meglio il funzionamento.

La comunicazione tra Arduino e Python avviene tramite seriale quindi per poter comunicare correttamente avremo bisogno di scaricare una libreria particolare: Pyserial. Potete trovarla su questo LINK.

Cosa ci serve:

  • Arduino (Qualsiasi versione va bene)
  • Python installato sul PC LINK (Consiglio di usare Linux, Windows a volte crea dei problemi di comunicazione)
  • Pyserial

Una volta installato Python e la libreria Pyserial possiamo passare alla programmazione. Di seguito vi illustro alcuni esempi.

Esempio

Incominciamo con caricare questo sketch sulla nostra board Arduino:

#define LED 13

void setup() {
  pinMode(LED, OUTPUT);
  Serial.begin(9600);
}

void loop() {
  if (Serial.available()) {
    char c = Serial.read();
    if (c == 'H') {
      digitalWrite(LED, HIGH);
    }
    else if (c == 'L') {
      digitalWrite(LED, LOW);
    }
  }
}

Quello che faremo sarà accendere e spegnere un LED sul pin 13. L’operazione è molto semplice, ma se possiamo accendere un LED possiamo fare tutto. lo sketch si spiega da solo: il LED 13 viene impostato in modalità output e viene acceso se riceve il carattere H o spento se riceve il carattere L.

Ora passiamo al programma scritto in Python (Python 2.x):

import serial
import time
arduino = serial.Serial('/dev/ttyACM0',9600)
time.sleep(1)

while(True): 
    val = raw_input("Inserisci carattere: ") 
    if val=="H": 
        arduino.write("H")
        print("LED acceso")
    if val=="L": 
        arduino.write("L")
        print("LED spento")
    if val!="H" and val!="L": 
        print("Carattere non valido")

arduino.close()

Python (Python 3.x):

import serial
import time
arduino = serial.Serial('/dev/ttyACM0',9600)
time.sleep(1)

while(True): 
    val = input("Inserisci carattere: ") 
    if val=="H": 
        arduino.write("H")
        print("LED acceso")
    if val=="L": 
        arduino.write("L")
        print("LED spento")
    if val!="H" and val!="L": 
        print("Carattere non valido")

arduino.close()

riga 1 e 2: vengono richiamate le librerie serial (per la comunicazione seriale) e time (per il tempo).

riga 3: Python apre un collegamento con la porta seriale /dev/ttyACM0 (Linux). Ovviamente controllate che la porta seriale sia quella corretta dall’Arduino IDE in Strumenti->Porta Seriale.

Se siete sotto Windows il codice va modificato leggermente. Il collegamento deve essere specificato nel seguente modo, dove COM3  è il nome della porta alla quale è collegato Arduino:

arduino = serial.Serial('COM3',9600)

riga 4: impostiamo un ritardo di 1 secondo.

riga 6: loop infinito.

riga 7 a 15: chiede in input un carattere da inserire se sarà uguale a H invierà il carattere H ad arduino, se invece sarà uguale a L invierà il carattere L.

riga 17: chiude la comunicazione con arduino.

 Video dimostrativo: