Arduino ve Raspberry Pi ile SPI iletişimi nasıl kullanılır

Seri periferik arayüz (SPI), öncelikle gömülü sistemlerde, kısa mesafeli iletişim için yaygın olarak kullanılan senkron bir seri iletişim protokolüdür. Arduino'nun çok yönlülüğünü SPI aracılığıyla Ahududu Pi'nin hesaplama gücüyle birleştirmek, çok sayıda proje olanakları açabilir. Bu blog yazısında, bir Arduino ve bir Raspberry Pi arasında SPI iletişiminin nasıl kurulacağını ve kullanılacağını keşfedeceğiz.

SPI'yı Anlamak

SPI, ana-köle modunda çalışan tam çift yönlü bir iletişim protokolüdür. Dört ana satır kullanır:

  • Mosi (köle dışarı ustalaşın): Verileri ustadan köle aktarır.
  • Miso (köle dışarıda usta): Verileri köleden ustaya aktarır.
  • SCLK (seri saat): Master tarafından oluşturulan veri iletimini senkronize eder.
  • SS/CS (Slave Select/Chip Select): Köle cihazını seçer.

SPI, sadeliği ve hızı ile tercih edilir, bu da cihazlar arasında hızlı veri alışverişi gerektiren uygulamalar için idealdir.

Neden Arduino ve Raspberry Pi ile SPI kullanıyorsunuz?

Bir Arduino'yu bir Raspberry Pi ile birleştirmek her iki platformun güçlü yönlerinden yararlanır. Arduino gerçek zamanlı, düşük seviyeli donanım kontrolünde mükemmelleşirken, Raspberry Pi yüksek seviyeli işleme özellikleri, ağ bağlantısı ve zengin bir işletim sistemi ortamı sunar. SPI kullanmak, bu iki cihazın verimli iletişim kurmasına izin vererek ev otomasyon sistemleri, robotik ve veri günlüğü uygulamaları gibi karmaşık projeleri mümkün kılar.

Donanımı Ayarlama

Bir Arduino ve bir Raspberry Pi arasında SPI iletişimi oluşturmak için aşağıdaki bileşenlere ihtiyacınız olacak:

  • Arduino Uno (veya herhangi bir uyumlu Arduino Kurulu)
  • Raspberry Pi (GPIO pimleri olan herhangi bir model)
  • Jumper telleri
  • Breadboard (isteğe bağlı)

SPI için Arduino ve Raspberry Pi'nin kablolanması

Uygun iletişimi sağlamak için dikkatli kablolama çok önemlidir. SPI kullanarak Arduino ve Raspberry Pi'yi nasıl bağlayacağınız aşağıda açıklanmıştır:

Raspberry Pi GPIO PIN Arduino pimi Tanım
GPIO10 (MOSI) Pim 11 (Mosi) Köle ustalaşmak
GPIO9 (MISO) Pim 12 (miso) Köle dışarıda usta
GPIO11 (SCLK) Pim 13 (SCLK) Seri saat
GPIO8 (CE0) Pim 10 (SS) Köle seç
Gnd Gnd Ortak
3.3v 5V Güç kaynağı (Gerekirse Seviye Değişimi Kullanın)

Not: Raspberry Pi 3.3V mantık seviyelerinde çalışırken, Arduino Uno 5V kullanıyor. Ahududu Pi'ye potansiyel hasarı önlemek için bir mantık seviyesi dönüştürücü kullanılması önerilir.

Arduino'yu yapılandırma

Arduino SPI köle cihazı olarak hareket edecek. Aşağıda ayarlamak için bir örnek arduino taslağı var:


// Arduino as SPI Slave

#include 

volatile byte receivedData = 0;

void setup() {
  // Initialize serial communication for debugging
  Serial.begin(9600);

  // Set MISO as output
  pinMode(MISO, OUTPUT);

  // Enable SPI in Slave Mode
  SPCR |= _BV(SPE);
  SPI.attachInterrupt();
}

ISR(SPI_STC_vect) {
  receivedData = SPDR;
}

void loop() {
  if (receivedData) {
    Serial.print("Received: ");
    Serial.println(receivedData);
    receivedData = 0;
  }
}

Açıklama:

  • Spi.attachInTRIPT (); Arduino'nun gelen verileri işlemesine izin vererek SPI kesintisini etkinleştirir.
  • Kesme hizmet rutininde ISR(SPI_STC_vect), alınan veriler işleme için saklanır.
  • . loop() İşlev alınan verileri kontrol eder ve seri monitöre yazdırır.

Raspberry Pi'yi yapılandırma

Raspberry Pi, SPI ana cihazı olarak hareket edecek. Python'u spidev SPI iletişimini işlemek için kütüphane. İlk olarak, SPI'nın etkin olduğundan emin olun:

  • Raspberry Pi yapılandırma aracını açın:
    sudo raspi-config
  • Gezmek Arayüz seçenekleri > SPI > Olanak vermek
  • İstenirse Raspberry Pi'yi yeniden başlatın.

Kurun spidev Kütüphane zaten yüklenmemişse:

sudo apt-get install python3-spidev

İşte Raspberry Pi için örnek bir Python betiği:

# Raspberry Pi as SPI Master

import spidev
import time

# Open SPI bus 0, device (CS) 0
spi = spidev.SpiDev()
spi.open(0, 0)

# Set SPI speed and mode
spi.max_speed_hz = 50000
spi.mode = 0

def send_data(data):
    """Send a single byte to the SPI slave"""
    response = spi.xfer2([data])
    return response

try:
    while True:
        data = 42  # Example data byte
        print(f"Sending: {data}")
        resp = send_data(data)
        print(f"Received: {resp[0]}")
        time.sleep(1)

except KeyboardInterrupt:
    spi.close()

Açıklama:

  • spi.open (0, 0) SPI Bus 0, Cihaz 0 (CE0) açar.
  • spi.xfer2 ([veri]) Veri baytını gönderir ve aynı anda köleden veri alır.
  • Komut dosyası her saniyede bir bayt (örn., 42) gönderir ve yanıtını Arduino'dan yazdırır.

İletişimi test etmek

Hem Arduino hem de Raspberry Pi'yi kurduktan sonra:

  1. Arduino eskizini Arduino kartına yükleyin.
  2. SPI kabloları aracılığıyla Arduino'yu Raspberry Pi'ye bağlayın.
  3. Raspberry Pi'de Python betiğini çalıştırın:
    python3 spi_master.py
  4. Alınan verileri görüntülemek için Arduino seri monitörünü açın:
    Tools > Serial Monitor

Raspberry Pi tarafından gönderilen verileri alıp seri monitörde görüntüleyen Arduino'nun görmelisiniz. Benzer şekilde, Raspberry Pi gönderdiği verileri ve aldığı yanıtı görüntüleyecektir.

Sorun Giderme İpuçları

  • Kabloları kontrol edin: Arduino ve Raspberry Pi arasındaki tüm bağlantıların güvenli ve doğru bir şekilde eşlendiğinden emin olun.
  • Voltaj seviyeleri: Raspberry Pi'nin 3.3V'si Arduino'nun 5V'si ile eşleşmesi için bir mantık seviyesi dönüştürücü kullanın.
  • SPI Etkinleştir: SPI'nin Raspberry Pi'de etkinleştirildiğini doğrulayın raspi-config.
  • İzinler: Kullanıcınızın SPI cihazlarına erişmek için gerekli izinlere sahip olduğundan emin olun. Python betiğinizi ile çalıştırmanız gerekebilir sudo.
  • BAUD ORAN: Seri monitör ve Arduino eskizinin aynı baud hızını kullandığından emin olun.
  • SPI ayarları: Hem master hem de köleyin aynı SPI modu ve hız ile yapılandırıldığından emin olun.

Çözüm

Bir Arduino ve Raspberry Pi arasındaki SPI iletişimi kullanmak, her iki platformun güçlü yönlerini etkili bir şekilde kullanmanıza olanak tanır. İster karmaşık bir robot sistemi oluşturun, ister bir sensör ağı geliştiriyor olun, ister veri günlüğünü denemek, SPI'yi anlamak paha biçilmezdir. Bu kılavuzda belirtilen adımları izleyerek, güvenilir SPI iletişimi kurabilir ve hem Arduino hem de Raspberry Pi'nin gücünden yararlanan heyecan verici gömülü projelere başlayabilirsiniz.

Mutlu Tinkering!

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.