Raspberry Pi e Arduino possono comunicare tra loro usando protocolli diversi, incluso Seriale (UART), I2C e SPI. Questa guida ti mostrerà come impostare la comunicazione tra un Raspberry Pi e un Arduino usando il Interfaccia seriale (UART), che è il metodo più comune e diretto.
Cosa avrai bisogno
- Raspberry Pi (Qualsiasi modello con supporto GPIO, ad esempio PI 3, PI 4)
- Arduino (ad esempio, uno, mega, nano)
- Cavo USB (per collegare l'Arduino al Raspberry Pi)
- Fili jumper (se si utilizza la comunicazione seriale GPIO)
- Python installato Sul Raspberry Pi
- Arduino ide installato su Raspberry Pi o un computer separato
Passaggio 1: collegamento dell'Arduino al Raspberry Pi
È possibile collegare il Raspberry Pi all'Arduino utilizzando USB o il Pin GPIO.
Metodo 1: connessione USB (consigliato)
- Collegare il Arduino al Raspberry Pi Usando un cavo USB.
- Raspberry Pi rileverà l'Arduino come dispositivo seriale (ad es.
/dev/ttyUSB0
O/dev/ttyACM0
).
Metodo 2: utilizzando i pin GPIO (seriale hardware)
- Collegare il Arduino TX (pin 1) A Raspberry Pi RX (GPIO 15, PIN 10).
- Collegare il Arduino RX (PIN 0) A Raspberry Pi TX (GPIO 14, PIN 8).
- Collegare GND a GND.
- Disabilita la console seriale integrata di Raspberry Pi:
sudo raspi-config
- Navigare a Opzioni di interfaccia> Porta seriale.
- Disabilita la shell di accesso su seriale ma abilita l'hardware della porta seriale.
- Riavvia il Raspberry Pi:
sudo reboot
Passaggio 2: installa le librerie richieste
Assicurati che il tuo Raspberry Pi abbia installati gli strumenti di comunicazione seriale necessari.
sudo apt update
sudo apt install python3-serial
Per controllare le porte seriali disponibili:
ls /dev/tty*
Per una connessione USB, cerca /dev/ttyUSB0
O /dev/ttyACM0
.
Passaggio 3: caricare uno schizzo Arduino
Per inviare i dati dall'Arduino a Raspberry Pi, carica questo semplice Arduino Sketch usando il Arduino ide.
void setup() {
Serial.begin(9600); // Start serial communication
}
void loop() {
Serial.println("Hello from Arduino!"); // Send message
delay(1000);
}
Passaggio 4: leggi i dati seriali su Raspberry Pi
Crea uno script Python su Raspberry Pi per leggere i dati da Arduino.
Esempio di codice Python
import serial
import time
# Open the serial port (Change ttyUSB0 if necessary)
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2) # Wait for connection
try:
while True:
if ser.in_waiting > 0:
data = ser.readline().decode('utf-8').strip()
print(f"Received: {data}")
except KeyboardInterrupt:
print("Exiting...")
ser.close()
- Assicurati che
/dev/ttyUSB0
corrisponde alla porta seriale rilevata. - Esegui lo script:
python3 serial_read.py
- Dovresti vedere "Ciao da Arduino!" stampato ogni secondo.
Passaggio 5: inviare dati da Raspberry Pi ad Arduino
Modificare il Codice Arduino Per ricevere dati dal Raspberry Pi:
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String received = Serial.readStringUntil('\\n');
Serial.print("Raspberry Pi Sent: ");
Serial.println(received);
}
}
Modificare il Codice Python Per inviare dati ad Arduino:
ser.write(b"Hello from Raspberry Pi!\\n")
- Ora, l'Arduino riceverà messaggi inviati da Raspberry Pi.
Metodi di comunicazione alternativi
-
Comunicazione i2c (per più Arduinos)
- Raspberry Pi agisce come Maestro, Arduino agisce come Schiavo.
- Abilita i2c:
sudo raspi-config
- Installa le librerie richieste:
sudo apt install python3-smbus i2c-tools
- Utilizzo
Wire.h
Sul lato Arduino per la comunicazione I2C.
-
Comunicazione SPI (per trasferimento di dati ad alta velocità)
- Richiede Arduino abilitato SPI E
SPI.h
biblioteca. - Più veloce di Uart e I2C ma richiede più cablaggio.
- Richiede Arduino abilitato SPI E
Risoluzione dei problemi
-
Arduino non rilevato su Raspberry Pi
- Correre
ls /dev/tty*
Per controllare i dispositivi seriali disponibili. - Assicurarsi che la porta seriale corretta sia specificata nello script Python.
- Correre
-
Autorizzazione negato Errore
- Aggiungi il tuo utente a
dialout
gruppo:sudo usermod -aG dialout $USER sudo reboot
- Aggiungi il tuo utente a
-
Caratteri della spazzatura in output
- Garantire Entrambi i dispositivi utilizzano lo stesso tasso di baud (per esempio.,
9600
). - Aggiungi un piccolo ritardo (
time.sleep(2)
) prima di leggere i dati in Python.
- Garantire Entrambi i dispositivi utilizzano lo stesso tasso di baud (per esempio.,
Conclusione
Seguendo questa guida, puoi stabilire comunicazione seriale tra un Arduino e un Raspberry Pi, permettendo loro di scambiare dati per Progetti IoT, integrazione dei sensori e sistemi di automazione. Sperimentare I2C e SPI Per applicazioni più avanzate!