Raspberry Pi kullanarak bir Arduino ile iletişim kurmak

Communicating with an Arduino Using a Raspberry Pi

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

  1. Ahududu pi (GPIO destekli herhangi bir model, örneğin Pi 3, Pi 4)
  2. Arduino (örneğin, UNO, Mega, Nano)
  3. USB kablosu (Arduino'yu Raspberry Pi'ye bağlamak için)
  4. Jumper telleri (GPIO seri iletişimini kullanıyorsanız)
  5. Python yüklü Raspberry Pi'de
  6. 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)

  1. Bağla Arduino Raspberry Pi'ye USB kablosu kullanarak.
  2. 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)

  1. Bağla Arduino TX (pim 1) ile Raspberry Pi Rx (GPIO 15, Pin 10).
  2. Bağla Arduino RX (pim 0) ile Raspberry Pi TX (GPIO 14, PIN 8).
  3. Bağlamak GND - GND.
  4. 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

  1. 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.
  2. 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.

Sorun giderme

  1. 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.
  2. İzin reddedildi

    • Kullanıcınızı ekleyin dialout Grup:
      sudo usermod -aG dialout $USER
      sudo reboot
      
  3. Çı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.

Çö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!

Yorum bırak

Notice an Issue? Have a Suggestion?
If you encounter a problem or have an idea for a new feature, let us know! Report a problem or request a feature here.