לעבודה כמפתח אבטיפוסים בעזרת ארדואינו (לפחות עד שאמצא למה שאני עושה שם קליט יותר) יש הרבה צדדים חיוביים. אחד הבולטים שלהם הוא החשיפה לרעיונות, לשיטות ולכלים שלא הייתי שומע עליהם או מסוגל לממן במסגרת של תחביב בלבד. פוסט זה יעסוק באחד מהכלים הללו – מערכת Synapse SNAP.
אם נחשוב על ארדואינו כעל "מערכת אקולוגית" שמבוססת על סביבת פיתוח במחשב ולוח חומרה, אז SNAP היא מערכת אקולוגית שמבוססת על סביבת עבודה למחשב (שנקראת Portal), שני מודולי חומרה או יותר – ורשת אלחוטית שהמודולים האלה מתחזקים בינם לבין עצמם. כלומר, כל כאב הראש של יצירת רשת אלחוטית פשוט נעלם – המודולים דואגים להתחבר זה לזה, לתווך בינם לבין עצמם (Mesh), למנוע שגיאות בהעברת מידע וכו' וכו' – עד כדי כך שאפשר לצרוב תוכנה במודול מרוחק דרך הרשת!
בכוונה כתבתי מודולים ולא לוחות. שלא כמו הארדואינו, למוצרי SNAP אין חיבור פשוט ל-USB או לסוללה, וגם הגישה לפינים שלהם לא נוחה במיוחד. הם דומים יותר לג'וק סתם מאשר לארדואינו. בשביל לעבוד איתם יותר בקלות יש לוחות Prototyping של אותה חברה או של חברות אחרות, שהמודולים מתיישבים עליהם. לדוגמה, לוח pyXY של SparkFun, שמגיע עם מודול SNAP מדגם SM700. הלוח הזה הוא בעל חתימה זהה לזו של ארדואינו רגיל, כך שאפשר להשתמש בו בתור Shield לארדואינו או להרכיב עליו Shields אחרים שמיועדים במקור לארדואינו. חשוב רק לשים לב שכל החלקים האלה עובדים ב-3.3V ולא ב-5V כמו הארדואינו הסטנדרטי.
התכנות של מודולי SNAP נעשה בשפה שנקראת SNAPpy, שהיא נגזרת בסיסית ומוחלשת מאד של פייתון. התחביר הוא פייתוני, ויש מספר פונקציות מובנות שמעניקות גישה לקריאה וכתיבה של פינים, לפסיקות ושאר דברים שימושיים. עורך הטקסט שמובנה בתוכנת Portal ידידותי (השלמה אוטומטית, הצגת פרמטרים צפויים עבור פונקציות ועוד), ואחרי שמבינים מי נגד מי – תהליך לא לגמרי טריוויאלי – העבודה חלקה ומהנה.
שפת SNAPpy אמנם מוחלשת, אך המודולים יכולים לעבוד עם המחשב עצמו בתור "מודול-על", שמסוגל להריץ כל תוכנה שכתובת בפייתון רגילה. במילים אחרות, עבור מי שמכיר את השפה ורוצה לבנות רשת מקומית של חיישנים ובקרה (כגון מערכת אבטחה אלקטרונית או "בית חכם"), רכיבי SNAP הם פתרון מדהים. גם המעבדים שמסתתרים בתוך המודולים חזקים יותר מאלה של הארדואינו הממוצע (המפרט הספציפי תלוי במודול).
ועכשיו לחדשות הרעות: לכל הנוחות הזאת יש מחיר, תרתי משמע. קודם כל, תוכנת Portal אמנם חינמית, אבל לוח pyXY יחיד עולה 70 דולר, וה-SNAP Bridge שמקשר בין המחשב לבין המודולים העצמאיים עולה בסביבות $30 (וזה לפני שדיברנו על מתאם USB בשבילו). בקיצור, היישום הכי בסיסי שאפשר מתחיל בתג מחיר של מאה ומשהו דולרים, ואם בטעות מודול נשרף, לא תמצאו ג'וק חלופי באיביי בחמישה דולרים.
שנית, לאנשים שהם לגמרי חסרי נסיון יהיה קשה מאד להיכנס לעניינים. נושאי הרשת האוטומטית והניהול שלה מאפילים על הפונקציונליות הבסיסית של מיקרו-בקר, ומי שרוצה בסך הכל להבהב בנורית LED לראשונה בחייו יעבוד כאן הרבה יותר קשה מאשר עם ארדואינו.
שלישית, ל-SNAP חסר החופש שיש בעולם הארדואינו, לבחור את הכלים והתשתיות, לשנות ולהתאים לפי הרצון והצורך. ברור לי שיש אנשים שיראו בזה דווקא יתרון, וברור שמי שממש יתאמץ ויחקור יצליח להתגבר גם על זה בסופו של דבר – ועדיין, אם יורשה לי להתפייט, ארדואינו הוא ארגז חול עם גשר פתוח לעולם הגדול – ואילו SNAP היא גן קסום מוקף חומה עבה.
בדקתי קצת ואת האמת שיש קוד PWM בתוכנה שהוא מובנה כבר.
אבל הבעיה שלי היא איך אני משתמש בו כדי לשלוט בעוצמת האור ?
לא יודע אם אתה מכיר אבל יש את הפעולה poke() שהיא כותבת למקום בזכרון, והם גם משתמשים בפעולה הזאת בקוד שלהם אבל בכל זאת לא כל כך הבנתי איך הם עושים בזה שימוש..
שוב, מכיוון שלא עשיתי דברים כאלה והמודולים כבר לא ברשותי (הוחזרו ללקוח), אתה באותה רמת ידע כמוני… אולי אם תביא את הקוד או קישור לו, אפשר יהיה לנסות להבין ביחד מה קורה שם.
מכיוון שהקוד הוא דיי ענק אני אשלח לך אותו באימייל
אני ראיתי שיש ל – Synapse ארבעה פינים של PWM . השאלה שלי היא כיצד ניתן לקרוא את ערך המתח , כמו שבארדואינו יש את הפעולה analogRead()
האם גם פה יש פעולה דומה?
הכי פשוט שתקרא את המדריך, שם יש את כל התשובות…
http://forums.synapse-wireless.com/upload/SNAP%20Reference%20Manual.pdf
אני כבר חרשתי על המדריך הזה חחח
בארדואינו יש את הפעולה digitalWrite() שבה אנחנו יכול להשתמש בערכים הניתנים כדי לשלוט בבהירות הנורה.
לא מצאתי כזאת פעולה דומה גם ב Synapse ..
יש לך איזשהו רעיון?
אתה מתכוון ל-analogWrite? בכל אופן, לא הגעתי עמוק מדי בעבודה עם הדבר הזה – אם קראת את המדריך אז אתה יודע בדיוק כמוני (אם לא יותר). בהסתכלות ראשונית נראה שאין אופציה מובנית כזו – תצטרך לכתוב קוד PWM לבד…
סבבה הבנתי , תודה רבה על העזרה!
לדעתך אפשר להעביר תמונות דרך המודולים?
כמובן שאפשר להעביר תמונות, כמו כל סוג של מידע, בין מודולים ברשת כזו. עם זאת, יכולה להיות בעיה רצינית של מקום בזיכרון (תמונות יכולות לתפוס הרבה יותר זיכרון ממה שיש במיקרו-בקר), וכן של איטיות – קצב השידור ברשת הזו לא מתקרב למה שדרוש בשביל העברה של תמונות בזמן אמת.
בהחלט מערכת נהדרת לעבודה!!
שאלה קטנה לי אליך : איך היית מתאר את הSynapse Modules ,כלומר מה זה – מערכת ליצירת קשר אלחוטי?
כל מודול בנפרד? אולי… צמתים עצמאיים-למחצה של רשת אלחוטית מבוזרת?
השאלה היא אם כתיבת התוכנית להעברת תמונות היא פשוטה?
אפשר להשתמש בפעולות הבנויות שהממשק PORTAL מציע או שיש צורך גם להשתמש בפקודות של פייתון?
למיטב ידיעתי אין שם פקודות מובנות להעברת תמונות – זה דבר שצריך לפתח ולנהל לבד.