يمكن لـ Raspberry Pi و Arduino التواصل مع بعضهما البعض باستخدام بروتوكولات مختلفة ، بما في ذلك المسلسل (UART) ، I2C ، و SPI. سيوضح لك هذا الدليل كيفية إعداد التواصل بين Raspberry Pi و Arduino باستخدام الواجهة التسلسلية (UART)، وهي الطريقة الأكثر شيوعًا والمباشرة.
ماذا ستحتاج
- التوت بي (أي نموذج يحمل دعم GPIO ، على سبيل المثال ، PI 3 ، PI 4)
- أردوينو (على سبيل المثال ، UNO ، Mega ، Nano)
- كابل USB (لتوصيل Arduino بالتوت PI)
- الأسلاك الطائر (إذا كان استخدام الاتصالات التسلسلية GPIO)
- بيثون مثبت على التوت PI
- Arduino IDE مثبت على Raspberry Pi أو جهاز كمبيوتر منفصل
الخطوة 1: توصيل Arduino إلى Raspberry Pi
يمكنك توصيل Raspberry Pi بـ Arduino باستخدام USB أو دبابيس GPIO.
الطريقة 1: اتصال USB (موصى به)
- توصيل Arduino إلى Raspberry Pi باستخدام كابل USB.
- سوف يكتشف Raspberry Pi Arduino كجهاز تسلسلي (على سبيل المثال ،
/dev/ttyUSB0
أو/dev/ttyACM0
).
الطريقة 2: استخدام دبابيس GPIO (مسلسل الأجهزة)
- توصيل Arduino TX (PIN 1) ل Raspberry Pi Rx (GPIO 15 ، PIN 10).
- توصيل Arduino RX (PIN 0) ل Raspberry Pi TX (GPIO 14 ، PIN 8).
- يتصل GND إلى GND.
- تعطيل وحدة التحكم التسلسلية المدمجة في Raspberry Pi:
sudo raspi-config
- انتقل إلى خيارات الواجهة> المنفذ التسلسلي.
- تعطيل قذيفة تسجيل الدخول على تسلسل ولكن تمكين أجهزة المنفذ التسلسلي.
- أعد تشغيل Raspberry Pi:
sudo reboot
الخطوة 2: تثبيت المكتبات المطلوبة
تأكد من أن Raspberry Pi الخاص بك لديه أدوات الاتصال التسلسلية الضرورية المثبتة.
sudo apt update
sudo apt install python3-serial
للتحقق من المنافذ التسلسلية المتاحة:
ls /dev/tty*
لاتصال USB ، ابحث عن /dev/ttyUSB0
أو /dev/ttyACM0
.
الخطوة 3: تحميل رسم Arduino
لإرسال بيانات من Arduino إلى Raspberry Pi ، قم بتحميل هذا بسيط رسم Arduino باستخدام Arduino IDE.
void setup() {
Serial.begin(9600); // Start serial communication
}
void loop() {
Serial.println("Hello from Arduino!"); // Send message
delay(1000);
}
الخطوة 4: اقرأ البيانات التسلسلية على Raspberry Pi
قم بإنشاء نص Python على Raspberry Pi لقراءة البيانات من Arduino.
مثال رمز بيثون
import serial
import time
# Open the serial port (Change ttyUSB0 if necessary)
ser = serial.Serial('/dev/ttyUSB0', 9600, timeout=1)
time.sleep(2) # Wait for connection
try:
while True:
if ser.in_waiting > 0:
data = ser.readline().decode('utf-8').strip()
print(f"Received: {data}")
except KeyboardInterrupt:
print("Exiting...")
ser.close()
- تأكد من ذلك
/dev/ttyUSB0
يطابق منفذ التسلسلي المكتشف. - قم بتشغيل البرنامج النصي:
python3 serial_read.py
- يجب أن ترى "مرحبا من أردوينو!" طبعت كل ثانية.
الخطوة 5: إرسال البيانات من Raspberry Pi إلى Arduino
تعديل رمز Arduino لتلقي البيانات من Raspberry Pi:
void setup() {
Serial.begin(9600);
}
void loop() {
if (Serial.available() > 0) {
String received = Serial.readStringUntil('\\n');
Serial.print("Raspberry Pi Sent: ");
Serial.println(received);
}
}
تعديل كود بيثون لإرسال البيانات إلى Arduino:
ser.write(b"Hello from Raspberry Pi!\\n")
- الآن ، سيتلقى Arduino رسائل ترسلها Raspberry Pi.
طرق الاتصال البديلة
-
اتصال I2C (للعديد من Arduinos)
- يتصرف التوت بي كـ يتقن، Arduino يعمل كـ عبد.
- تمكين I2C:
sudo raspi-config
- تثبيت المكتبات المطلوبة:
sudo apt install python3-smbus i2c-tools
- يستخدم
Wire.h
على جانب Arduino للاتصال I2C.
-
اتصال SPI (لنقل البيانات عالي السرعة)
- يتطلب Arduino الممكّن من SPI و
SPI.h
مكتبة. - أسرع من UART و I2C ولكن يتطلب المزيد من الأسلاك.
- يتطلب Arduino الممكّن من SPI و
استكشاف الأخطاء وإصلاحها
-
لم يتم اكتشاف Arduino على Raspberry Pi
- يجري
ls /dev/tty*
للتحقق من الأجهزة التسلسلية المتاحة. - تأكد من تحديد المنفذ التسلسلي الصحيح في البرنامج النصي Python.
- يجري
-
تم رفض الإذن خطأ
- أضف المستخدم الخاص بك إلى
dialout
مجموعة:sudo usermod -aG dialout $USER sudo reboot
- أضف المستخدم الخاص بك إلى
-
أحرف القمامة في الإخراج
- يضمن يستخدم كلا الجهازين نفس معدل باود (على سبيل المثال ،
9600
). - أضف تأخيرًا صغيرًا (
time.sleep(2)
) قبل قراءة البيانات في بيثون.
- يضمن يستخدم كلا الجهازين نفس معدل باود (على سبيل المثال ،
خاتمة
باتباع هذا الدليل ، يمكنك إنشاء التواصل التسلسلي بين Arduino و Raspberry Pi ، مما يسمح لهم بتبادل البيانات مشاريع إنترنت الأشياء ، تكامل المستشعرات ، وأنظمة التشغيل الآلي. تجربة مع I2C و SPI لمزيد من التطبيقات المتقدمة!