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:
- Töltse fel az Arduino vázlatot az Arduino testületbe.
- Csatlakoztassa az Arduino -t a Raspberry Pi -hez az SPI vezetékkel.
- Futtassa a Python szkriptet a Raspberry Pi -en:
python3 spi_master.py
- 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!