सीरियल पेरिफेरल इंटरफ़ेस (एसपीआई) एक समकालिक सीरियल संचार प्रोटोकॉल है जिसका उपयोग शॉर्ट-डिस्टेंस संचार के लिए व्यापक रूप से उपयोग किया जाता है, मुख्य रूप से एम्बेडेड सिस्टम में। एसपीआई के माध्यम से रास्पबेरी पाई की कम्प्यूटेशनल पावर के साथ Arduino की बहुमुखी प्रतिभा का संयोजन परियोजना संभावनाओं का ढेर खोल सकता है। इस ब्लॉग पोस्ट में, हम यह पता लगाएंगे कि कैसे एक Arduino और एक रास्पबेरी पाई के बीच SPI संचार का उपयोग करें और उपयोग करें।
एसपीआई को समझना
एसपीआई एक पूर्ण-द्वैध संचार प्रोटोकॉल है जो मास्टर-स्लेव मोड में संचालित होता है। यह चार मुख्य लाइनों का उपयोग करता है:
- मोसी (मास्टर आउट स्लेव इन): मास्टर से गुलाम तक डेटा स्थानांतरित करता है।
- मिसो (दास में मास्टर): दास से मास्टर तक डेटा स्थानांतरित करता है।
- SCLK (सीरियल क्लॉक): मास्टर द्वारा उत्पन्न डेटा ट्रांसमिशन को सिंक्रनाइज़ करता है।
- एसएस/सीएस (दास चयन/चिप सेलेक्ट): दास डिवाइस का चयन करता है।
एसपीआई अपनी सादगी और गति के लिए इष्ट है, जो उपकरणों के बीच त्वरित डेटा एक्सचेंज की आवश्यकता वाले अनुप्रयोगों के लिए आदर्श बनाता है।
Arduino और रास्पबेरी पाई के साथ SPI का उपयोग क्यों करें?
एक रास्पबेरी पाई के साथ एक Arduino का संयोजन दोनों प्लेटफार्मों की ताकत का लाभ उठाता है। Arduino वास्तविक समय, निम्न-स्तरीय हार्डवेयर नियंत्रण में उत्कृष्टता प्राप्त करता है, जबकि रास्पबेरी PI उच्च-स्तरीय प्रसंस्करण क्षमताओं, नेटवर्क कनेक्टिविटी और एक समृद्ध ऑपरेटिंग सिस्टम वातावरण प्रदान करता है। एसपीआई का उपयोग इन दो उपकरणों को कुशलतापूर्वक संवाद करने की अनुमति देता है, जिससे होम ऑटोमेशन सिस्टम, रोबोटिक्स और डेटा लॉगिंग एप्लिकेशन जैसी जटिल परियोजनाएं सक्षम होती हैं।
हार्डवेयर सेट करना
एक Arduino और एक रास्पबेरी पाई के बीच SPI संचार स्थापित करने के लिए, आपको निम्नलिखित घटकों की आवश्यकता होगी:
- Arduino Uno (या किसी भी संगत Arduino बोर्ड)
- रास्पबेरी पाई (GPIO पिन के साथ कोई भी मॉडल)
- जम्पर तार
- ब्रेडबोर्ड (वैकल्पिक)
SPI के लिए Arduino और रास्पबेरी पाई को वायरिंग
उचित संचार सुनिश्चित करने के लिए सावधान वायरिंग महत्वपूर्ण है। यहां बताया गया है कि SPI का उपयोग करके Arduino और रास्पबेरी पाई को कैसे कनेक्ट किया जाए:
रास्पबेरी पाई जीपीआईओ पिन | अर्डुइनो पिन | विवरण |
---|---|---|
GPIO10 (MOSI) | पिन 11 (मोसी) | दास में मास्टर |
Gpio9 (मिसो) | पिन 12 (मिसो) | गुलाम में मास्टर |
Gpio11 (SCLK) | पिन 13 (SCLK) | सीरियल घड़ी |
Gpio8 (CE0) | पिन 10 (एसएस) | गुलाम का चयन करें |
Gnd | Gnd | सार्वजनिक भूक्षेत्र |
3.3 | 5V | बिजली की आपूर्ति (यदि आवश्यक हो तो स्तर स्थानांतरण का उपयोग करें) |
टिप्पणी: रास्पबेरी पाई 3.3V तर्क स्तरों पर संचालित होती है, जबकि Arduino UNO 5V का उपयोग करता है। रास्पबेरी पाई को संभावित नुकसान को रोकने के लिए एक तर्क स्तर कनवर्टर का उपयोग करने की सिफारिश की जाती है।
Arduino को कॉन्फ़िगर करना
Arduino SPI स्लेव डिवाइस के रूप में कार्य करेगा। नीचे इसे सेट करने के लिए एक नमूना Arduino स्केच है:
// 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;
}
}
स्पष्टीकरण:
- Spi.attachinterupt (); SPI रुकावट को सक्षम करता है, जिससे Arduino आने वाले डेटा को संभालने की अनुमति देता है।
- रुकावट सेवा दिनचर्या में
ISR(SPI_STC_vect)
, प्राप्त डेटा प्रसंस्करण के लिए संग्रहीत है। -
loop()
प्राप्त डेटा के लिए फ़ंक्शन चेक और इसे सीरियल मॉनिटर पर प्रिंट करता है।
रास्पबेरी पाई को कॉन्फ़िगर करना
रास्पबेरी पाई एसपीआई मास्टर डिवाइस के रूप में कार्य करेगा। हम पायथन का उपयोग करेंगे spidev
SPI संचार को संभालने के लिए पुस्तकालय। सबसे पहले, सुनिश्चित करें कि SPI सक्षम है:
- रास्पबेरी पाई कॉन्फ़िगरेशन टूल खोलें:
sudo raspi-config
- नेविगेट करना इंटरफ़ेस विकल्प > एसपीआई > सक्षम
- यदि संकेत दिया जाता है तो रास्पबेरी पाई को रिबूट करें।
स्थापित करें spidev
लाइब्रेरी यदि यह पहले से स्थापित नहीं है:
sudo apt-get install python3-spidev
यहाँ रास्पबेरी पाई के लिए एक नमूना पायथन स्क्रिप्ट है:
# 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()
स्पष्टीकरण:
- spi.open (0, 0) SPI बस 0, डिवाइस 0 (CE0) खोलता है।
- spi.xfer2 ([डेटा]) डेटा बाइट भेजता है और एक साथ दास से डेटा प्राप्त करता है।
- स्क्रिप्ट हर सेकंड में एक बाइट (जैसे, 42) भेजती है और Arduino से प्रतिक्रिया को प्रिंट करती है।
संचार का परीक्षण
Arduino और रास्पबेरी PI दोनों की स्थापना के बाद:
- Arduino स्केच को Arduino बोर्ड पर अपलोड करें।
- SPI वायरिंग के माध्यम से raspberry पाई से Arduino कनेक्ट करें।
- रास्पबेरी पाई पर पायथन स्क्रिप्ट चलाएं:
python3 spi_master.py
- प्राप्त डेटा देखने के लिए Arduino सीरियल मॉनिटर खोलें:
Tools > Serial Monitor
आपको Arduino को रास्पबेरी पाई द्वारा भेजे गए डेटा को प्राप्त करना चाहिए और इसे सीरियल मॉनिटर में प्रदर्शित करना चाहिए। इसी तरह, रास्पबेरी पाई उस डेटा को प्रदर्शित करेगा जो इसे भेजता है और जो प्रतिक्रिया प्राप्त करता है।
समस्या निवारण युक्तियों
- वायरिंग की जाँच करें: सुनिश्चित करें कि Arduino और रास्पबेरी पाई के बीच सभी कनेक्शन सुरक्षित और सही ढंग से मैप किए गए हैं।
- वोल्टेज का स्तर: Arduino के 5V के साथ रास्पबेरी पाई के 3.3V से मिलान करने के लिए एक तर्क स्तर कनवर्टर का उपयोग करें।
-
SPI सक्षम करें: सत्यापित करें कि SPI रास्पबेरी पाई का उपयोग करके सक्षम है
raspi-config
. -
अनुमतियाँ: सुनिश्चित करें कि आपके उपयोगकर्ता के पास SPI उपकरणों तक पहुंचने के लिए आवश्यक अनुमति है। आपको अपनी पायथन स्क्रिप्ट को चलाने की आवश्यकता हो सकती है
sudo
. - बॉड दर: सुनिश्चित करें कि सीरियल मॉनिटर और Arduino स्केच एक ही बॉड दर का उपयोग कर रहे हैं।
- SPI सेटिंग्स: सुनिश्चित करें कि मास्टर और दास दोनों एक ही एसपीआई मोड और गति के साथ कॉन्फ़िगर किए गए हैं।
निष्कर्ष
एक Arduino और एक रास्पबेरी पाई के बीच SPI संचार का उपयोग करने से आप दोनों प्लेटफार्मों की ताकत को प्रभावी ढंग से दोहन करने की अनुमति देते हैं। चाहे आप एक जटिल रोबोटिक्स प्रणाली का निर्माण कर रहे हों, सेंसर नेटवर्क विकसित कर रहे हों, या डेटा लॉगिंग के साथ प्रयोग कर रहे हों, एसपीआई को समझना अमूल्य है। इस गाइड में उल्लिखित चरणों का पालन करके, आप विश्वसनीय एसपीआई संचार स्थापित कर सकते हैं और रोमांचक एम्बेडेड परियोजनाओं को अपना सकते हैं जो Arduino और रास्पबेरी पाई दोनों की शक्ति का लाभ उठाते हैं।हैप्पी टिंकरिंग!