Kommunikerar med en arduino med en Raspberry Pi

Communicating with an Arduino Using a Raspberry Pi

Raspberry Pi och Arduino kan kommunicera med varandra med olika protokoll, inklusive Serie (uart), i2c och spi. Den här guiden visar hur du ställer in kommunikation mellan en Raspberry Pi och en Arduino med hjälp av Seriellt gränssnitt (UART), som är den vanligaste och enkla metoden.


Vad du behöver

  1. Hallon (Varje modell med GPIO -stöd, t.ex. PI 3, PI 4)
  2. Arduino (t.ex. Uno, Mega, Nano)
  3. USB -kabel (för att ansluta Arduino till Raspberry Pi)
  4. Bulttrådar (Om du använder GPIO Serial Communication)
  5. Python installerad på Raspberry Pi
  6. Arduino IDE installerat på Raspberry Pi eller en separat dator

Steg 1: Ansluta Arduino till Raspberry Pi

Du kan ansluta Raspberry Pi till Arduino med USB eller Gpio stift.

Metod 1: USB -anslutning (rekommenderas)

  1. Ansluta Arduino till Raspberry Pi Använda en USB -kabel.
  2. Raspberry Pi kommer att upptäcka Arduino som en serieanordning (t.ex. /dev/ttyUSB0 eller /dev/ttyACM0).

Metod 2: Använda GPIO -stift (hårdvaruerserien)

  1. Ansluta Arduino TX (stift 1) till Raspberry Pi RX (GPIO 15, stift 10).
  2. Ansluta Arduino Rx (stift 0) till Raspberry Pi TX (GPIO 14, stift 8).
  3. Ansluta GND till GND.
  4. Inaktivera Raspberry Pis inbyggda seriekonsol:
    sudo raspi-config
    
    • Navigera till Gränssnittsalternativ> Seriell port.
    • Inaktivera inloggningsskalet över serien men aktivera den seriella porthårdvaran.
    • Starta om Raspberry Pi:
      sudo reboot
      

Steg 2: Installera obligatoriska bibliotek

Se till att din Raspberry Pi har de nödvändiga seriekommunikationsverktygen installerade.

sudo apt update
sudo apt install python3-serial

För att kontrollera tillgängliga seriella portar:

ls /dev/tty*

För en USB -anslutning, leta efter /dev/ttyUSB0 eller /dev/ttyACM0.


Steg 3: Ladda upp en Arduino -skiss

För att skicka data från Arduino till Raspberry Pi, ladda upp detta enkla Arduinoskiss med hjälp av Arduino IDE.

void setup() {
  Serial.begin(9600); // Start serial communication
}

void loop() {
  Serial.println("Hello from Arduino!"); // Send message
  delay(1000);
}

Steg 4: Läs seriedata på Raspberry Pi

Skapa ett Python -skript på Raspberry Pi för att läsa data från Arduino.

Python -kodexempel

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()
  • Se till att /dev/ttyUSB0 Matchar din upptäckta seriella port.
  • Kör skriptet:
    python3 serial_read.py
    
  • Du borde se "Hej från Arduino!" tryckt varje sekund.

Steg 5: Skicka data från Raspberry Pi till Arduino

Modifiera den Arduinokod För att ta emot data från 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);
  }
}

Modifiera den Pytonkod För att skicka data till Arduino:

ser.write(b"Hello from Raspberry Pi!\\n")
  • Nu kommer Arduino att ta emot meddelanden som skickas av Raspberry Pi.

Alternativa kommunikationsmetoder

  1. I2C -kommunikation (för flera arduinos)

    • Raspberry Pi fungerar som Bemästra, Arduino fungerar som Slav.
    • Aktivera i2c:
      sudo raspi-config
      
    • Installera obligatoriska bibliotek:
      sudo apt install python3-smbus i2c-tools
      
    • Använda Wire.h På Arduino -sidan för I2C -kommunikation.
  2. SPI -kommunikation (för höghastighetsdataöverföring)

    • Kräva Spi-aktiverad arduino och SPI.h bibliotek.
    • Snabbare än uart och i2c men kräver mer ledningar.

Felsökning

  1. Arduino upptäcks inte på Raspberry Pi

    • Sikt ls /dev/tty* För att kontrollera tillgängliga seriella enheter.
    • Se till att rätt seriell port anges i Python -skriptet.
  2. Tillstånd nekad fel

    • Lägg till din användare till dialout grupp:
      sudo usermod -aG dialout $USER
      sudo reboot
      
  3. Skräpkaraktärer i produktion

    • Säkerställa Båda enheterna använder samma baudhastighet (till exempel., 9600).
    • Lägg till en liten försening (time.sleep(2)) innan du läser data i Python.

Slutsats

Genom att följa den här guiden kan du etablera seriekommunikation mellan en Arduino och en Raspberry Pi, vilket gör att de kan utbyta data för IoT -projekt, sensorintegration och automatiseringssystem. Experimentera med I2C och SPI För mer avancerade applikationer!

Lämna en kommentar

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.