الواجهة المحيطية التسلسلية (SPI) عبارة عن بروتوكول اتصال متسلسل متزامن يستخدم على نطاق واسع للتواصل على مسافة قصيرة ، في المقام الأول في الأنظمة المضمنة. يمكن أن يؤدي الجمع بين براعة Arduino مع الطاقة الحسابية لـ Raspberry Pi من خلال SPI إلى فتح عدد كبير من إمكانيات المشروع. في منشور المدونة هذا ، سنستكشف كيفية إعداد واستخدام اتصال SPI بين Arduino و Raspberry Pi.
فهم SPI
SPI هو بروتوكول اتصالات كامل الاكتتاب يعمل في وضع Master-Slave. يستخدم أربعة خطوط رئيسية:
- Mosi (Master Out Slave in): ينقل البيانات من السيد إلى العبد.
- ميسو (سيد في العبد): ينقل البيانات من العبد إلى الماجستير.
- SCLK (الساعة التسلسلية): مزامنة نقل البيانات التي تم إنشاؤها بواسطة السيد.
- SS/CS (Slave Select/Chip Select): يختار جهاز الرقيق.
يتم تفضيل SPI لبساطتها وسرعتها ، مما يجعلها مثالية للتطبيقات التي تتطلب تبادل البيانات السريع بين الأجهزة.
لماذا تستخدم SPI مع Arduino و Raspberry Pi؟
الجمع بين Arduino مع Raspberry Pi يعزز نقاط قوة كلا المنصتين. يتفوق Arduino في الوقت الفعلي للتحكم في الأجهزة منخفضة المستوى ، بينما يوفر Raspberry PI إمكانات معالجة عالية المستوى ، واتصال الشبكة ، وبيئة نظام التشغيل الغنية. يتيح استخدام SPI هذين الجهازين التواصل بكفاءة ، وتمكين مشاريع معقدة مثل أنظمة أتمتة المنزل والروبوتات وتطبيقات تسجيل البيانات.
إعداد الأجهزة
لإنشاء اتصال SPI بين Arduino و Raspberry Pi ، ستحتاج إلى المكونات التالية:
- Arduino Uno (أو أي لوحة Arduino متوافقة)
- Raspberry PI (أي نموذج مع دبابيس GPIO)
- الأسلاك الطائر
- لوح (اختياري)
توصيل Arduino و Raspberry Pi لـ SPI
الأسلاك الدقيقة أمر بالغ الأهمية لضمان التواصل المناسب. إليك كيفية توصيل Arduino و Raspberry Pi باستخدام SPI:
التوت PI GPIO دبوس | دبوس أردوينو | وصف |
---|---|---|
GPIO10 (MOSI) | PIN 11 (MOSI) | إتقان العبد في |
GPIO9 (ميسو) | دبوس 12 (ميسو) | سيد في الخارج |
GPIO11 (SCLK) | PIN 13 (SCLK) | الساعة التسلسلية |
GPIO8 (CE0) | دبوس 10 (SS) | العبيد اختيار |
GND | GND | أرضية مشتركة |
3.3V | 5V | مزود الطاقة (استخدام مستوى تحول إذا لزم الأمر) |
ملحوظة: يعمل Raspberry Pi بمستويات منطقية 3.3V ، بينما يستخدم Arduino UNO 5V. يوصى باستخدام محول مستوى المنطق لمنع الأضرار المحتملة لـ Raspberry Pi.
تكوين Arduino
سوف Arduino بمثابة جهاز SPI Slave. فيما يلي عينة رسم 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.attachinterrupt () ؛ يمكّن مقاطعة SPI ، مما يسمح لـ Arduino بالتعامل مع البيانات الواردة.
- في روتين خدمة المقاطعة
ISR(SPI_STC_vect)
، يتم تخزين البيانات المستلمة للمعالجة. - ال
loop()
تعمل الدالة على البيانات المستلمة وتطبعها على الشاشة التسلسلية.
تكوين Raspberry Pi
سيعمل Raspberry Pi كجهاز SPI الرئيسي. سنستخدم Python مع spidev
مكتبة للتعامل مع اتصال SPI. أولاً ، تأكد من تمكين SPI:
- افتح أداة تكوين Raspberry Pi:
sudo raspi-config
- انتقل إلى خيارات الواجهة > spi > يُمكَِن
- أعد تشغيل Raspberry Pi إذا طُلب.
تثبيت spidev
المكتبة إذا لم يتم تثبيتها بالفعل:
sudo apt-get install python3-spidev
إليك نموذج نص Python لـ 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()
توضيح:
- spi.Open (0 ، 0) يفتح SPI Bus 0 ، الجهاز 0 (CE0).
- spi.xfer2 ([بيانات]) يرسل بايت البيانات ويتلقى في وقت واحد بيانات من العبد.
- يرسل البرنامج النصي بايت (على سبيل المثال ، 42) كل ثانية ويطبع الاستجابة من Arduino.
اختبار الاتصال
بعد إعداد كل من Arduino و Raspberry Pi:
- قم بتحميل رسم Arduino إلى لوحة Arduino.
- قم بتوصيل Arduino إلى Raspberry Pi عبر الأسلاك SPI.
- قم بتشغيل نص Python على Raspberry Pi:
python3 spi_master.py
- افتح شاشة Arduino التسلسلية لعرض البيانات المستلمة:
Tools > Serial Monitor
يجب أن ترى Arduino يتلقى البيانات المرسلة بواسطة Raspberry Pi وعرضها في الشاشة التسلسلية. وبالمثل ، ستعرض Raspberry Pi البيانات التي يرسلها والاستجابة التي يتلقاها.
نصائح استكشاف الأخطاء وإصلاحها
- تحقق من الأسلاك: تأكد من أن جميع الاتصالات بين Arduino و Raspberry Pi آمنة ومُرسم بشكل صحيح.
- مستويات الجهد: استخدم محول مستوى المنطق لمطابقة 3.3V من Raspberry Pi مع 5V من Arduino.
-
تمكين SPI: تحقق من تمكين SPI على Raspberry Pi باستخدام
raspi-config
. -
أذونات: تأكد من أن المستخدم الخاص بك لديه الأذونات اللازمة للوصول إلى أجهزة SPI. قد تحتاج إلى تشغيل نص Python الخاص بك
sudo
. - معدل باود: تأكد من أن الشاشة التسلسلية ورسم Arduino تستخدم نفس معدل الباود.
- إعدادات SPI: تأكد من تكوين كل من Master و Slave بنفس وضع SPI والسرعة.
خاتمة
يتيح لك استخدام اتصال SPI بين Arduino و Raspberry Pi تسخير نقاط القوة في كلا النظامين بشكل فعال. سواء كنت تقوم ببناء نظام روبوتات معقد ، أو تطوير شبكة استشعار ، أو تجربة تسجيل البيانات ، فإن فهم SPI لا يقدر بثمن. باتباع الخطوات الموضحة في هذا الدليل ، يمكنك إعداد اتصالات SPI موثوقة والشروع في المشاريع المدمجة المثيرة التي تستفيد من قوة كل من Arduino و Raspberry Pi.العبث سعيد!