Communiceren met een Arduino met behulp van een Raspberry Pi

Communicating with an Arduino Using a Raspberry Pi

De Raspberry Pi en Arduino kunnen met elkaar communiceren met behulp van verschillende protocollen, waaronder Serieel (UART), I2C en SPI. Deze gids laat je zien hoe je communicatie kunt instellen tussen een Raspberry Pi en een Arduino met behulp van de Seriële interface (UART), wat de meest voorkomende en eenvoudige methode is.


Wat u nodig hebt

  1. Raspberry Pi (Elk model met GPIO -ondersteuning, bijvoorbeeld PI 3, PI 4)
  2. Arduino (bijv. UNO, Mega, Nano)
  3. USB -kabel (voor het aansluiten van de Arduino met de Raspberry Pi)
  4. Jumper draden (Als u GPIO -seriële communicatie gebruikt)
  5. Python geïnstalleerd Op de Raspberry Pi
  6. Arduino IDE geïnstalleerd op de Raspberry Pi of een aparte computer

Stap 1: De Arduino verbinden met de Raspberry Pi

U kunt de Raspberry Pi verbinden met de Arduino met behulp van USB of de GPIO -pinnen.

Methode 1: USB -verbinding (aanbevolen)

  1. Verbind de Arduino naar de Raspberry Pi Een USB -kabel gebruiken.
  2. De Raspberry Pi zal de Arduino detecteren als een serieel apparaat (bijv. /dev/ttyUSB0 of /dev/ttyACM0).

Methode 2: GPIO -pinnen gebruiken (Hardware Serial)

  1. Verbind de Arduino TX (pin 1) naar Raspberry Pi Rx (GPIO 15, Pin 10).
  2. Verbind de Arduino RX (pin 0) naar Raspberry Pi TX (GPIO 14, Pin 8).
  3. Verbinden GND naar GND.
  4. Schakel de ingebouwde seriële console van de Raspberry Pi uit:
    sudo raspi-config
    
    • Navigeren naar Interface -opties> seriële poort.
    • Schakel de inlogschaal uit via serie, maar schakel de seriële poorthardware in.
    • Start de Raspberry Pi opnieuw op:
      sudo reboot
      

Stap 2: Installeer de vereiste bibliotheken

Zorg ervoor dat uw Raspberry Pi de benodigde seriële communicatiehulpmiddelen heeft geïnstalleerd.

sudo apt update
sudo apt install python3-serial

Om beschikbare seriële poorten te controleren:

ls /dev/tty*

Zoek naar voor een USB -verbinding /dev/ttyUSB0 of /dev/ttyACM0.


Stap 3: Upload een Arduino -schets

Upload dit eenvoudig om gegevens van de Arduino naar de Raspberry Pi te verzenden Arduino -schets gebruik van de Arduino IDE.

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

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

Stap 4: Lees seriële gegevens over de Raspberry Pi

Maak een Python -script op de Raspberry Pi om de gegevens van de Arduino te lezen.

Python Code Voorbeeld

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()
  • Zorg ervoor dat /dev/ttyUSB0 komt overeen met uw gedetecteerde seriële poort.
  • Voer het script uit:
    python3 serial_read.py
    
  • Je zou moeten zien "Hallo van Arduino!" elke seconde afgedrukt.

Stap 5: Gegevens verzenden van de Raspberry Pi naar Arduino

Wijzigen de Arduino -code om gegevens van de Raspberry Pi te ontvangen:

void setup() {
  Serial.begin(9600);
}

void loop() {
  if (Serial.available() > 0) {
    String received = Serial.readStringUntil('\\n');
    Serial.print("Raspberry Pi Sent: ");
    Serial.println(received);
  }
}

Wijzigen de Python -code Om gegevens naar de Arduino te verzenden:

ser.write(b"Hello from Raspberry Pi!\\n")
  • Nu ontvangt de Arduino berichten verzonden door de Raspberry Pi.

Alternatieve communicatiemethoden

  1. I2C -communicatie (voor meerdere Arduinos)

    • Raspberry Pi handelt als Meester, Arduino handelt als Slaaf.
    • Schakel I2C in:
      sudo raspi-config
      
    • Installeer vereiste bibliotheken:
      sudo apt install python3-smbus i2c-tools
      
    • Gebruik Wire.h aan de Arduino -kant voor I2C -communicatie.
  2. SPI -communicatie (voor snelle gegevensoverdracht)

    • Vereist Spi-Enabled Arduino En SPI.h bibliotheek.
    • Sneller dan uart en i2c maar vereist Meer bedrading.

Problemen oplossen

  1. Arduino is niet gedetecteerd op Raspberry Pi

    • Loop ls /dev/tty* om beschikbare seriële apparaten te controleren.
    • Zorg ervoor dat de juiste seriële poort is opgegeven in het Python -script.
  2. Toestemming geweigerd fout

    • Voeg uw gebruiker toe aan de dialout groep:
      sudo usermod -aG dialout $USER
      sudo reboot
      
  3. Garbage -tekens in uitvoer

    • Ervoor zorgen Beide apparaten gebruiken dezelfde baudrate (bijv. 9600).
    • Voeg een kleine vertraging toe (time.sleep(2)) Voordat u gegevens in Python leest.

Conclusie

Door deze gids te volgen, kunt u zich vestigen seriële communicatie tussen een Arduino en een Raspberry Pi, waardoor ze gegevens kunnen uitwisselen voor IoT -projecten, sensorintegratie en automatiseringssystemen. Experimenteren met I2c en spi Voor meer geavanceerde applicaties!

Laat een reactie achter

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.