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/ttyUSB0
Lub/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/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
-
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.
-
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.
- 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
dialout
grupa: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!