التعرّف على اللوحات وبيئة العمل
قبل أن نكتب أي برنامج نحتاج إلى ثلاثة أشياء: لوحة نفهم ما تستطيع فعله، ومحرّر على الحاسوب، وبرنامج ثابت يجعل اللوحة تفهم لغة بايثون. في هذا الفصل نجهّز هذه الثلاثة، ونكتب البرنامج الأول، ونتعلّم ماذا نفعل حين لا تستجيب اللوحة.
- نميّز بين المتحكّم والحاسوب، ونختار لوحة مناسبة لكل مشروع.
- نفهم لماذا يغطي الاسم Raspberry Pi شيئين مختلفين.
- نجهّز المحرّر ونحرق البرنامج الثابت على ESP32 وعلى Pico W.
- نستعمل سطر الأوامر التفاعلي، ونفرّق بين تشغيل ملف وحفظه على اللوحة.
- نحلّ الأعطال الشائعة في الاتصال.
1.1 متحكّم أم حاسوب؟ – מיקרו-בקר מול מחשב (Microcontroller vs Computer)
الحاسوب الذي نكتب عليه يشغّل نظاما كاملا وعشرات البرامج معا، ويقضي وقته بعيدا عن الأسلاك والأطراف. أما المتحكّم فيفعل شيئا أبسط بكثير: ينفّذ برنامجا واحدا، ويقرأ الجهد على أطرافه ويغيّره مباشرة.
| المتحكّم | الحاسوب | |
|---|---|---|
| نظام التشغيل | لا يحتاج إليه عادة | أساسي: لينكس أو غيره |
| عند وصل التغذية | يبدأ البرنامج فورا | يقلع النظام أولا |
| الذاكرة العشوائية | مئات الكيلوبايت | عدة جيجابايت |
التوجيه العملي: إذا كان المشروع يقرأ حسّاسا ويشغّل مشغّلا، فالمتحكّم يكفي ويفضُل. وإذا احتاج إلى شاشة كبيرة أو كاميرا أو معالجة ثقيلة، فنحتاج إلى حاسوب.
1.2 ثلاث لوحات في هذا الكتاب – שלושת הלוחות (The Three Boards)
اللوحة (לוח) هي الدارة الجاهزة التي تحمل الشريحة ومنفذ USB والأطراف. يستعمل الكتاب ثلاث عائلات:
| ESP32 | Pico W | Pico 2 W | Pi 4 / Pi 5 | |
|---|---|---|---|---|
| النوع | متحكّم | متحكّم | متحكّم | حاسوب |
| الشريحة | ESP32 | RP2040 | RP2350 | BCM2711 / BCM2712 |
| المعالج | نواتان، حتى 240 MHz | نواتان، حتى 133 MHz | نواتان، حتى 150 MHz | 4 أنوية، 1.8 / 2.4 GHz |
| الذاكرة | 520 kB | 264 kB | 520 kB | 1–16 GB |
| اللاسلكي | WiFi, BLE | WiFi, BLE | WiFi, BLE | WiFi, BLE |
| اللغة | مايكروبايثون | مايكروبايثون | مايكروبايثون | بايثون على لينكس |
| محوّل داخلي | 12 بتّا | 12 بتّا | 12 بتّا | لا يوجد |
الأرقام من توثيق الشركات المصنّعة، وذاكرة الباي تتبع الطراز. أما مساحة التخزين على ESP32 فتختلف حسب الوحدة، بينما في Pico W تبلغ 2 MB وفي Pico 2 W تبلغ 4 MB.
machine غير موجودة على الباي.متى نختار كل لوحة؟:
- ESP32: حين يكون الاتصال بالشبكة في قلب المشروع، أو نحتاج إلى خرج تماثلي حقيقي DAC.
- Pico W وPico 2 W: حين نريد لوحة بسيطة التوثيق، وتثبيتا بنسخ ملف واحد، ولا تحتاج أطرافها التماثلية إلى ضبط.
- Pi 4/5: حين نحتاج إلى نظام ملفات كبير أو كاميرا أو شاشة أو برامج ثقيلة. وهو لا يلائم التوقيت الدقيق، لأن النظام قد يقطع البرنامج في أي لحظة.
1.3 ما هي مايكروبايثون؟ – מהי מיקרו-פייתון (MicroPython)
مايكروبايثون هي تنفيذ مصغّر للغة بايثون يعمل مباشرة على المتحكّم. تصل إلى اللوحة على هيئة برنامج ثابت (קושחה)، وهو ملف واحد نكتبه في ذاكرة اللوحة مرة واحدة، وفيه المفسّر (מפרש) وسطر الأوامر ومكتبات اللوحة ونظام ملفات صغير. بعد ذلك لا نترجم شيئا: نرسل ملفات نصية، والمفسّر ينفّذها.
1.4 تجهيز الحاسوب – התקנת Thonny ודרייברים (Setting Up)
- نحمّل المحرّر Thonny من thonny.org ونثبّته.
- نصل اللوحة بالحاسوب بكابل بيانات USB.
- نفتح القائمة
Run → Select interpreter، ونختار مايكروبايثون للوحتنا، ثم نختار المنفذ.
لوحات Pico تتصل مباشرة ولا تحتاج إلى برنامج تعريف (דרייבר) في الأنظمة الحديثة. أما لوحات ESP32 فتستعمل غالبا شريحة وسيطة بين USB والمنفذ التسلسلي، وأشهرها CP210x وCH340. إذا لم يظهر منفذ جديد، نحمّل برنامج التعريف من موقع الشركة المصنّعة لهذه الشريحة.
1.5 حرق البرنامج الثابت – צריבת קושחה (Installing the Firmware)
نحرق (צורבים) البرنامج الثابت مرة واحدة، ثم عند التحديث فقط. نأخذه دائما من المصدر الرسمي micropython.org/download، ولكل لوحة ملفها: ESP32_GENERIC وRPI_PICO_W وRPI_PICO2_W.
على ESP32: من داخل المحرّر:
- في صفحة اختيار المفسّر نفسها نضغط رابط تثبيت مايكروبايثون.
- نختار المنفذ ونوع اللوحة وآخر إصدار، ونضغط تثبيت.
- إذا لم تستجب اللوحة، ندخلها وضع التحميل بأنفسنا: نضغط مطوّلا زر BOOT، وننقر زر RESET أو EN، ثم نترك BOOT، ونعيد المحاولة.
على Pico W وPico 2 W: بنسخ ملف:
- نضغط مطوّلا زر BOOTSEL أثناء وصل الكابل بالحاسوب، ونتركه حين تظهر اللوحة كقرص.
- اسم القرص RPI-RP2 على Pico W، وRP2350 على Pico 2 W.
- ننسخ إليه ملف UF2 الذي حمّلناه. تعيد اللوحة التشغيل، ويختفي القرص. هذا طبيعي، ومعناه أن العملية نجحت.
1.6 سطر الأوامر التفاعلي – שורת הפקודה האינטראקטיבית (The REPL)
حين يعمل البرنامج الثابت، نرى في نافذة Shell أسفل المحرّر العلامة >>>. هذا هو سطر الأوامر التفاعلي، واسمه REPL: يقرأ سطرا، ينفّذه، يطبع النتيجة، ثم ينتظر السطر التالي. وهو أسرع طريقة لنجرّب أمرا واحدا:
>>> 3.3 / 2
>>> print("hello")| الأمر | عمله |
|---|---|
| Ctrl-C | يوقف البرنامج الجاري ويعيدنا إلى السطر التفاعلي. |
| Ctrl-D | إعادة تشغيل ناعمة: يمسح المتغيّرات، ويشغّل boot.py ثم main.py. |
1.7 تشغيل ملف أم حفظه؟ – הרצת קובץ מול שמירה ללוח (Run vs Save)
هذا الفرق يربك كل من يبدأ. زر التشغيل F5 يرسل الملف المفتوح إلى اللوحة لتنفّذه الآن، دون أن يبقى عليها. وإذا فصلنا الكابل وأعدنا وصله، لا يعود إلى العمل. ولكي يبقى البرنامج نحفظه على اللوحة: من القائمة File → Save as نختار اللوحة بدل الحاسوب.
| الملف على اللوحة | متى يعمل | ماذا نضع فيه |
|---|---|---|
boot.py | أولا، بعد كل إعادة تشغيل | إعداد لمرة واحدة، وينتهي دائما ولا يدور بلا نهاية |
main.py | بعد boot.py، وحده | برنامج المشروع. وإذا انتهى، يعود السطر التفاعلي |
lib/ | حين نستورد منه | مكتباتنا، ومنها الملف board.py |
كل برامج الكتاب التي تصلح للوحتين تستورد الملف board.py، وفيه أسماء أطراف كل لوحة. ننسخ النسخة المناسبة للوحتنا من حزمة التنزيل إلى المجلد lib على اللوحة، مرة واحدة.
main.py يدور إلى الأبد قد يمنع المحرّر من الاتصال. الحل: نضغط زر الإيقاف في المحرّر، أو Ctrl-C في نافذة Shell، ثم نعدّل الملف.1.8 البرنامج الأول – התוכנית הראשונה (First Program)
نسأل اللوحة عن نفسها. الأمر print يطبع نصا، والمكتبتان sys وmachine تعطياننا معلومات عن النظام:
import sys
import machine
print("language :", sys.implementation.name)
print("platform :", sys.platform)
print("CPU MHz :", machine.freq() // 1000000)language : micropython platform : webassembly CPU MHz : 240
language : micropython platform : webassembly CPU MHz : 150
كل شاشة في الكتاب ناتجة عن تشغيل فعلي في مايكروبايثون الحقيقي، على لوحة مُحاكاة داخل الحاسوب. لذلك نقرأ سطرين بحذر:
- السطر
platform: كلمةwebassemblyتكشف أن المفسّر يعمل هنا في المُحاكاة. على اللوحة الحقيقية نتوقعesp32أوrp2. - السطر
CPU MHz: هذا عدد تعطيه المُحاكاة، وعلى لوحتكم قد يختلف. فمثلا يذكر توثيق مايكروبايثون أن شريحة RP2040 تقلع بتردد 125 MHz.
والآن البرنامج نفسه على الباي، دون machine لأنها غير موجودة هناك. نقارن السطر الأول في الشاشتين: هنا لغة بايثون العادية على لينكس.
import sys
print("language :", sys.implementation.name)language : cpython
vfs، وهي غير موجودة في ذلك الإصدار. لذلك نثبّت أحدث إصدار. ولم نجرّب البرامج بعد على Pico W وRaspberry Pi حقيقيين، ولا مع قطع خارجية، فشاشات هذه الأجزاء من المُحاكاة.1.9 الأعطال الشائعة – תקלות נפוצות (Troubleshooting)
| ما نراه | السبب المعتاد | الحل |
|---|---|---|
| لا يظهر منفذ جديد | كابل شحن، أو ينقص برنامج التعريف | نبدّل الكابل أولا، ثم نثبّت CP210x أو CH340 |
| المحرّر لا يتصل باللوحة | main.py يدور بلا نهاية | زر الإيقاف أو Ctrl-C، ثم نعدّل الملف |
| فشل الحرق على ESP32 | اللوحة ليست في وضع التحميل | الضغط على BOOT وRESET كما في 1.5 |
| لا يظهر قرص Pico | لم نضغط BOOTSEL قبل الوصل | نفصل الكابل ونعيد الخطوة |
ImportError عند board | الملف ليس على اللوحة | ننسخ board.py إلى lib |
1.10 المختبر الحي – המעבדה החיה (The Live Lab)
إذا لم تكن لدينا لوحة بعد، يكفينا المتصفّح: في مختبر الكتاب برنامج يبدّل حالة الثنائي الباعث للضوء (נורית) كل ثانية. نشغّله ونعدّل فيه دون أن نحاول فهم كل سطر الآن، فالفصل 3 يشرح الأطراف بالتفصيل. والمحاكاة مثالية، فهي لا تُغني عن اللوحة الحقيقية في المشروع.
أهمّ أفكار الفصل:
- المتحكّم ينفّذ برنامجا واحدا ويتحكّم في أطرافه مباشرة، والحاسوب يشغّل نظاما كاملا.
- Pico W متحكّم بمايكروبايثون، وPi 4/5 حاسوب بلينكس وبايثون العادي، رغم الاسم المشترك.
- البرنامج الثابت نأخذه من micropython.org/download، ولكل لوحة ملفها.
- زر التشغيل لا يحفظ شيئا. ما يعمل وحده بعد إعادة التشغيل هو
main.pyالمحفوظ على اللوحة. - كابل البيانات هو أول ما نفحصه عند كل عطل في الاتصال.
أوامر الفصل:
| الأمر | عمله |
|---|---|
| print(...) | يطبع على الشاشة. |
| sys.implementation.name | اسم تنفيذ اللغة. |
| machine.freq() | تردد المعالج بالهرتز. |
| Ctrl-C / Ctrl-D | إيقاف البرنامج / إعادة تشغيل ناعمة. |
قاموس المصطلحات – מילון מונחים:
| بالعربية | بالعبرية | English |
|---|---|---|
| المتحكّم | מיקרו-בקר | Microcontroller |
| اللوحة | לוח | Board |
| البرنامج الثابت | קושחה | Firmware |
| الحرق | צריבה | Flashing |
| المفسّر | מפרש | Interpreter |
| برنامج التعريف | דרייבר | Driver |
| سطر الأوامر التفاعلي | שורת פקודה אינטראקטיבית | REPL |
أسئلة للتمرين:
test.py على اللوحة. هل يعمل وحده بعد إعادة التشغيل؟boot.py وmain.py فقط.import sys
print("my board:", sys.platform)
print("3.3 / 2 =", "%.2f" % (3.3 / 2))main.py كتبناه ينتهي بعد ثلاث ثوان. ماذا يظهر في نافذة Shell بعد انتهائه؟>>>.machine، ثم ننقله كما هو إلى Pi 5»؟machine. نحتاج إلى مكتبة أخرى مثل gpiozero.