הכרת הלוחות וסביבת העבודה
לפני שכותבים תוכנית אחת צריך שלושה דברים: לוח שמבינים מה הוא מסוגל לעשות, עורך במחשב, וקושחה שגורמת ללוח להבין פייתון. בפרק הזה נכין את שלושתם, נכתוב את התוכנית הראשונה ונלמד מה עושים כשהלוח אינו מגיב.
- נבחין בין מיקרו-בקר למחשב, ונבחר לוח מתאים לכל פרויקט.
- נבין למה השם Raspberry Pi מכסה שני דברים שונים.
- נכין את העורך ונצרוב קושחה ל-ESP32 ול-Pico W.
- נשתמש בשורת הפקודה האינטראקטיבית, ונבדיל בין הרצת קובץ לשמירתו בלוח.
- נפתור תקלות נפוצות בחיבור.
1.1 מיקרו-בקר או מחשב? (Microcontroller vs Computer)
המחשב שאנחנו כותבים עליו מריץ מערכת שלמה ועשרות תוכנות בבת אחת, ורוב זמנו עובר הרחק מחוטים ומהדקים. המיקרו-בקר עושה דבר פשוט בהרבה: מריץ תוכנית אחת, וקורא ומשנה ישירות את המתח בהדקיו.
| מיקרו-בקר | מחשב | |
|---|---|---|
| מערכת הפעלה | בדרך כלל אינה נחוצה | חיונית: לינוקס או אחרת |
| עם חיבור המתח | התוכנית מתחילה מיד | קודם עולה המערכת |
| זיכרון RAM | מאות קילובייט | כמה ג׳יגה-בייט |
הנחיה מעשית: אם הפרויקט קורא חיישן ומפעיל רכיב פלט, מיקרו-בקר מספיק, ואף עדיף. אם הוא צריך מסך גדול, מצלמה או עיבוד כבד, צריך מחשב.
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 |
| שפה | מיקרו-פייתון | מיקרו-פייתון | מיקרו-פייתון | פייתון על לינוקס |
| ממיר A/D פנימי | 12 סיביות | 12 סיביות | 12 סיביות | אין |
המספרים לקוחים מתיעוד היצרנים, וזיכרון ה-Pi תלוי בדגם. נפח האחסון ב-ESP32 משתנה לפי היחידה, ואילו ב-Pico W הוא 2 MB וב-Pico 2 W הוא 4 MB.
machine אינה קיימת ב-Pi.מתי בוחרים כל לוח?:
- ESP32: כשהחיבור לרשת הוא לב הפרויקט, או כשצריך פלט אנלוגי אמיתי DAC.
- Pico W ו-Pico 2 W: כשרוצים לוח עם תיעוד פשוט, התקנה בהעתקת קובץ אחד, והדקים אנלוגיים שאינם דורשים כיוון.
- Pi 4/5: כשצריך מערכת קבצים גדולה, מצלמה, מסך או תוכנות כבדות. הוא אינו מתאים לתזמון מדויק, כי המערכת עלולה להפסיק את התוכנית בכל רגע.
1.3 מהי מיקרו-פייתון? (MicroPython)
מיקרו-פייתון היא מימוש מוקטן של שפת פייתון שרץ ישירות על הבקר. היא מגיעה ללוח כקושחה, קובץ אחד שכותבים לזיכרון הלוח פעם אחת, ובו המפרש, שורת הפקודה, ספריות הלוח ומערכת קבצים קטנה. אחר כך אין מהדרים דבר: שולחים קובצי טקסט, והמפרש מריץ אותם.
1.4 הכנת המחשב (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.
ועכשיו אותה תוכנית ב-Pi, בלי 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.