الدرس الأول إعداد بيئة تطوير الأردوينو (١)
انظر إلى الصورة: الكابل الأزرق يربط لوحة الأردوينو بمنفذ USB في الحاسوب تماماً كما في الشكل 4.1. لغة البرمجة الأساسية للأردوينو هي C++، لكننا هنا سنستعمل لغة البايثون عالية المستوى. السر في هذا الربط هو بروتوكول Firmata، فهو الحلقة التي تربط الأوامر في البايثون بالتحكم الدقيق في الأطراف. وبدلاً من كتابة الأوامر المعقدة، سنستعين بمكتبة PyFirmata، وهي الواجهة التي تترجم أوامر البايثون عبر بروتوكول Firmata إلى اللوحة مباشرة.
يقوم هذا الدرس على ربط لغة البايثون بلوحة الأردوينو باستخدام بروتوكول Firmata ومكتبة PyFirmata، بحيث تتمكن لغة البايثون من التحكم بأطراف الأردوينو قراءةً وكتابةً. تعتمد الفكرة على تحميل مكتبة StandardFirmata على الأردوينو عبر بيئة التطوير Arduino IDE، ثم تثبيت مكتبة pyfirmata في برنامج PyCharm وإنشاء اتصال مع المنفذ التلسلسلي مثل COM4. يتضمن الدرس تفاعل الأطراف الرقمية والتناظرية باستخدام دالة board.get_pin لمعالجة الإشارات الرقمية والتناظرية. مثال سريع: لقراءة قيمة من الطرف الرقمي رقم 10، تكتب digital_pin = board.get_pin("d:10:i") ثم تتبعها بـ pin_value = digital_pin.read().
الفكرة الأساسية
تعتمد فكرة الدرس على تمكين لغة البايثون من التحكم الكامل بلوحة الأردوينو عبر الحاسوب باستخدام بروتوكول Firmata ومكتبة PyFirmata، لتتولى لغة البايثون إرسال الأوامر واستقبال القراءات من الأطراف الرقمية والتناظرية للأردوينو دون الحاجة لكتابة كود بلغة C++ تقليدية على اللوحة مباشرة.
الشرح
تتطلب عملية إعداد البيئة أولاً تحميل بيئة التطوير المتطورة للأردوينو Arduino IDE من الموقع الرسمي، ثم تحميل مكتبة StandardFirmata ورفعها على لوحة الأردوينو عبر قائمة الملفات والأمثلة. يعمل بروتوكول Firmata كحلقة وصل تتيح لبرامج الحاسوب التواصل مع الأجهزة الدقيقة. بعد توصيل لوحة الأردوينو بمنفذ USB، يجب معرفة رقم المنفذ التسلسلي مثل COM4 من قائمة الأدوات Tools ثم Ports. في برنامج PyCharm، تثبت حزامة pyfirmata باستخدام سطر الأوامر pip install pyfirmata. للتعامل مع الأطراف، تستخدم الدالة board.get_pin التي تستقبل معاملات مكونة من ثلاثة أحرف يفصل بينها نقطتان رأسيتان بالشكل التالي: المعرف الأول هو a للتناظري أو d للرقمي، المعرف الثاني هو رقم الطرف المراد، والمعرف الثالث هو طريقة التفاعل حيث يشير الحرف i للمدخلات و o للمخرجات و p لتضمين عرض النبضة PWM للأطراف التناظرية.
مثال محلول خطوة بخطوة
لقراءة قيمة من الطرف الرقمي رقم 10، اتبع الخطوات التالية:
- أنشئ متغيراً لتخزين منفذ الاتصال: communication_port = "COM4"
- أنشئ كائن اللوحة: board = pyfirmata.Arduino(communication_port)
- جهز مكرر الإشارات لضمان استمرار قراءة المدخلات: it = pyfirmata.util.Iterator(board) ثم ابدأ تشغيله بـ it.start()
- اكتب أمر الحصول على الطرف الرقمي وتخصيصه كمدخل: digital_pin = board.get_pin("d:10:i")
- اقرأ القيمة المخزنة في الطرف واطبعها أو خزّنها في متغير: pin_value = digital_pin.read()
أخطاء شائعة
- نسيان إبقاء مكتبة StandardFirmata قيد التشغيل على الأردوينو، مما يقطع الاتصال مع برنامج البايثون.
- كتابة اسم منفذ تسلسلي خاطئ في متغير communication_port لا يوافق المنفذ الفعلي الموصول به الأردوينو في جهازك.
- محاولة قراءة أو كتابة الأطراف دون تشغيل مكرر الإشارات Iterator للأطراف، مما يؤدي لعدم تحديث البيانات.
سؤالان للتدريب مع الإجابة
السؤال الأول: ما هو الأمر البرمجي المستخدم في مكتبة PyFirmata لإنشاء اتصال مع الطرف التناظري رقم 4 وتخصيصه كمخرج بقيمة تناظرية؟ الإجابة: analog_pin = board.get_pin("a:4:p")
السؤال الثاني: ما هو الحرف الذي يُستخدم للدلالة على المخرجات (Output) في الأطراف الرقمية عند كتابة معاملات دالة board.get_pin؟ الإجابة: الحرف o.