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
- Raspberry Pi (Elk model met GPIO -ondersteuning, bijvoorbeeld PI 3, PI 4)
- Arduino (bijv. UNO, Mega, Nano)
- USB -kabel (voor het aansluiten van de Arduino met de Raspberry Pi)
- Jumper draden (Als u GPIO -seriële communicatie gebruikt)
- Python geïnstalleerd Op de Raspberry Pi
- 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)
- Verbind de Arduino naar de Raspberry Pi Een USB -kabel gebruiken.
- De Raspberry Pi zal de Arduino detecteren als een serieel apparaat (bijv.
/dev/ttyUSB0
of/dev/ttyACM0
).
Methode 2: GPIO -pinnen gebruiken (Hardware Serial)
- Verbind de Arduino TX (pin 1) naar Raspberry Pi Rx (GPIO 15, Pin 10).
- Verbind de Arduino RX (pin 0) naar Raspberry Pi TX (GPIO 14, Pin 8).
- Verbinden GND naar GND.
- 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
-
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.
-
SPI -communicatie (voor snelle gegevensoverdracht)
- Vereist Spi-Enabled Arduino En
SPI.h
bibliotheek. - Sneller dan uart en i2c maar vereist Meer bedrading.
- Vereist Spi-Enabled Arduino En
Problemen oplossen
-
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.
- Loop
-
Toestemming geweigerd fout
- Voeg uw gebruiker toe aan de
dialout
groep:sudo usermod -aG dialout $USER sudo reboot
- Voeg uw gebruiker toe aan de
-
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.
- Ervoor zorgen Beide apparaten gebruiken dezelfde baudrate (bijv.
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!