Raspberry Pi ve Arduino, farklı protokoller kullanarak birbirleriyle iletişim kurabilir, Seri (UART), I2C ve SPI. Bu kılavuz, bir Raspberry Pi ile bir Arduino arasında nasıl iletişim kuracağınızı gösterecektir. Seri Arayüz (UART), en yaygın ve açık yöntemdir.
Ne İhtiyacınız Olacak
- Ahududu pi (GPIO destekli herhangi bir model, örneğin Pi 3, Pi 4)
- Arduino (örneğin, UNO, Mega, Nano)
- USB kablosu (Arduino'yu Raspberry Pi'ye bağlamak için)
- Jumper telleri (GPIO seri iletişimini kullanıyorsanız)
- Python yüklü Raspberry Pi'de
- Arduino IDE Raspberry Pi veya ayrı bir bilgisayar üzerine kurulmuş
Adım 1: Arduino'yu Raspberry Pi'ye bağlamak
Raspberry Pi'yi Arduino'ya kullanarak bağlayabilirsiniz. USB veya Gpio pimleri.
Yöntem 1: USB bağlantısı (önerilir)
- Bağla Arduino Raspberry Pi'ye USB kablosu kullanarak.
- Raspberry Pi, Arduino'yu bir seri cihaz olarak algılayacaktır (örneğin,
/dev/ttyUSB0
veya/dev/ttyACM0
).
Yöntem 2: GPIO PINS kullanma (Donanım Seri)
- Bağla Arduino TX (pim 1) ile Raspberry Pi Rx (GPIO 15, Pin 10).
- Bağla Arduino RX (pim 0) ile Raspberry Pi TX (GPIO 14, PIN 8).
- Bağlamak GND - GND.
- Raspberry Pi’nin yerleşik seri konsolunu devre dışı bırakın:
sudo raspi-config
- Gezmek Arayüz Seçenekleri> Seri bağlantı noktası.
- Oturum açma kabuğunu seri üzerinden devre dışı bırakın, ancak seri bağlantı noktası donanımını etkinleştirin.
- Raspberry Pi'yi yeniden başlatın:
sudo reboot
2. Adım: Gerekli kütüphaneleri kurun
Raspberry Pi'nizin gerekli seri iletişim araçlarına sahip olduğundan emin olun.
sudo apt update
sudo apt install python3-serial
Mevcut seri bağlantı noktalarını kontrol etmek için:
ls /dev/tty*
Bir USB bağlantısı için /dev/ttyUSB0
veya /dev/ttyACM0
.
Adım 3: Bir Arduino Eskiz Yükle
Arduino'dan Raspberry Pi'ye veri göndermek için bu basit yükleyin Arduino eskiz kullanma Arduino IDE.
void setup() {
Serial.begin(9600); // Start serial communication
}
void loop() {
Serial.println("Hello from Arduino!"); // Send message
delay(1000);
}
Adım 4: Raspberry Pi'deki seri verileri okuyun
Arduino'dan verileri okumak için Raspberry Pi'de bir Python betiği oluşturun.
Python kodu örneği
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()
- Emin olmak
/dev/ttyUSB0
Tespit ettiğiniz seri bağlantı noktasına uygundur. - Komut dosyasını çalıştırın:
python3 serial_read.py
- Görmelisin "Arduino'dan merhaba!" her saniyede basılmış.
Adım 5: Raspberry Pi'den Arduino'ya veri gönderme
Değiştirmek Arduino Kodu Raspberry Pi'den veri almak için:
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String received = Serial.readStringUntil('\\n');
Serial.print("Raspberry Pi Sent: ");
Serial.println(received);
}
}
Değiştirmek Python kodu Arduino'ya veri göndermek için:
ser.write(b"Hello from Raspberry Pi!\\n")
- Şimdi, Arduino Raspberry Pi tarafından gönderilen mesajları alacak.
Alternatif iletişim yöntemleri
-
I2C İletişim (birden fazla arduino için)
- Raspberry Pi gibi davranıyor UstaArduino gibi davranıyor Köle.
- I2C'yi etkinleştir:
sudo raspi-config
- Gerekli kütüphaneleri yükleyin:
sudo apt install python3-smbus i2c-tools
- Kullanmak
Wire.h
I2C iletişimi için Arduino tarafında.
-
SPI İletişimi (yüksek hızlı veri aktarımı için)
- Gereklilikler SPI özellikli Arduino Ve
SPI.h
kütüphane. - Uart ve i2c'den daha hızlı ama gerektirir Daha Fazla Kablolama.
- Gereklilikler SPI özellikli Arduino Ve
Sorun giderme
-
Arduino Raspberry Pi'de tespit edilmedi
- Koşmak
ls /dev/tty*
Mevcut seri cihazları kontrol etmek için. - Python komut dosyasında doğru seri bağlantı noktasının belirtildiğinden emin olun.
- Koşmak
-
İzin reddedildi
- Kullanıcınızı ekleyin
dialout
Grup:sudo usermod -aG dialout $USER sudo reboot
- Kullanıcınızı ekleyin
-
Çıktıdaki çöp karakterleri
- Emin olmak Her iki cihaz da aynı baud hızını kullanır (örneğin,
9600
). - Küçük bir gecikme ekleyin (
time.sleep(2)
) Python'da veri okumadan önce.
- Emin olmak Her iki cihaz da aynı baud hızını kullanır (örneğin,
Çözüm
Bu kılavuzu izleyerek kurabilirsiniz seri iletişim Bir arduino ve bir Raspberry Pi arasında, IoT projeleri, sensör entegrasyonu ve otomasyon sistemleri. Denemek I2C ve SPI Daha gelişmiş uygulamalar için!