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ć
- Raspberry Pi (Każdy model z obsługą GPIO, np. PI 3, PI 4)
- Arduino (np. Uno, Mega, Nano)
- Kabel USB (do podłączenia Arduino z Raspberry Pi)
- Przewody zworki (W przypadku korzystania z komunikacji szeregowej GPIO)
- Zainstalowany Python na Raspberry Pi
- 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)
- Podłącz Arduino do Raspberry Pi Za pomocą kabla USB.
- Raspberry Pi wykryje Arduino jako urządzenie szeregowe (np. /dev/ttyUSB0Lub/dev/ttyACM0).
Metoda 2: Za pomocą pinów GPIO (serial sprzętowy)
- Podłącz Arduino TX (pin 1) Do Raspberry Pi Rx (GPIO 15, PIN 10).
- Podłącz Arduino Rx (pin 0) Do Raspberry Pi TX (GPIO 14, PIN 8).
- Łączyć GND do GND.
- 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/ttyUSB0Dopasowuje 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
- 
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.hPo stronie Arduino w komunikacji I2C.
 
- 
Komunikacja SPI (W przypadku szybkiego przesyłania danych) - Wymaga Arduino z obsługi SPI I SPI.hbiblioteka.
- Szybciej niż UART i I2C, ale wymaga Więcej okablowania.
 
- Wymaga Arduino z obsługi SPI I 
Rozwiązywanie problemów
- 
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.
 
- Uruchomić 
- 
Zezwolenie odmówiono błędu - Dodaj swojego użytkownika do dialoutgrupa:sudo usermod -aG dialout $USER sudo reboot
 
- Dodaj swojego użytkownika do 
- 
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.
 
- Zapewnić Oba urządzenia używają tej samej stawki BAUD (np., 
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!
 
             
         
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
             
   
   
   
   
   
   
   
   
   
   
   
   
  