Raspberry Pi și Arduino pot comunica între ele folosind protocoale diferite, inclusiv Serial (uart), i2c și SPI. Acest ghid vă va arăta cum să configurați comunicarea între un Raspberry Pi și un Arduino folosind Interfață serială (UART), care este cea mai comună și mai simplă metodă.
Ce vei avea nevoie
- Zmeură pi (Orice model cu suport GPIO, de exemplu, PI 3, PI 4)
- Arduino (de exemplu, Uno, Mega, Nano)
- Cablu USB (pentru conectarea Arduino la Raspberry PI)
- Fire de jumper (Dacă utilizați comunicarea serială GPIO)
- Python instalat pe zmeură pi
- Arduino IDE instalat pe Raspberry Pi sau pe un computer separat
Pasul 1: Conectarea Arduino la Raspberry Pi
Puteți conecta Raspberry Pi la Arduino folosind USB sau Pinii GPIO.
Metoda 1: conexiune USB (recomandată)
- Conectați Arduino la zmeură pi folosind un cablu USB.
- Raspberry Pi va detecta Arduino ca dispozitiv serial (de exemplu,
/dev/ttyUSB0
sau/dev/ttyACM0
).
Metoda 2: Utilizarea pinilor GPIO (serial hardware)
- Conectați Arduino TX (pinul 1) la Raspberry Pi Rx (GPIO 15, PIN 10).
- Conectați Arduino rx (pin 0) la Raspberry Pi TX (GPIO 14, PIN 8).
- Conectați GND la GND.
- Dezactivați consola serială încorporată de Raspberry Pi:
sudo raspi-config
- Navigați la Opțiuni de interfață> port serial.
- Dezactivați shell -ul de autentificare peste serial, dar activați hardware -ul portului serial.
- Reporniți zmeura PI:
sudo reboot
Pasul 2: Instalați bibliotecile necesare
Asigurați -vă că Raspberry Pi are instalate instrumentele necesare de comunicare în serie.
sudo apt update
sudo apt install python3-serial
Pentru a verifica porturile seriale disponibile:
ls /dev/tty*
Pentru o conexiune USB, căutați /dev/ttyUSB0
sau /dev/ttyACM0
.
Pasul 3: Încărcați o schiță Arduino
Pentru a trimite date de la Arduino la Raspberry Pi, încărcați acest simplu simplu Schița Arduino folosind Arduino IDE.
void setup() {
Serial.begin(9600); // Start serial communication
}
void loop() {
Serial.println("Hello from Arduino!"); // Send message
delay(1000);
}
Pasul 4: Citiți date în serie pe Raspberry Pi
Creați un script Python pe Raspberry Pi pentru a citi datele din Arduino.
Exemplu de cod Python
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()
- Asigurați -vă că
/dev/ttyUSB0
se potrivește cu portul serial detectat. - Rulați scriptul:
python3 serial_read.py
- Ar trebui să vezi "Bună ziua de la Arduino!" tipărit în fiecare secundă.
Pasul 5: Trimiterea de date de la Raspberry Pi la Arduino
Modificați Cod Arduino Pentru a primi date de la 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);
}
}
Modificați Cod Python Pentru a trimite date către Arduino:
ser.write(b"Hello from Raspberry Pi!\\n")
- Acum, Arduino va primi mesaje trimise de Raspberry Pi.
Metode alternative de comunicare
-
Comunicare I2C (pentru multiple arduinos)
- Raspberry Pi acționează ca Maestru, Arduino acționează ca Sclav.
- Activați i2c:
sudo raspi-config
- Instalați bibliotecile necesare:
sudo apt install python3-smbus i2c-tools
- Utilizare
Wire.h
Pe partea Arduino pentru comunicarea I2C.
-
Comunicare SPI (pentru transfer de date de mare viteză)
- Necesită Arduino activat SP şi
SPI.h
bibliotecă. - Mai rapid decât UART și I2C, dar necesită Mai multe cabluri.
- Necesită Arduino activat SP şi
Depanare
-
Arduino nu a fost detectat pe Raspberry Pi
- Alerga
ls /dev/tty*
Pentru a verifica dispozitivele seriale disponibile. - Asigurați -vă că portul serial corect este specificat în scriptul Python.
- Alerga
-
Permisiunea de eroare refuzată
- Adăugați utilizatorul la
dialout
grup:sudo usermod -aG dialout $USER sudo reboot
- Adăugați utilizatorul la
-
Caracterele de gunoi în ieșire
- Asigura Ambele dispozitive folosesc aceeași rată de transfer (de exemplu,
9600
). - Adăugați o mică întârziere (
time.sleep(2)
) Înainte de a citi date în Python.
- Asigura Ambele dispozitive folosesc aceeași rată de transfer (de exemplu,
Concluzie
Urmând acest ghid, puteți stabili comunicare în serie între un Arduino și un PI de zmeură, permițându -le să facă schimb de date Proiecte IoT, integrare senzor și sisteme de automatizare. Experimentează cu I2C și SPI Pentru aplicații mai avansate!