برمجة المتحكّمات بلغة مايكروبايثون · الفصل 1 — التعرّف على اللوحات وبيئة العملהכרת הלוחות וסביבת העבודה · תכנות מיקרו-בקרים בשפת MicroPython⌂📚🏠
الفصل 1

التعرّف على اللوحات وبيئة العمل

הכרת הלוחות וסביבת העבודה – Boards and Tools
ساعتان تعليميتان

قبل أن نكتب أي برنامج نحتاج إلى ثلاثة أشياء: لوحة نفهم ما تستطيع فعله، ومحرّر على الحاسوب، وبرنامج ثابت يجعل اللوحة تفهم لغة بايثون. في هذا الفصل نجهّز هذه الثلاثة، ونكتب البرنامج الأول، ونتعلّم ماذا نفعل حين لا تستجيب اللوحة.

في هذا الفصل:
  • نميّز بين المتحكّم والحاسوب، ونختار لوحة مناسبة لكل مشروع.
  • نفهم لماذا يغطي الاسم Raspberry Pi شيئين مختلفين.
  • نجهّز المحرّر ونحرق البرنامج الثابت على ESP32 وعلى Pico W.
  • نستعمل سطر الأوامر التفاعلي، ونفرّق بين تشغيل ملف وحفظه على اللوحة.
  • نحلّ الأعطال الشائعة في الاتصال.

1.1 متحكّم أم حاسوب؟ – מיקרו-בקר מול מחשב (Microcontroller vs Computer)

الحاسوب الذي نكتب عليه يشغّل نظاما كاملا وعشرات البرامج معا، ويقضي وقته بعيدا عن الأسلاك والأطراف. أما المتحكّم فيفعل شيئا أبسط بكثير: ينفّذ برنامجا واحدا، ويقرأ الجهد على أطرافه ويغيّره مباشرة.

المتحكّم (מיקרו-בקר): شريحة واحدة تضم المعالج والذاكرة وأطراف الإدخال والإخراج، صُمّمت لتنفيذ برنامج واحد يتحكّم في جهاز.
المتحكّمالحاسوب
نظام التشغيللا يحتاج إليه عادةأساسي: لينكس أو غيره
عند وصل التغذيةيبدأ البرنامج فورايقلع النظام أولا
الذاكرة العشوائيةمئات الكيلوبايتعدة جيجابايت

التوجيه العملي: إذا كان المشروع يقرأ حسّاسا ويشغّل مشغّلا، فالمتحكّم يكفي ويفضُل. وإذا احتاج إلى شاشة كبيرة أو كاميرا أو معالجة ثقيلة، فنحتاج إلى حاسوب.

1.2 ثلاث لوحات في هذا الكتاب – שלושת הלוחות (The Three Boards)

اللوحة (לוח) هي الدارة الجاهزة التي تحمل الشريحة ومنفذ USB والأطراف. يستعمل الكتاب ثلاث عائلات:

ESP32Pico WPico 2 WPi 4 / Pi 5
النوعمتحكّممتحكّممتحكّمحاسوب
الشريحةESP32RP2040RP2350BCM2711 / BCM2712
المعالجنواتان، حتى 240 MHzنواتان، حتى 133 MHzنواتان، حتى 150 MHz4 أنوية، 1.8 / 2.4 GHz
الذاكرة520 kB264 kB520 kB1–16 GB
اللاسلكيWiFi, BLEWiFi, BLEWiFi, BLEWiFi, BLE
اللغةمايكروبايثونمايكروبايثونمايكروبايثونبايثون على لينكس
محوّل داخلي12 بتّا12 بتّا12 بتّالا يوجد

الأرقام من توثيق الشركات المصنّعة، وذاكرة الباي تتبع الطراز. أما مساحة التخزين على ESP32 فتختلف حسب الوحدة، بينما في Pico W تبلغ 2 MB وفي Pico 2 W تبلغ 4 MB.

Raspberry Piاسم واحد لعائلتينPico W / Pico 2 Wمتحكّم · مايكروبايثونPi 4 / Pi 5حاسوب · لينكس · بايثون
الاسم نفسه يدل على جهازين من نوعين مختلفين.
خطأ شائع: الاسم Raspberry Pi يغطي شيئين مختلفين. Pico W متحكّم صغير يشغّل مايكروبايثون دون نظام تشغيل. أما Pi 4 وPi 5 فحاسوبان كاملان يعملان بنظام لينكس وبايثون العادي. لذلك لا يعمل البرنامج نفسه عليهما: المكتبة machine غير موجودة على الباي.

متى نختار كل لوحة؟:

سؤال 1.1: نبني محطة تقرأ حسّاس حرارة كل دقيقة وترسل القراءة عبر WiFi. أي العائلات أنسب، وأيها زائد عن الحاجة؟

1.3 ما هي مايكروبايثون؟ – מהי מיקרו-פייתון (MicroPython)

مايكروبايثون هي تنفيذ مصغّر للغة بايثون يعمل مباشرة على المتحكّم. تصل إلى اللوحة على هيئة برنامج ثابت (קושחה)، وهو ملف واحد نكتبه في ذاكرة اللوحة مرة واحدة، وفيه المفسّر (מפרש) وسطر الأوامر ومكتبات اللوحة ونظام ملفات صغير. بعد ذلك لا نترجم شيئا: نرسل ملفات نصية، والمفسّر ينفّذها.

الحاسوبالمحرّر Thonnyاللوحةالبرنامج الثابتالمفسّر وسطر الأوامر التفاعلينظام الملفاتboot.pymain.pylib/USB
الحاسوب يكتب ويرسل عبر USB، واللوحة تحفظ وتنفّذ. بعد الحفظ تعمل اللوحة وحدها.

1.4 تجهيز الحاسوب – התקנת Thonny ודרייברים (Setting Up)

لم يُشغَّل: الخطوات في هذا القسم والقسمين التاليين تجري على حاسوبكم وعلى لوحة حقيقية، ولا يمكن تنفيذها أثناء بناء الكتاب، ولذلك لم تُشغَّل فيه. نكتبها وصفا وأوامر. وقد تختلف تسميات القوائم قليلا بين إصدارات المحرّر.
  1. نحمّل المحرّر Thonny من thonny.org ونثبّته.
  2. نصل اللوحة بالحاسوب بكابل بيانات USB.
  3. نفتح القائمة 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: من داخل المحرّر:

  1. في صفحة اختيار المفسّر نفسها نضغط رابط تثبيت مايكروبايثون.
  2. نختار المنفذ ونوع اللوحة وآخر إصدار، ونضغط تثبيت.
  3. إذا لم تستجب اللوحة، ندخلها وضع التحميل بأنفسنا: نضغط مطوّلا زر BOOT، وننقر زر RESET أو EN، ثم نترك BOOT، ونعيد المحاولة.

على Pico W وPico 2 W: بنسخ ملف:

  1. نضغط مطوّلا زر BOOTSEL أثناء وصل الكابل بالحاسوب، ونتركه حين تظهر اللوحة كقرص.
  2. اسم القرص RPI-RP2 على Pico W، وRP2350 على Pico 2 W.
  3. ننسخ إليه ملف UF2 الذي حمّلناه. تعيد اللوحة التشغيل، ويختفي القرص. هذا طبيعي، ومعناه أن العملية نجحت.
خطأ شائع: ملف Pico بلا W لا يشغّل الشبكة على Pico W، وملف Pico W لا يصلح لـPico 2 W، لأن الشريحتين مختلفتان. نقرأ اسم اللوحة المطبوع عليها قبل التحميل.

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 على اللوحة، مرة واحدة.

ملاحظة: حزمة التنزيل، وفيها المكتبات وبرامج كل الفصول: ESP32 · Pico W · Raspberry Pi 4/5
تنبيه: برنامج 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)
ESP32 · MicroPython 1.29 · simulated board
language : micropython
platform : webassembly
CPU MHz  : 240
Pico W · MicroPython 1.29 · simulated board
language : micropython
platform : webassembly
CPU MHz  : 150

كل شاشة في الكتاب ناتجة عن تشغيل فعلي في مايكروبايثون الحقيقي، على لوحة مُحاكاة داخل الحاسوب. لذلك نقرأ سطرين بحذر:

والآن البرنامج نفسه على الباي، دون machine لأنها غير موجودة هناك. نقارن السطر الأول في الشاشتين: هنا لغة بايثون العادية على لينكس.

على Raspberry Pi 4/5: بايثون العادي.
import sys

print("language :", sys.implementation.name)
Raspberry Pi 4/5 · Python 3 · simulated bus
language : cpython
ملاحظة: كُتبت برامج الكتاب للإصدار 1.29 من مايكروبايثون. وجرّبناها أيضا على لوحة ESP32 حقيقية بالإصدار الأقدم 1.21، فعملت بعد تعديلات صغيرة دخلت في الكتاب. أما بطاقة الذاكرة في الفصل 12 فتحتاج إلى الوحدة 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 يشرح الأطراف بالتفصيل. والمحاكاة مثالية، فهي لا تُغني عن اللوحة الحقيقية في المشروع.

▶تجربة حية — البرنامج الأولمايكروبايثون الحقيقي داخل المتصفّح: نختار اللوحة، ونغيّر البرنامج، ونراقب الثنائي الباعث للضوء.
⚠
المختبر غير متاح الآن. المادة في هذا الفصل كاملة من دونه — نواصل القراءة، ونعود إلى التجربة لاحقا أو نفتحها مباشرة من الرابط الذي تحت الإطار.
https://fahed-lab.com/books/micropython/lab/mpy_lab?prog=ch1_blink
نفتح المختبر في صفحة مستقلة ↗ fahed-lab.com/books/micropython/lab/mpy_lab?prog=ch1_blink

أهمّ أفكار الفصل:

أوامر الفصل:

الأمرعمله
print(...)يطبع على الشاشة.
sys.implementation.nameاسم تنفيذ اللغة.
machine.freq()تردد المعالج بالهرتز.
Ctrl-C / Ctrl-Dإيقاف البرنامج / إعادة تشغيل ناعمة.

قاموس المصطلحات – מילון מונחים:

بالعربيةبالعبريةEnglish
المتحكّمמיקרו-בקרMicrocontroller
اللوحةלוחBoard
البرنامج الثابتקושחהFirmware
الحرقצריבהFlashing
المفسّرמפרשInterpreter
برنامج التعريفדרייברDriver
سطر الأوامر التفاعليשורת פקודה אינטראקטיביתREPL
الإجابات النهائية لأسئلة الفصل
1.1 ESP32 أو Pico W يكفيان. الباي زائد عن الحاجة: يقلع نظاما كاملا ليؤدي مهمة بسيطة.

أسئلة للتمرين:

المستوى الأول — أساسي
1.
صنّفوا كل لوحة إلى متحكّم أو حاسوب: ESP32، Pico 2 W، Pi 5.
الإجابات: ESP32 وPico 2 W متحكّمان، وPi 5 حاسوب.
2.
حفظنا برنامجا باسم test.py على اللوحة. هل يعمل وحده بعد إعادة التشغيل؟
الإجابات: لا. تشغّل اللوحة وحدها boot.py وmain.py فقط.
المستوى الثاني — تطبيق
3.
اكتبوا برنامجا يطبع اسم المنصّة وناتج قسمة 3.3 على 2 بمنزلتين عشريتين.
الإجابات:
import sys

print("my board:", sys.platform)
print("3.3 / 2 =", "%.2f" % (3.3 / 2))
السطر الثاني يطبع: 3.3 / 2 = 1.65
4.
برنامج main.py كتبناه ينتهي بعد ثلاث ثوان. ماذا يظهر في نافذة Shell بعد انتهائه؟
الإجابات: يعود السطر التفاعلي، وتظهر العلامة >>>.
المستوى الثالث — تعمّق
5.
لماذا تفشل هذه الفكرة: «نكتب مشروعا لـPico W بالمكتبة machine، ثم ننقله كما هو إلى Pi 5»؟
الإجابات: لأن Pi 5 يعمل بلينكس وبايثون العادي ولا توجد عليه machine. نحتاج إلى مكتبة أخرى مثل gpiozero.