בפוסט שכתבתי לא מזמן על שפת התכנות MicroPython, טענתי שהיא עשויה להצליח בעולם המייקרים ואפילו להתחרות בארדואינו אם הסינים ייצרו לוחות זולים עם MicroPython מובנית ויכולות חומרה מעניינות. רגע אחרי שפרסמתי את זה, חשבתי פתאום: מי אמר שהם לא עשו את זה כבר? ואכן, חיפוש קצר באיביי העלה לוח "תואם pyBoard 1.1" ב-15 דולר בלבד. בואו נראה אם ארדואינו צריכים להתחיל לשקשק.
יש הבחנה אחת חשובה מאוד שצריך לעשות לפני שמתחילים. ישנם לוחות פיתוח, כמו ה-BBC Micro:bit, ש-MicroPython תומכת בהם אבל לא מובנית בהם. מה זאת אומרת? כשאנחנו מעלים קוד MicroPython ל-Micro:bit בשיטות המקובלות, אנחנו למעשה מעלים אליו כל פעם מחדש גם את הקוד שכתבנו בעצמנו וגם את כל התוכנה הענקית שמפרשת ומריצה את הקוד הזה בזמן אמת. בלוחות אחרים, לעומת זאת, פלטפורמת התוכנה מגיעה צרובה מראש, או שאנחנו צורבים אותה פעם אחת בלבד, ומה שאנחנו מעלים לאחר מכן ללוח הוא קוד ה-MicroPython הטקסטואלי והפשוט בלבד. זה המצב, למשל, בלוחות Pyboard הרשמיים ובלוח שקניתי. כשמחברים אותם למחשב הם מתחזים להתקן זיכרון נייד, שאליו אנחנו מעתיקים את הקובץ עם קוד התוכנה שכתבנו.
הלוח שקניתי, כך הסתבר, מיוצר על ידי חברה סינית שמתעסקת הרבה ב-MicroPython, והאתר שלה נמצא בכתובת הסקסית turnipsmart.com (בעברית אולי היינו קוראים לזה "חוכמת הלפת?") ואכן, תוך כדי העבודה עם הלוח שלהם הרגשתי לא פעם שאני מנסה לתכנת לפת, אבל על כך בהמשך. מבחינת רכיבי חומרה, הלוח (ששמו הרשמי TPYBoardV102) דומה מאוד ל-Pyboard מקורי: יש לו ארבעה לדים בצבעים שונים, מד תאוצה מובנה (3 צירים), חיבור לכרטיס MicroSD, חיבור USB, לחצן אתחול, לחצן לשימוש כללי, פיני GPIO ומיקרו-בקר STM32F405RGT6 חזק עם 1MB זיכרון FLASH ו-192KB זיכרון RAM, במהירות 168MHz. העיצוב, לעומת זאת, שונה במובהק מה-Pyboard, ולאו דווקא לרעה: לדעתי הוא נוח ומרווח יותר.
באיביי נטען כאמור שהלוח תואם ל-Pyboard v1.1. השקר הזה גרם לי לבזבז המון זמן כשניסיתי לעדכן את הקושחה מגרסה 1.8.2 (שהגיעה עם הלוח) ל-1.9.3 העדכנית, כי הגרסה שמיועדת ללוחות v1.1 גרמה ללוח פשוט להפסיק לעבוד. בסופו של דבר הגביש שעל הלוח הסגיר את הסוד: בלוחות v1.1 הוא אמור להיות בתדר 12MHz ואילו בלוחות v1.0, כמו אצלי, זה 8MHz.
למען הזיכרון הארגוני, הנה השיטה בה השתמשתי לצריבת קושחה חדשה. מורידים את גרסת הקושחה הרצויה מכאן (קובץ עם סיומת dfu) ומשיגים את התוכנה dfu-util. זו תוכנה לא-גרפית שב-Windows מפעילים אותה מה-command prompt. הכי נוח להעתיק את קובץ ה-dfu שהורדנו לאותה תיקיה שבה נמצאת התוכנה. בלוח עצמו צריך, לפני החיבור למחשב, לחבר את פין DFU ל-3V3. כעת כשמחברים את הלוח למחשב הוא מזדהה בתור "STM32 Bootloader" שיודע "לדבר" עם dfu-util. מריצים את התוכנה עם הפקודה:
dfu-util –alt 0 -D [dfu-file-name]
וכשהיא גומרת לצרוב, מנתקים את הלוח, מחברים את פין DFU בלוח ל-GND ובשאיפה הכול יעבוד.
- תוספת מאוחרת: שנה וחצי מאוחר יותר, שיטה זו נכשלה. היו שני דברים שצריך לעשות בנוסף: 1) בעזרת התוכנה Zadig, להמיר את הדרייבר של הלוח (זה ש-Windows אמור לזהות אוטומטית) בדרייבר Winusb, ו-2) במקום לכתוב alt בפקודה, כותבים רק a …
לרוע המזל, ה"פטנט" של הכונן המדומה לא עובד כמו שצריך בלוח שלי. אפשר לפתוח ממנו את קובץ הקוד הקיים (שנקרא "main.py"), לערוך ואפילו לשמור, וזה יעבוד. אבל רק לפעמים. בפעמים האחרות, אם מנסים לשנות עוד משהו בקובץ, או אפילו סתם לשמור אותו עוד פעם, הכונן הווירטואלי מתחרפן. מערכת ההפעלה טוענת שהקובץ כבר תפוס על ידי יישום אחר, ואפילו ניתוק וחיבור מחדש לא עוזרים. הפתרון היחיד שמצאתי בינתיים במקרה כזה הוא לבצע תהליך של אתחול הכונן בצד הלוח: לוחצים על כפתור USR ואז, בלי לעזוב, מוסיפים לחיצה קצרה על RST. שניים מהלדים מתחילים להידלק ולכבות. כששניהם דולקים יחד עוזבים את USR ותוך כמה שניות הלוח מתאפס על עצמו… וכמובן מאבד את התוכנה שכתבנו לו קודם. אם לא שמרנו אותה על המחשב לגיבוי, היא אבודה לנצח.
ומה בנוגע לביצועים? כזכור, עם MicroPython על ה-BBC Micro:bit הצלחתי להפיק גל ריבועי בתדר מעליב של 1.34KHz, ושם מהירות השעון של המיקרו-בקר היא 16MHz. מה יקרה פה עם מהירות שעון גבוהה פי 10.5? העתקתי את הקוד מהבדיקה ההיא, עם מינימום שינויים הכרחיים, והגעתי ל-27KHz. שיפור ניכר גם אבסולוטית וגם יחסית, ועדיין ביזיון עמוק. מד התאוצה עובד, למרבה ההפתעה, ומחזיר ערכים בסקאלה התמוהה של מינוס עשרים עד עשרים, בערך, בכל ציר (מספרים שלמים בלבד!). זה הספיק כדי לכתוב את היישום לדוגמה שמופיע בסרטון. צריכת החשמל שלו, כולל לד אחד שדולק בכל רגע נתון, היא כ-25 מיליאמפר.
בקיצור, אם מתעקשים לעבוד עם MicroPython, הלוח הסיני הוא פתרון נסבל וזול יחסית. אבל הוא לא באמת מתאים למתחילים. גם בגלל התסכול שהכונן הווירטואלי גורם, וגם בגלל שעדיין אין סביבת פיתוח נורמלית ל-Pyboard, כזו שתדע לסמן מילות מפתח רלוונטיות ולהשלים קוד, או לפחות להציע השלמות והסברים, כפי שנעשה ב-Mu Editor שהצגתי כאן. למתחילים גמורים, האפשרות לכתוב קוד ב-notepad היא לא תמיד יתרון מופלא כמו שמנסים להציג את זה. ארדואינו יכולים בינתיים להמשיך לישון בשקט.
נכון להיום, שפת MicroPython מנסה לכבוש את לב המייקרים בשני ערוצים נוספים שעדיין לא דיברתי עליהם. הראשון הוא לוחות CircuitPython של Adafruit, שלמרות ההשקעה הגדולה בהם קשה לראות איך הם יזכו להצלחה עולמית, מה גם שהם בנויים לתת-גרסה נפרדת של MicroPython ולא לשפה ה"רשמית". הערוץ השני הוא לוחות מבוססי ESP8266, כמו NodeMCU. האם לאלה האחרונים יש איזשהו סיכוי להצליח איפה שכל השאר נכשלים?