צעדים ראשונים עם Xiao RP2040

לוח פיתוח קומפקטי במיוחד וזול, עם המיקרו-בקר הלוהט ביותר בשוק – לא ננסה? הנה מה שצריך לדעת כדי להתחיל לעבוד עם הלוח החדש מבית Seeed Studio, בשפת התכנות MicroPython.

לוח Seeed Xiao RP2040 והשקית שבה הגיע
לוח Seeed Xiao RP2040 והשקית שבה הגיע

מה זה Xiao RP2040?

למי שעוד לא מכיר, Xiao ("קטן" בסינית, מבטאים "שְׂיָאו") היא סדרה של לוחות פיתוח שנראים כמעט זהים זה לזה, אך מבוססים על מיקרו-בקרים שונים. הדגם הראשון, שהופיע בסוף 2019 אם אינני טועה ועדיין זמין היום, בנוי סביב מיקרו-בקר SAMD21. ה-Xiao RP2040 הוא תוספת חדשה למשפחה, והוא נקרא כמובן על שמו של השבב החדש והנוצץ מבית Raspberry Pi, שזכה לתהילת עולם בחודשים האחרונים בזכות העובדה שאפשר להשיג אותו. כן, זה אותו צ'יפ שנמצא גם בלוחות Rasberry Pi Pico.

אגב, קצת קשה לקרוא ל-RP2040 "מיקרו-בקר". אמנם יש לו שתי(!) ליבות ARM Cortex M0+ וזיכרון SRAM בנפח 264K, אבל אין לו שום זיכרון FLASH או EEPROM מוּבנים שאנחנו יכולים להשתמש בהם. בכל יישום, כולל ה-Xiao, הוא חייב להיות מלווה בשבב זיכרון FLASH חיצוני בשביל הקוד שלנו. במקרה של ה-Xiao וה-Pico מדובר בנפח זיכרון של 2MB. הפרמטרים האלה הופכים את ה-Xiao לחזק מספיק בשביל להריץ תוכניות MicroPython.

למה MicroPython?

בדפי ה-Wiki של ה-Xiao מצוינים שלושה אופנים לתכנת אותו: דרך סביבת הפיתוח של ארדואינו, ב-MicroPython או ב-CircuitPython. מן הסתם אפשר גם לצרוב קוד ישירות מסביבת פיתוח מקצועית ועם צורב מתאים, אך את זה נעזוב בינתיים. את נתיב הארדואינו אחקור אולי בעתיד, אך בשלב זה, ובהתחשב בתסריטי השימוש הצפויים בלוח ה-Xiao, פייתון – למרות כל החסרונות הידועים – נראית לי כיוון סביר בהחלט, וכיוון ש-CircuitPython היא בעצמה נגזרת של MicroPython, למה לא ללכת ישר על המקור.

התקנות

כדי שה-Xiao יוכל להריץ תוכניות MicroPython, הוא צריך את האינטרפרטר – המפענח בזמן אמת – של השפה. לפי ה-Wiki אפשר להתקין אותו בקלות דרך סביבת הפיתוח שנכיר מיד, אך באופן מרגיז (ובינינו, לא לגמרי מפתיע) הטריק הזה לא עבד:

שגיאה בצריבה של קושחת מיקרו-פייתון מסביבת הפיתוח Thonny
שגיאה בצריבה של קושחת מיקרו-פייתון מסביבת הפיתוח Thonny (לחצו לתמונה גדולה)

אולי בעתיד העניין יתוקן וזה יעבוד. בינתיים נבצע תהליך אחר שישיג את אותה מטרה. אגב, אם קראתם את הטקסט בתמונה למעלה, בטח שמתם לב שהקושחה שניסיתי להתקין היא של לוח Pico דווקא. כן, זה בכוונה וזה מה שצריך לעשות, כי מסתבר שה-Xiao די מתחזה ל-Pico.

אז ככה: קודם כל נוריד למחשב שלנו את קובץ האינטרפרטר שמותאם ל-Pico. הסיומת שלו היא uf2 ומורידים אותו מכאן. כשהלוח עדיין לא מחובר לשום דבר, נלחץ ברציפות על כפתור ה-Boot שלו (הכפתור הזעיר שנמצא, במבט מלמעלה, בפינה הימנית התחתונה ומסומן באות B). כעת, תוך כדי הלחיצה, נחבר את הלוח בעזרת כבל USB למחשב. הלוח ייפתח בסייר הקבצים של המחשב כמו כונן חיצוני. נעתיק לתוכו את הקובץ שהורדנו, נחכה קצת… וזהו. הכונן המדומה ייעלם, והאינטרפרטר מותקן על הלוח ומוכן לפעולה. את התהליך הזה צריך לבצע פעם אחת בלבד – לפחות כל עוד אנחנו ממשיכים להשתמש ב-MicroPython.

סביבת הפיתוח שמותאמת לשילוב של Xiao עם MicroPython היא Thonny. מורידים אותה מהקישור ומתקינים – זו התקנה בסיסית ופשוטה מאוד – ואחר כך מגדירים לה שהיעד שלנו הוא… נכון, Pico. לשם כך בוחרים בתפריט Tools->Options, בחלון שנפתח לוחצים על הלשונית Interpreter, ובתיבה הנפתחת העליונה בוחרים "MicroPython (Raspberry Pi Pico)".

בחירת לוח היעד המתאים ל-Xiao באפשרויות של סביבת הפיתוח Thonny
בחירת לוח היעד המתאים ל-Xiao באפשרויות של סביבת הפיתוח Thonny (לחצו לתמונה גדולה)

גם את הפעולה הזו צריך לעשות, לפחות בתיאוריה, רק פעם אחת. עכשיו אפשר להתחיל לכתוב תוכניות ל-Xiao.

מיפוי הפינים

ללוח ה-Xiao יש 14 פינים "רגילים" בסך הכול, והמקרא שלהם כתוב רק בצד התחתון. אבל לא קשה לזהות אותם גם במבט מלמעלה: בפינה הנגדית לכפתור ה-Boot שעליו לחצנו קודם נמצא פין מס' 0, מתחתיו פין 1 וכן הלאה נגד כיוון השעון, עד פין 10 כולל. אלה הם 11 פיני ה-GPIO, ואילו הבאים אחריהם הם 3V3 (ממייצב מתח מובנה על הלוח), GND, ו-Vcc (או Vin, מתח האספקה החיצוני). שימו לב שהצ'יפ עצמו עובד ב-3.3 וולט וזה גם המתח שפיני הקלט/פלט מסוגלים לספוג או לתת. המייצב המובנה הוא מדגם RS3236-3.3YUTDN4, שמסוגל לתת עד 500mA. מאיפה אני יודע? יש שרטוט סכמטי של הלוח במורד הדף כאן.

מיפוי הפינים של ה-Xiao
מיפוי הפינים של ה-Xiao, במבט מלמטה (לחצו לתמונה גדולה)

כמו שציינתי למעלה, כל התוכנות שלנו חושבות שהלוח הזה הוא Pico, אבל מיפוי הפינים שונה לגמרי (חוץ מזה של-Pico יש הרבה יותר). אז אם נרצה, למשל, לשלוט בפין 0 של ה-Xiao, בפועל נצטרך לגשת לפין ש-MicroPython מזהה כפין מספר 26. הנה כל המספורים וגם התפקידים הנוספים של הפינים, שלקחתי מאותו דף באתר של Seeed Studio. המספרים בירוק (שמסומנים עם D) הם של Xiao, ואלה באפור (P) הם המספרים שבהם נשתמש כמתכנתים ב-MicroPython.

מיפוי ומקרא הפינים של ה-Xiao ותפקידיהם, מבט מלמעלה
מיפוי ומקרא הפינים של ה-Xiao ותפקידיהם, מבט מלמעלה (לחצו לתמונה גדולה)

הרצה ושמירה של קוד

כדי להעלות קוד MicroPython מסביבת הפיתוח Thonny ללוח ה-Xiao, היא צריכה לזהות קודם כול שהוא מחובר. את זה עושים (מאוד לא אינטואיטיבי, יש לציין) בלחיצה על סמל תמרור העצור האדום. אם הלוח מחובר למחשב והכול תקין, נקבל את ממשק ה-REPL (פענוח והרצת פקודות בזמן אמת) בחלונית Shell למטה. שימו לב, אם פתוחה במחשב איזו תוכנה שגונבת את כל ה-COM Ports (אני מסתכל עלייך, Ultimaker Cura!) הלוח לא יזוהה.

אייקון החיבור (למעלה) ושורת ה-REPL ב-Thonny
אייקון החיבור (למעלה) ושורת ה-REPL ב-Thonny (לחצו לתמונה גדולה)

כשהלוח מזוהה בצורה כזו, אנחנו יכולים לכתוב פקודות ב-REPL והן ירוצו על הלוח, אבל בדרך כלל נרצה לכתוב תוכנה שלמה בחלונית למעלה ולהעלות אותה ללוח בעזרת האייקון הירוק. הוא יכריח אותנו לשמור אותה לפני כן באיזשהו מקום. זהירות, זו מלכודת! אתם לא באמת רוצים לשמור אותה על הלוח, אלא במחשב שלכם. לחצו על הכפתור העליון.

הקוד ירוץ על הלוח, בחיי. אבל יש פה עוד מלכודת. בניגוד לארדואינו, אם תנתקו את הלוח מה-USB ותחברו אותו מחדש, התוכנית האחרונה שהעליתם לא תרוץ שוב. היא לא שם בכלל. היא הייתה זמנית בלבד. איזה מזל ששמרנו אותה במחשב ואפשר לטעון אותה מחדש!

אבל כמובן, רוב הזמן אנחנו כן רוצים שתוכניות שהעלינו ללוח ירוצו עליו באופן עצמאי. לשם כך צריך לשמור אותן על הלוח עצמו, ולא סתם אלא בשם הספציפי "main.py". האם זה אומר שכל קובצי הקוד שלנו מעתה ועד עולם ייקראו main.py? ממש לא. אחרי ששמרנו את התוכנית במחשב באיזה שם שבא לנו, נבחר בתפריט File->Save copy, והפעם במקום This computer נלחץ על הכפתור התחתון, Raspberry Pi Pico, ונכתוב את השם main.py או פשוט נבחר אותו אם הוא כבר קיים שם. זהו, מעכשיו התוכנית תרוץ בלי טובות. דרך אגב, אפשר לשמור עוד תוכנית, עם השם "boot.py", והיא תרוץ לפני main.py. לכן רצוי מאוד ש-boot.py, אם משתמשים בה, תהיה תוכנה שאכן נגמרת בזמן סביר, ולא איזו לולאה אינסופית.

קוד בלינק, סוף סוף

אם לא התייאשתם לגמרי מכל התהליכים הקטנוניים האלה – ויש עוד כמה שתגלו בהמשך לבד – אתם בטח רוצים להריץ כבר איזה לד מהבהב. על ה-Xiao יש הרבה אופציות: לד Addressable יחיד (בין הלחצנים), ולד RGB רגיל שמחובר לפינים פנימיים שמספריהם 25, 17 ו-16. כמובן, כדי לשגע אותנו, הם מחוברים בלוגיקה הפוכה, כך שהפקודה on מכבה את הלד ו-off מדליקה אותו, אבל מילא. בנוסף, הלד הירוק מופעל כברירת מחדל ולא כבה אם לא מכבים אותו במפורש. אז הנה קוד שמהבהב בלד האדום:

צילום מסך של קוד בלינק אדום ל-Xiao RP2040
צילום מסך של קוד בלינק אדום ל-Xiao RP2040

הספריה machine היא זו שמעניקה לנו גישה לרוב הדברים המעניינים במיקרו-בקר, ואפשר לקרוא עליה כאן. ספריות אחרות שאינן כלולות בהתקנה (למשל ספריית neopixel) ניתן להוריד ולהתקין בעצמנו, אך זה, כמו הנושא של שימושים מעשיים ל-Xiao, יחכה לפוסט אחר.

להרשמה
הודע לי על
0 תגובות
Inline Feedbacks
הראה את כל התגובות