אם הדרישות שלכם לא גבוהות במיוחד, כרטיס סיני קטן, זול ולא-מוכר יעביר את תקשורת ה-UART שלכם (או סיגנלים בדידים) דרך האוויר ואולי גם קיר או שניים. הנה המידע הפרקטי שתצטרכו כדי להשתמש בו.
את המודול הקטן הזה – 22 על 14 על 2 מילימטרים, בערך – גיליתי לקראת סוף השנה שעברה באתרים הסיניים, וכיוון שהוא זול כל כך (סביבות דולר עד שניים, תלוי איפה וכמה קונים) הזמנתי יחידות ספורות כדי להבין במה מדובר ועד כמה, אם בכלל, הוא יכול להיות שימושי לפרוייקטים שלי.
איך שהמודולים הגיעו, גיליתי בעיה: הריווח הפחות-סטנדרטי של החורים. באתר ממנו קניתי לא ציינו במפורש שזהו רווח של 2.0 מ"מ, לא 2.54 מ"מ המוכר והאהוב בקרב המייקרים. המידע הזה מופיע רק ב-datasheet של JDY-40, שמצאתי מאוחר יותר. פתרתי את הבעיה בעזרת header בריווח 2.54 מ"מ עם פינים ארוכים, שכופפתי עם שפיץ-פלאייר בצד אחד, כמו שרואים בתמונה בתחילת הפוסט. מי שרוצה יכול, לחלופין, להלחים חוטים, לקנות לוח מתאם קטן וכדומה.
כפי שכל מייקר יזהה בקלות, האנטנה שעל ה-PCB של המודול היא לתדר 2.4GHz, אך המודול אינו מודול WiFi וגם לא Bluetooth. למיטב הבנתי הוא מסתמך על איזשהו פרוטוקול תקשורת קנייני שמסתתר בתוך הג'וק הראשי שעל המודול, BK2461 של חברת Beken Corporation הסינית. על הג'וק השני, הקטן (מארז SOT-23-5), כתוב 24C02S, והוא כנראה ג'וק זיכרון EEPROM בנפח 2Kbit (כלומר 256 בייט), אף על פי שלמראית עין, הקווים שאמורים לשמש לתקשורת I2C בינו לבין ה-BK2461 לא מתחברים למקומות הנכונים שם. מבחינת רכיבים, שני הג'וקים האלה ומתנד 16MHz אקטיבי הם פחות או יותר כל מה שיש על הלוח. את המתח הדרוש להפעלה – 2.2V עד 3.6V – תצטרכו לספק לבד.
המודולים האלה עובדים בזוגות, והם מסוגלים לפעול בשני אופנים עיקריים: בתור UART דו-סטרי אלחוטי (בקצב 1200, 2400, 4800, 9600, 14400 או 19200 באוד לבחירתנו), או כ"שלט רחוק" שבו חיבורי הפלט (הצדדיים, בריווח 1.5 מ"מ) במודול הקולט מגיבים לשינויי מתח בחיבורים המקבילים במודול המשדר. במפרט של ה-BK2461 כתוב שהוא מבצע אימות של השידורים, ואם זה נכון, סביר להניח שאי אפשר לשדר באופן אמין בין שלושה מודולים או יותר, אך לא בדקתי את העניין לעומק. בכל מקרה, לפני שנוכל להשתמש במודולים נצטרך להגדיר בהם כמה פרמטרים, וזה נעשה באמצעות פקודות AT דרך תקשורת UART קווית רגילה, אך שימו לב, כיוון שהמודול פועל במתח נמוך, אסור לחבר אותו ישירות לארדואינו רגיל שפועל ב-5V.
תהליך ההגדרה
לפני שנוכל לעבוד עם פקודות AT, צריך קודם כל "למשוך" את פין CS של המודול לאדמה (אחרת הוא יהיה במצב שינה חסכוני בחשמל). כשהמודול יתעורר – מדדתי בערך 30 אלפיות השנייה – הוא יוציא מפין TX שלו את המחרוזת "Wake". כך אפשר לדעת שהוא מחובר נכון ופועל. אפרופו, אם CS יהיה מחובר לאדמה לפני שהמודול מקבל חשמל, אז ברגע החיבור לחשמל הוא ישלח את המחרוזת "START". בנוסף ל-CS, צריך "למשוך" גם את פין SET לאדמה, וזה יעביר את המודול ממצב שידור למצב הגדרה.
במצב ההגדרה, נעביר לפין RX של המודול את פקודות ה-AT הרצויות, וחשוב לזכור לסיים כל פקודה בתו ASCII מס' 13 (CR) ואחריו תו מס' 10 (LF). אחרי כל פקודה שבוצעה בהצלחה, המודול ישלח מ-TX את המחרוזת "OK". את הפקודות השונות, הפרמטרים והמשמעות שלהן אפשר למצוא כמובן ב-datasheet של המודול. לדוגמה, כדי לקבוע את עוצמת השידור האלחוטי ל-6db (אופציה מס' 5 ברשימת העוצמות) נשלח את הפקודה
AT+POWE5
אפשר לקרוא את הערכים הנוכחיים שמוגדרים במודול על ידי כתיבת הפקודה ללא פרמטר. למשל, כדי לדעת מהי אופציית קצב השידור שמוגדרת כעת, נשלח את הפקודה
AT+BAUD
קודם כל, נגדיר את ה"כתובת" של המודול. בכל זוג שעובד ביחד, ההגדרות האלה (שנקראות RFID – מזהה אלחוט, DVID – מזהה התקן, ו-RFC – ערוץ אלחוטי) צריכות להיות זהות. שני המזהים יכולים לקבל ערכים בין 0000 ל-FFFF (צריך לכתוב ארבע ספרות הקסדצימליות בפקודה), ואילו הערוץ יקבל ערך בין 000 ל-128 (שלוש ספרות, עשרוני). אגב, המשמעות של הערוץ היא תדר ממשי, ולכן – בניגוד למזהים – ערוץ לא זהה אך קרוב מאוד (למשל 001 במודול אחד ו-002 בשני) כן עשוי להעביר חלק מהמידע, בצורה משובשת.
ברירת המחדל לעוצמת השידור היא אופציה מס' 9 שהיא 12db, המקסימום האפשרי, וקצב השידור הוא 9600 באוד (אופציה מס' 4). שימו לב: כל שינוי בהגדרת קצב השידור ייכנס לתוקף מייד, ותקף גם למצב ההגדרה עצמו וגם למצב השידור. לדוגמה, אם שיניתם את הקצב ל-14400 באוד, כל הפקודות הבאות שתשלחו (או שידורי UART) יהיו חייבות להיות ב-14400 כדי לעבוד!
לסיום, ההגדרה CLSS קובעת מה יהיה התפקיד של המודול. ברירת המחדל, הערך A0, אומרת שהמודול יהיה מקמ"ש UART: כל סיגנל UART חוקי שייכנס ל-RX במודול אחד ייצא ב-TX של השני ולהיפך. הערכים C0 ו-C1 הופכים את המודול למשדר סיגנלים בדידים שנקלטים ב-GPIO (ההבדל בין האפשרויות הוא שב-C0, החיבור האחרון אמור לשמש ללד אינדיקציה), ואילו הערכים C2 עד C5 הופכים את המודול למקלט (ההבדל הוא צורת הפלט מה-GPIO – פולס חיובי קצר, שלילי קצר, פולס מתמשך או החלפת HIGH ו-LOW לסירוגין).
קצת בדיקות
הטווח המוצהר של המודולים, כמובן בשטח פתוח, הוא 120 מטרים בעוצמת שידור מקסימלית. בתוך הבית, כשהמקלט באזור רועש יחסית (בסביבת מחשב, נתב וכו'), הצלחתי לקלוט שידורים מרחבי הקומה וגם קצת יותר מזה – לא כיסוי מושלם, אבל סביר ביחס לתדר ולצריכת החשמל, עליה נדבר מייד.
פרמטר אחר שעניין אותי מאוד היה ה-Latency, כמה זמן עובר מרגע שהמידע נכנס אל המודול המשדר ועד שהוא יוצא מהמודול הקולט. מטבע הדברים המודולים היו קרובים זה לזה במהלך הבדיקה, בסביבות מטר אחד, כדי שאוכל לחבר את שניהם לסקופ – אבל זה לא אמור לשנות. ההפרש יצא קצת פחות מ-0.4 אלפיות השנייה, מסוף התו הראשון שנקלט (סוף ה-Stop bit שלו) ועד תחילת ה-Start bit של התו הראשון בפלט.
בדקתי את צריכת החשמל של המודול באמצעות ה-Joulescope, והיא הייתה די קרובה להבטחות שב-Datasheet: במצב שינה (כש-CS לא מחובר לאדמה) המודול צרך כ-7 מיקרואמפר (לעומת 5 שהובטחו), ובמצב פעיל כ-22 מיליאמפר (לעומת 24). כששידרתי שני תווים בעוצמת שידור מרבית, הצריכה זינקה לשיאים מדאיגים של כ-110 מיליאמפר פלוס מינוס – אך רק פעמיים ורק למשך 150 מיליוניות השנייה כל פעם, שזה כמו ביט וחצי בלבד ב-9600 באוד. כלומר, השידור הפיזי באוויר נמשך פחות זמן משידור ה-UART, ואם עושים ממוצע על פני זמן ה-UART, הצריכה יורדת ל-23 מיליאמפר בלבד (לעומת 40 ב-datasheet). כדאי לציין שהשידור הזה התבצע ללא מקלט פעיל בצד השני, אז אם צפוי איזשהו דו-שיח ביניהם, הוא לא מופיע כאן. כל המדידות הנ"ל נעשו במתח הפעלה של 3.3V.
אופן הפעולה ה"בדיד", עם חיבורי ה-GPIO, אכזב ובגדול. במצב C0, לד האינדיקציה במשדר לא באמת מראה לנו מתי נשלח משהו – הוא פשוט דולק חלש כל הזמן, כאילו כותבי הקושחה שכחו בכלל לתפעל אותו והשאירו אותו עם pull-up פנימי חלש וקבוע. בנוסף, הפלט לא מקבילי! במצב C4, בו פלט המקלט אמור לחקות את קלט המשדר, אם יותר מחיבור אחד בצד המשדר ירד ל-0, הצד הקולט ידליק רק יציאה אחת (זו עם מספר החיבור הגבוה ביותר מבין הרלוונטיות, אם הבנתי נכון). כל עוד לא נוגעים בכלום, המשדר נשאר במצב שינה חסכוני של כ-15 מיקרואמפר, והצריכה עולה ל-3.5 מיליאמפר רציפים כל עוד יש חיבור פעיל (עם הגדרת עוצמת שידור מקסימלית, ולא בדקתי כאן את ה"פיקים" של השידור). המקלט צורך כל הזמן כ-23 מיליאמפר. זמן התגובה ארוך יותר מאשר בשידור UART – כ-70 אלפיות השנייה משינוי הקלט במשדר ועד לשינוי הפלט במקלט.
חשוב לזכור שכדי שאופן הפעולה הבדיד יעבוד, פיני ה-SET וה-CS בשני הצדדים חייבים להיות מנותקים מהאדמה.
השורה התחתונה
למודולים בסגנון ה-JDY-40 יש שלושה יתרונות חשובים למייקרים: הם זולים, הם עובדים (בניגוד ל"קיט RF" הידוע-לשמצה למשל), ואחרי שמשלימים את ההגדרה הראשונית שלהם, הם כמעט לא דורשים שום משאבים מהמיקרו-בקר (בניגוד למודולים שדורשים הכנה מיוחדת של packets, ספריות ייעודיות וכדומה).
מצד שני, לפחות נכון להיום מדובר במודול לא-מוכר יחסית: לכו תדעו אם בעוד שנה אפשר יהיה להשיג כאלה. התקשורת הקניינית, ששייכת לאיזו חברה עלומה, לא עוזרת לחזק את הביטחון בהישרדות המודול הזה והשתלבותו בשוק. האם הוא בכלל עומד בתקנים של הפרעות אלקטרומגנטיות?
אז לפרויקטים ביתיים, קטנים וחד-פעמיים, ה-JDY-40 יכול להיות יופי של פתרון: קומפקטי, נוח לתפעול וכל זה. לעבודות חשובות יותר הייתי נזהר איתו מאוד, לפחות עד שיצטבר מידע נוסף.