Ang serial peripheral interface (SPI) ay isang kasabay na serial na protocol ng komunikasyon na malawakang ginagamit para sa komunikasyon na maikli, lalo na sa mga naka-embed na system. Ang pagsasama -sama ng maraming kakayahan ng Arduino na may computational power ng Raspberry Pi sa pamamagitan ng SPI ay maaaring magbukas ng isang kalakal ng mga posibilidad ng proyekto. Sa post na ito ng blog, galugarin namin kung paano mag -set up at gumamit ng komunikasyon ng SPI sa pagitan ng isang Arduino at isang Raspberry Pi.
Pag -unawa sa SPI
Ang SPI ay isang full-duplex na protocol ng komunikasyon na nagpapatakbo sa Master-Slave Mode. Gumagamit ito ng apat na pangunahing linya:
- Mosi (Master Out Slave In): Paglilipat ng data mula sa master hanggang alipin.
- Miso (master sa alipin): Paglilipat ng data mula sa alipin hanggang master.
- SCLK (serial orasan): Pag -synchronize ng paghahatid ng data na nabuo ng master.
- SS/CS (alipin Select/Chip Select): Pinipili ang aparato ng alipin.
Ang SPI ay pinapaboran para sa pagiging simple at bilis nito, na ginagawang perpekto para sa mga aplikasyon na nangangailangan ng mabilis na pagpapalitan ng data sa pagitan ng mga aparato.
Bakit gumamit ng SPI kasama ang Arduino at Raspberry Pi?
Ang pagsasama -sama ng isang Arduino na may isang Raspberry Pi ay gumagamit ng mga lakas ng parehong mga platform. Ang Arduino ay higit sa real-time, mababang antas ng control ng hardware, habang ang Raspberry Pi ay nag-aalok ng mga kakayahan sa pagproseso ng mataas na antas, koneksyon sa network, at isang mayamang kapaligiran ng operating system. Ang paggamit ng SPI ay nagbibigay -daan sa dalawang aparato na ito upang makipag -usap nang mahusay, pagpapagana ng mga kumplikadong proyekto tulad ng mga sistema ng automation ng bahay, robotics, at mga aplikasyon ng pag -log sa data.
Pag -set up ng hardware
Upang maitaguyod ang komunikasyon ng SPI sa pagitan ng isang Arduino at isang Raspberry Pi, kakailanganin mo ang mga sumusunod na sangkap:
- Arduino uno (o anumang katugmang board ng Arduino)
- Raspberry Pi (anumang modelo na may GPIO Pins)
- Jumper wires
- Breadboard (Opsyonal)
Ang mga kable ng Arduino at Raspberry Pi para sa SPI
Mahalaga ang maingat na mga kable upang matiyak ang wastong komunikasyon. Narito kung paano ikonekta ang Arduino at Raspberry Pi gamit ang SPI:
Raspberry pi gpio pin | Arduino Pin | Paglalarawan |
---|---|---|
GPIO10 (MOSI) | Pin 11 (Mosi) | Master Out Slave In |
GPIO9 (MISO) | Pin 12 (miso) | Master sa alipin |
GPIO11 (SCLK) | Pin 13 (SCLK) | Serial orasan |
GPIO8 (CE0) | Pin 10 (ss) | Piliin ang alipin |
Gnd | Gnd | Karaniwang lupa |
3.3v | 5v | Power Supply (Gumamit ng Antas ng Paglilipat Kung Kinakailangan) |
Tandaan: Ang Raspberry Pi ay nagpapatakbo sa mga antas ng logic ng 3.3V, habang ang Arduino UNO ay gumagamit ng 5V. Inirerekomenda na gumamit ng isang logic level converter upang maiwasan ang potensyal na pinsala sa Raspberry Pi.
Pag -configure ng Arduino
Ang Arduino ay kikilos bilang aparato ng alipin ng SPI. Nasa ibaba ang isang halimbawang sketch ng Arduino upang mai -set up ito:
// 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;
}
}
Paliwanag:
- Spi.attachinterrupt (); Pinapagana ang SPI na makagambala, na nagpapahintulot sa Arduino na hawakan ang papasok na data.
- Sa nakagambala na gawain sa serbisyo
ISR(SPI_STC_vect)
, Ang natanggap na data ay naka -imbak para sa pagproseso. - Ang
loop()
Mga tseke ng pag -andar para sa natanggap na data at mai -print ito sa serial monitor.
Pag -configure ng Raspberry Pi
Ang Raspberry Pi ay kikilos bilang aparato ng SPI Master. Gagamitin namin ang Python kasama ang spidev
Library upang hawakan ang komunikasyon ng SPI. Una, tiyakin na pinagana ang SPI:
- Buksan ang tool ng pagsasaayos ng Raspberry Pi:
sudo raspi-config
- Mag -navigate sa Mga pagpipilian sa interface > SPI > Paganahin
- I -reboot ang Raspberry Pi kung sinenyasan.
I -install ang spidev
Library kung hindi pa ito naka -install:
sudo apt-get install python3-spidev
Narito ang isang halimbawang script ng Python para sa Raspberry Pi:
# 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()
Paliwanag:
- spi.open (0, 0) Binubuksan ang SPI Bus 0, aparato 0 (CE0).
- spi.xfer2 ([data]) nagpapadala ng data byte at sabay na tumatanggap ng data mula sa alipin.
- Ang script ay nagpapadala ng isang byte (hal., 42) bawat segundo at inilimbag ang tugon mula sa Arduino.
Pagsubok sa komunikasyon
Matapos i -set up ang parehong Arduino at Raspberry Pi:
- I -upload ang sketch ng Arduino sa board ng Arduino.
- Ikonekta ang Arduino sa Raspberry Pi sa pamamagitan ng mga kable ng SPI.
- Patakbuhin ang script ng Python sa Raspberry Pi:
python3 spi_master.py
- Buksan ang Arduino Serial Monitor upang tingnan ang natanggap na data:
Tools > Serial Monitor
Dapat mong makita ang Arduino na natatanggap ang data na ipinadala ng Raspberry Pi at ipinapakita ito sa serial monitor. Katulad nito, ipapakita ng Raspberry Pi ang data na ipinapadala nito at ang tugon na natanggap nito.
Mga tip sa pag -aayos
- Suriin ang mga kable: Tiyakin na ang lahat ng mga koneksyon sa pagitan ng Arduino at Raspberry Pi ay ligtas at tama na naka -mapa.
- Mga Antas ng Boltahe: Gumamit ng isang logic level converter upang tumugma sa 3.3V ng Raspberry Pi kasama ang 5V ng Arduino.
-
Paganahin ang SPI: Patunayan na ang SPI ay pinagana sa Raspberry Pi gamit
raspi-config
. -
Mga Pahintulot: Tiyakin na ang iyong gumagamit ay may mga kinakailangang pahintulot upang ma -access ang mga aparato ng SPI. Maaaring kailanganin mong patakbuhin ang iyong script ng Python
sudo
. - Baud Rate: Siguraduhin na ang serial monitor at ang Arduino sketch ay gumagamit ng parehong rate ng baud.
- Mga Setting ng SPI: Tiyakin na ang parehong master at alipin ay na -configure na may parehong mode ng SPI at bilis.
Konklusyon
Ang paggamit ng komunikasyon ng SPI sa pagitan ng isang Arduino at isang Raspberry Pi ay nagbibigay -daan sa iyo upang magamit ang mga lakas ng parehong mga platform nang epektibo. Kung nagtatayo ka ng isang kumplikadong sistema ng robotics, pagbuo ng isang sensor network, o pag -eksperimento sa pag -log ng data, napakahalaga ng pag -unawa sa SPI. Sa pamamagitan ng pagsunod sa mga hakbang na nakabalangkas sa gabay na ito, maaari kang mag -set up ng maaasahang komunikasyon sa SPI at sumakay sa mga kapana -panabik na naka -embed na mga proyekto na gumagamit ng kapangyarihan ng parehong Arduino at Raspberry Pi.Maligayang pag -ikot!