Hogyan kell használni az SPI kommunikációt az Arduino -val és a Raspberry Pi -vel

A soros perifériás interfész (SPI) egy szinkron soros kommunikációs protokoll, amelyet széles körben használnak a rövid távú kommunikációhoz, elsősorban a beágyazott rendszerekben. Az Arduino sokoldalúságának és a Raspberry Pi SPI számítási erejének kombinálása rengeteg projekt lehetőségét nyithatja meg. Ebben a blogbejegyzésben megvizsgáljuk, hogyan lehet felállítani és használni az SPI kommunikációt egy Arduino és a Raspberry Pi között.

Az SPI megértése

Az SPI egy teljes duplex kommunikációs protokoll, amely mester-rabszolga módban működik. Négy fővonalat használ:

  • Mosi (Mester Out rabszolga): Az adatokat a mesterről rabszolgara továbbítja.
  • Miso (Mester rabszolga ki): Átadja az adatokat a rabszolgaról a mesterre.
  • SCLK (soros óra): Szinkronizálja a mester által generált adatátvitelt.
  • SS/CS (Slave Select/Chip Select): Kiválasztja a rabszolga eszközt.

Az SPI kedveli az egyszerűségét és a sebességét, így ideális az alkalmazásokhoz, amelyek gyors adatcserét igényelnek az eszközök között.

Miért használja az SPI -t az Arduino -val és a Raspberry Pi -vel?

Az Arduino és a Raspberry Pi kombinálása mindkét platform erősségeit kihasználja. Az Arduino valós idejű, alacsony szintű hardvervezérlésen kiemelkedik, míg a Raspberry Pi magas szintű feldolgozási képességeket, hálózati kapcsolatot és gazdag operációs rendszer környezetet kínál. Az SPI használata lehetővé teszi, hogy ez a két eszköz hatékonyan kommunikáljon, lehetővé téve olyan összetett projekteket, mint az otthoni automatizálási rendszerek, a robotika és az adatnaplózási alkalmazások.

A hardver beállítása

Az SPI kommunikáció létrehozásához az Arduino és a Raspberry Pi között a következő összetevőkre lesz szükség:

  • Arduino UNO (vagy bármilyen kompatibilis Arduino Board)
  • Raspberry Pi (bármilyen modell GPIO -csapokkal)
  • Jumper vezetékek
  • Kenyérlemez (opcionális)

Az Arduino és a Raspberry Pi vezetéke az SPI -hez

A gondos huzalozás elengedhetetlen a megfelelő kommunikáció biztosítása érdekében. Így lehet csatlakoztatni az Arduino és a Raspberry Pi -t az SPI használatával:

Raspberry Pi GPIO PIN Arduino Pin Leírás
GPIO10 (MOSI) 11. érintkező (MOSI) Mestere a rabszolgát
GPIO9 (MISO) 12. érintkező (MISO) Mester rabszolga ki
GPIO11 (SCLK) 13. érintkező (SCLK) Soros óra
GPIO8 (CE0) 10. érintkező (SS) Slave Select
GND GND Közös alap
3.3 V -os 5 V -os Tápegység (szükség esetén használjon szintváltást)

Jegyzet: A Raspberry Pi 3,3 V logikai szinten működik, míg az Arduino UNO 5 V -t használ. Javasoljuk, hogy logikai szintű konvertert használjon a Raspberry PI esetleges károsodásainak megakadályozására.

Az Arduino konfigurálása

Az Arduino SPI rabszolga eszközként fog működni. Az alábbiakban egy Arduino vázlat egy minta beállítása:


// 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;
  }
}

Magyarázat:

  • Spi.attachinterrupt (); Engedélyezi az SPI megszakítást, lehetővé téve az Arduino számára a bejövő adatok kezelését.
  • A megszakítás szolgáltatási rutinjában ISR(SPI_STC_vect), a vett adatokat feldolgozásra tárolják.
  • A loop() A fogadott adatok funkcióellenőrzése, és kinyomtatja a soros monitorra.

A Raspberry PI konfigurálása

A Raspberry Pi az SPI Master eszközként fog működni. A Python -ot használjuk a spidev Könyvtár az SPI kommunikáció kezelésére. Először győződjön meg arról, hogy az SPI engedélyezve van:

  • Nyissa meg a Raspberry PI konfigurációs eszközt:
    sudo raspi-config
  • Navigál Interfész beállítások > Spi > Engedélyez
  • Indítsa újra a Raspberry Pi -t, ha a rendszer kéri.

Szerelje be a spidev Könyvtár, ha még nincs telepítve:

sudo apt-get install python3-spidev

Itt van egy minta python szkript a Raspberry Pi -hez:

# 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()

Magyarázat:

  • spi.open (0, 0) megnyitja az SPI busz 0 -t, a 0. eszköz (CE0).
  • spi.xfer2 ([adatok]) Elküldi az adatbájtot, és egyidejűleg fogadja az adatokat a rabszolgától.
  • A szkript minden másodpercenként bájtot (például 42) küld, és kinyomtatja a választ az Arduino -ból.

A kommunikáció tesztelése

Az Arduino és a Raspberry Pi beállítása után:

  1. Töltse fel az Arduino vázlatot az Arduino testületbe.
  2. Csatlakoztassa az Arduino -t a Raspberry Pi -hez az SPI vezetékkel.
  3. Futtassa a Python szkriptet a Raspberry Pi -en:
    python3 spi_master.py
  4. Nyissa meg az Arduino soros monitorot a kapott adatok megtekintéséhez:
    Tools > Serial Monitor

Látnia kell, hogy az Arduino megkapja a Raspberry Pi által küldött adatokat, és megjelenítse azt a soros monitorban. Hasonlóképpen, a Raspberry Pi megjeleníti az általa küldött adatokat és a kapott választ.

Hibaelhárítási tippek

  • Ellenőrizze a vezetékeket: Győződjön meg arról, hogy az Arduino és a Raspberry Pi közötti összes kapcsolat biztonságos és helyesen leképezve van.
  • Feszültségszint: Használjon egy logikai szintű konvertert a Raspberry Pi 3,3 V -os hozzáigazításához az Arduino 5 V -val.
  • Engedélyezze az SPI -t: Ellenőrizze, hogy az SPI engedélyezve van -e a Raspberry PI -n raspi-config.
  • Engedélyek: Győződjön meg arról, hogy a felhasználó rendelkezik az SPI -eszközökhöz való hozzáféréshez szükséges engedélyekkel. Lehet, hogy futtatnia kell a Python szkriptet sudo.
  • Baud ráta: Győződjön meg arról, hogy a soros monitor és az Arduino vázlat ugyanazt az adatátviteli sebességet használja.
  • SPI beállítások: Győződjön meg arról, hogy mind a mester, mind a rabszolga ugyanolyan SPI móddal és sebességgel van konfigurálva.

Következtetés

Az SPI kommunikáció használata az Arduino és a Raspberry Pi között lehetővé teszi, hogy hatékonyan kihasználja mindkét platform erősségeit. Függetlenül attól, hogy összetett robotikai rendszert épít, érzékelőhálózatot fejleszt, vagy az adatnaplózással kísérletez, az SPI megértése felbecsülhetetlen értékű. Az útmutatóban vázolt lépések betartásával megbízható SPI -kommunikációt állíthat be, és izgalmas beágyazott projekteket kezdhet, amelyek kihasználják mind az Arduino, mind a Raspberry Pi erejét.

Boldog bántalmazást!

Hagyj egy megjegyzést

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.