Komunikowanie się z Arduino za pomocą Raspberry Pi

Communicating with an Arduino Using a Raspberry Pi

Raspberry Pi i Arduino mogą się ze sobą komunikować za pomocą różnych protokołów, w tym Serial (UART), I2C i SPI. Ten przewodnik pokaże, jak skonfigurować komunikację między Raspberry Pi a Arduino za pomocą Interfejs szeregowy (UART), która jest najczęstszą i najwygodniejszą metodą.


Czego będziesz potrzebować

  1. Raspberry Pi (Każdy model z obsługą GPIO, np. PI 3, PI 4)
  2. Arduino (np. Uno, Mega, Nano)
  3. Kabel USB (do podłączenia Arduino z Raspberry Pi)
  4. Przewody zworki (W przypadku korzystania z komunikacji szeregowej GPIO)
  5. Zainstalowany Python na Raspberry Pi
  6. Arduino Ide zainstalowane na Raspberry Pi lub na oddzielnym komputerze

Krok 1: Podłączenie Arduino z Raspberry Pi

Możesz podłączyć Raspberry Pi z Arduino za pomocą USB lub Piny GPIO.

Metoda 1: Połączenie USB (zalecane)

  1. Podłącz Arduino do Raspberry Pi Za pomocą kabla USB.
  2. Raspberry Pi wykryje Arduino jako urządzenie szeregowe (np. /dev/ttyUSB0 Lub /dev/ttyACM0).

Metoda 2: Za pomocą pinów GPIO (serial sprzętowy)

  1. Podłącz Arduino TX (pin 1) Do Raspberry Pi Rx (GPIO 15, PIN 10).
  2. Podłącz Arduino Rx (pin 0) Do Raspberry Pi TX (GPIO 14, PIN 8).
  3. Łączyć GND do GND.
  4. Wyłącz wbudowaną konsolę seryjną Raspberry Pi:
    sudo raspi-config
    
    • Przejść do Opcje interfejsu> port szeregowy.
    • Wyłącz powłokę logowania nad serialem, ale włącz sprzęt portu szeregowego.
    • Uruchom ponownie Raspberry Pi:
      sudo reboot
      

Krok 2: Zainstaluj wymagane biblioteki

Upewnij się, że Raspberry Pi ma zainstalowane niezbędne narzędzia komunikacji szeregowej.

sudo apt update
sudo apt install python3-serial

Aby sprawdzić dostępne porty szeregowe:

ls /dev/tty*

Aby uzyskać połączenie USB, poszukaj /dev/ttyUSB0 Lub /dev/ttyACM0.


Krok 3: Prześlij szkic Arduino

Aby wysłać dane z Arduino do Raspberry Pi, prześlij ten prosty Szkic Arduino za pomocą Arduino Ide.

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

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

Krok 4: Przeczytaj dane szeregowe na Raspberry Pi

Utwórz skrypt Python na Raspberry Pi, aby odczytać dane z Arduino.

Przykład kodu Pythona

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()
  • Upewnij się /dev/ttyUSB0 Dopasowuje wykryty port szeregowy.
  • Uruchom skrypt:
    python3 serial_read.py
    
  • Powinieneś zobaczyć „Witaj z Arduino!” wydrukowane co sekundę.

Krok 5: Wysyłanie danych z Raspberry Pi do Arduino

Zmodyfikuj Kod Arduino Aby otrzymywać dane z 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);
  }
}

Zmodyfikuj Kod Pythona Aby wysłać dane do Arduino:

ser.write(b"Hello from Raspberry Pi!\\n")
  • Teraz Arduino odbędzie wiadomości wysyłane przez Raspberry Pi.

Alternatywne metody komunikacji

  1. Komunikacja I2C (dla wielu Arduinos)

    • Raspberry Pi działa jak Gospodarz, Arduino działa jak Niewolnik.
    • Włącz I2C:
      sudo raspi-config
      
    • Zainstaluj wymagane biblioteki:
      sudo apt install python3-smbus i2c-tools
      
    • Używać Wire.h Po stronie Arduino w komunikacji I2C.
  2. Komunikacja SPI (W przypadku szybkiego przesyłania danych)

    • Wymaga Arduino z obsługi SPI I SPI.h biblioteka.
    • Szybciej niż UART i I2C, ale wymaga Więcej okablowania.

Rozwiązywanie problemów

  1. Arduino nie wykryte na Raspberry Pi

    • Uruchomić ls /dev/tty* Aby sprawdzić dostępne urządzenia szeregowe.
    • Upewnij się, że prawidłowy port szeregowy jest określony w skrypcie Python.
  2. Zezwolenie odmówiono błędu

    • Dodaj swojego użytkownika do dialout grupa:
      sudo usermod -aG dialout $USER
      sudo reboot
      
  3. Znaki śmieci w wyjściu

    • Zapewnić Oba urządzenia używają tej samej stawki BAUD (np., 9600).
    • Dodaj niewielkie opóźnienie (time.sleep(2)) Przed przeczytaniem danych w Pythonie.

Wniosek

Postępując zgodnie z tym przewodnikiem, możesz ustalić Komunikacja szeregowa między Arduino a Raspberry Pi, umożliwiając im wymianę danych na Projekty IoT, integracja czujników i systemy automatyzacji. Eksperymentuj z I2C i SPI Aby uzyskać bardziej zaawansowane aplikacje!

Zostaw komentarz

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.