raspberry-pi-con-arduino-tramite-cavo-usb

Ci sono tanti modi per connettere il Raspberry Pi con l’Arduino, come usare i pin GPIO e i pin seriali, rispettivamente del raspberry pi e dell’arduino, ed effettuare una comunicazione usando I2C. Ma questa che presenteremo in realtà è il modo più facile che ci possa essere, usando una semplice connessione seriale, con il cavo usato per collegare solitamente l’arduino al PC. Solo che questa volta, chiaramente, lo colleghiamo ad un’uscita USB del Raspberry Pi.

Per dimostrarne il funzionamento realizziamo due progetti, uno per i dati che fluiscono dall’arduino al raspberry pi, l’altro per i dati che fluiscono nella direzione opposta. Assicuriamoci prima d’iniziare, d’aver installato pySerial sull’RPi, in modo da poter leggere e scrivere sulla porta seriale con Python. Non è la prima volta che ne parliamo su questo blog.

Per un’installazione rapida di PySerial è sufficiente eseguire questi comandi da terminale, nella sequenza mostrata:

sudo apt-get update
sudo apt-get upgrade
sudo apt-get install python-serial

Arduino comunica con Raspberry Pi in Seriale

In questo codice facciamo in modo che l’Arduino invii in seriale la stringa “Ciao Pi” ogni 2 secondi.

void setup(){
  Serial.begin(9600);
}
 
void loop(){
  Serial.println("Ciao Pi");
  delay(2000);
}

A questo punto, avviate la console dell’interprete python (versione 2, non 3) e digitate dopo >>> questo:

import serial
ser = serial.Serial('/dev/ttyACM0', 9600)

Il primo argomento è il nome dell’interfaccia USB usata. Per trovare con precisione il nome della porta usata, possiamo eseguire questo comando, senza prima aver collegato l’arduino:

ls /dev/tty*

dopo collegate l’arduino, eseguite nuovamente il comando, e se appare un nuovo nome, quello sarà il nome della porta.

Il secondo argomento, “9600”, è il baud rate, e deve coincidere con quello settato nello sketch caricato sull’arduino.

Ora, possiamo configurare un piccolo script per restare in ascolto e stampare i messaggi che arrivano dall’arduino:

while 1:
  ser.readline()

In questo modo appariranno ogni 2 secondi i messaggi “Ciao Pi”, sarà sufficiente schiacciare Ctrl + C per interrompere l’esecuzione dello script Python.

Raspberry Pi comunica con Arduino in Seriale

In quest’altro esempio, il RPi invia in seriale un numero verso l’arduino, che accenderà un led corrispondente.

const int ledPin = 12;
 
void setup(){
  pinMode(ledPin, OUTPUT);
  Serial.begin(9600);
}
 
void loop(){
  if (Serial.available())  {
     light(Serial.read() - '0');
  }
  delay(500);
}
 
void light(int n){
  for (int i = 0; i < n; i++)  {
    digitalWrite(ledPin, HIGH);
    delay(100);
    digitalWrite(ledPin, LOW);
    delay(100);
  }
}

Invece sul raspberry da console python (o da script, come preferite), è sufficiente digitare:

ser.write('3')

A questo punto vedrete il led sull’arduino accendersi 3 volte.

Questo è solo un esempio banale, ma è uno spiraglio verso altri infiniti utilizzi, per esempio potete controllare con il Raspberry Pi, tramite l’arduino, dei motori, dei relè, degli attuatori, solenoidi, servi o persino un LCD.