Comunicare con un Arduino usando un Raspberry Pi

Communicating with an Arduino Using a Raspberry Pi

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

  1. Raspberry Pi (Qualsiasi modello con supporto GPIO, ad esempio PI 3, PI 4)
  2. Arduino (ad esempio, uno, mega, nano)
  3. Cavo USB (per collegare l'Arduino al Raspberry Pi)
  4. Fili jumper (se si utilizza la comunicazione seriale GPIO)
  5. Python installato Sul Raspberry Pi
  6. 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)

  1. Collegare il Arduino al Raspberry Pi Usando un cavo USB.
  2. Raspberry Pi rileverà l'Arduino come dispositivo seriale (ad es. /dev/ttyUSB0 O /dev/ttyACM0).

Metodo 2: utilizzando i pin GPIO (seriale hardware)

  1. Collegare il Arduino TX (pin 1) A Raspberry Pi RX (GPIO 15, PIN 10).
  2. Collegare il Arduino RX (PIN 0) A Raspberry Pi TX (GPIO 14, PIN 8).
  3. Collegare GND a GND.
  4. 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

  1. 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.
  2. 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.

Risoluzione dei problemi

  1. 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.
  2. Autorizzazione negato Errore

    • Aggiungi il tuo utente a dialout gruppo:
      sudo usermod -aG dialout $USER
      sudo reboot
      
  3. 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.

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!

Lascia un commento

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.