- רכיבים נדרשים
- באמצעות אפליקציית Android nRF Connect ל- ESP32 iBeacon
- מתכנת ESP32 לעבוד כ- BLE iBeacon
ESP32 הוא באמת מכשיר IoT חזק בעל תמיכה מובנית ב- Bluetooth ו- WiFi. ה- ESP32 הוא גרסה מתקדמת של קודמו ESP8266 עם תכונות נוספות כמו RAM, ROM, סיכות GPIO וכו '. מודול ה- ESP32 תומך גם ב- Bluetooth קלאסי וגם ב- Bluetooth Low Energy (BLE), ניתן להשתמש ב- Bluetooth הקלאסי להעברת שירים או קבצים ו- BLE ניתן להשתמש באפליקציות המותאמות לסוללה כמו משואות Bluetooth, להקות כושר, קרבה וכו '. אפשר גם להשתמש ב- ESP32 כ- Bluetooth סדרתי כמו מודולי HC-05 או HC-06 לפרויקטים פשוטים של מיקרו-בקר.
כידוע ה- BLE יכול לפעול בשני מצבים שונים - מצב שרת ומצב לקוח. שני המצבים נדונו במדריכי ESP32 הקודמים שלנו:
- שרת ESP32 BLE - שירות GATT לציון רמת הסוללה
- לקוח ESP32 BLE - חיבור ללהקת כושר להפעלת נורה
במדריך זה נבנה BLE iBeacon באמצעות ESP32 כאשר ESP32 ישמש כשרת וסמארטפון יפעל כלקוח. אני מניח שאתה כבר מכיר כיצד להשתמש בלוח ESP32 עם Arduino IDE, אם לא תחזור להתחלה עם מדריך ESP32.
תוכל גם לדעת יותר מהי טכנולוגיית Beacon / iBeacon על ידי ביצוע פרויקטים קודמים של iBeacon ב- Bluetooth באמצעות Raspberry Pi ו- iBeacon HM-10 BLE.
רכיבים נדרשים
חוּמרָה:
- מועצת הפיתוח ESP32
- כבל מיקרו USB
תוֹכנָה:
- ארדואינו IDE
- אפליקציית אנדרואיד: nRF Connect לנייד (מאת Nordic Semiconductor)
ישנן אפליקציות סורק BLE רבות, אחת מהן השתמשנו בפרויקט הקודם שלנו כיצד להשתמש במודול BLE HM-10 עם Arduino. אפליקציית סורק BLE זו מספקת ממשק גרפי טוב (GUI) אך חסרה מידע נוסף ולכן בפרויקט זה אנו משתמשים באפליקציית NRF Connect for Mobile.
באמצעות אפליקציית Android nRF Connect ל- ESP32 iBeacon
1. הורד את אפליקציית nRF Connect מחנות Google Play ופתח אותה.
2. המסך נראה כמו למטה. האפשרויות השימושיות עבור פרויקט זה יהיו 'סריקה', 'סורק' ו'מידע 'כאשר המכשירים יימצאו.
האפשרות 'סריקה' תשמש כדי לראות את כל iBeacons הזמינים. כדי להתחיל לחפש את iBeacon, משוך את המסך כלפי מטה או עבור אל האפשרות 'סרוק' בפינה השמאלית העליונה של המסך. פעולה זו תתחיל לחפש את iBeacons הזמינים.
3. לאחר חיפוש ב- iBeacon, תוכלו לראות את ה- RSSI, UUID, מייג'ור וקטין של iBeacon. RSSI ישתנה אם תיקח את הנייד או iBeacon אחד מהשני. כאן במסך זה, ה- RSSI הוא (-37). מלבד זאת ישנם כמה פרטים כגון שם החברה של דמה, סוג המכשיר, אורך הבתים, השם המקומי של ESP32. הנה זה " ESP32 כמו iBeacon ". ניתן לשנות את השם המקומי בסקיצה.
4. לאחר הוצאת הסמארטפון מ- iBeacon, ערך ה- RSSI משתנה מ -37 ל -58. ערכים אלה ישתנו אם תזיז אחד המכשירים.
הערכים המקובלים של אות ה- RSSI הם כדלקמן:
עוצמת אות | TL; DR | דרוש ל | |
---|---|---|---|
-30 dBm | מדהים | עוצמת אות מקסימאלית ברת השגה הלקוח יכול להיות רק כמה מטרים מה AP כדי להשיג זאת. לא אופייני או רצוי בעולם האמיתי. | לא |
-67 dBm | טוב מאוד | עוצמת האות המינימלית ליישומים הדורשים משלוח מנות נתונים אמין מאוד בזמן. | VoIP / VoWiFi, הזרמת וידאו |
-70 dBm | בסדר | עוצמת איתות מינימלית למשלוח מנות אמין. | דוא"ל, אינטרנט |
-80 dBm | לא טוב | חוזק אות מינימלי לקישוריות בסיסית. משלוח מנות עשוי להיות לא אמין. | לא |
-90 dBm | לא ניתן לשימוש | מתקרב או טובע ברצפת הרעש. כל פונקציונליות אינה סבירה ביותר. | לא |
מתכנת ESP32 לעבוד כ- BLE iBeacon
יש תוכנית לדוגמא של ESP32 BLE iBeacon זמינה כאשר אתה מתקין את לוח ESP32 ב- Arduino IDE. אך ערכנו מעט את המערכון הזה במדריך זה, הגרסה הערוכה המלאה של תוכנית הדוגמה ניתנת בסוף הדרכה זו.
כדי לפתוח את תוכנית הדגימה של ESP32 BLE_iBeacon פשוט בצע את השלבים הבאים.
- פתח את Arduino IDE ובחר "מודול Dev ESP32". (אם אינך מוצא לוח זה, אנא בדוק אם התקנת את חבילת הלוח ESP32)
- עבור לקובץ > דוגמאות > ESP32 BLE Arduino > BLE_iBeacon
- פתח את סקיצה "BLE_iBeacon".
כעת יש שינוי קל בקוד שנעשה במדריך זה. שם ה- ESP32 יעודכן גם בסקיצה זו. אז התחל עם הכללת ספריות נחוצות אשר ישמשו ביצירת שרת BLE ו- iBeacon.
# כלול "sys / time.h"
זוהי ספריית זמן לקבלת זמן המערכת הנוכחי. זה מכיל פונקציות כגון tv_sec, gettimeofday () וכו '. למידע נוסף, תוכלו לבקר במהדורה הרשמית של UNIX של ' sys / time.h '.
אז נכללות ספריות ESP32 BLE המכילות פונקציות רבות המשמשות לייצור ESP32 בתצורות שונות כגון BLE Client או BLE Server.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
הספרייה iBeacon כלולה אשר קובע את ESP32 כמו iBeacon. יחד עם זאת, ספריית השינה העמוקה כלולה עבור ESP32. הספרייה תשמש לשליחת ESP32 במצב שינה עמוק לפרק זמן מוגדר.
# כלול "BLEBeacon.h" # כלול "esp_sleep.h"
הגדר את משך השינה עבור ESP32. כאן ה- ESP32 יהיה בשינה עמוקה למשך 10 שניות והוא יפרסם ואז שוב ילך לישון עמוק למשך 10 שניות.
# הגדר GPIO_DEEP_SLEEP_DURATION 10
כאן מוגדר ה- RTC_DATA_ATTR. שים לב שאם תגדיר משתנה גלובלי עם תכונת RTC_DATA_ATTR, המשתנה יוכנס לזיכרון RTC_SLOW_MEM. אז המבנה שהוכרז כ- RTC_DATA_ATTR והעתקת הזיכרון הדינמי למבנה זה לפני שינה עמוקה עוזר להחזיר אותו לזיכרון דינמי לאחר ההשכמה. במילים פשוטות אנו חוסכים את הזמן בזיכרון הסטטי מהזיכרון הדינמי כדי לשחזר אותו שוב לאחר שינה עמוקה. כאן מוגדרים שני המשתנים. ה " האחרון " משמש כדי לקבל את הפעם האחרונה כאשר ESP32 הלך לישון עמוק bootcount משמש מספר ספירה של מתאפסת.
זמן סטטי RTC_DATA_ATTR נמשך; RTC_DATA_ATTR ספירת אתחול uint32_t סטטית;
לאחר מכן הגדירו את סוג הפרסום BLE. ההגדרה נעשית באופן הבא.
BLE פרסומות * p פרסומות;
זמן הזמן מוגדר כמבנה לגישה לזמן הנוכחי.
struct timeval עכשיו;
כמו כן מוגדר ה- UUID. ניתן ליצור את ה- UUID מקישור זה .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
כעת צור פונקציה שתכיל תכונות iBeacon כגון UUID, מייג'ור, מינור וכו '. בפונקציה זו צור מופע ל- BLE כ- iBeacon, והגדר מזהה יצרן מזויף, UUID, מייג'ור ומינור עבור ESP32 כ- iBeacon.
בטל setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((ספירת אתחול & 0xFFFF0000) >> 16); oBeacon.setMinor (ספירת אתחול & 0xFFFF);
הגדר את הדגל כ- 0x04 כך שהוא יפלט את BrEdrNotSupport בסורק.
oData.setFlags (0x04);
הגדר נתוני פרסום לפרסום.
std:: string strServiceData = "";
הוסף את המחרוזת בזה אחר זה כדי לפרסם.
strServiceData + = (char) 26; // לן strServiceData + = (char) 0xFF; // הקלד strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
התחל את הפרסום על ידי פרסום נתונים.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
התחל את המסך הטורי בקצב baud של 115200 וקבל את הזמן. כמו כן להגדיל את bootcount לאחסן מספר האיפוס.
Serial.begin (115200); gettimeofday (& עכשיו, NULL); Serial.printf ("התחל ESP32% d \ n", bootcount ++);
אחסן את הזמן הנוכחי בזיכרון הסטטי.
אחרון = now.tv_sec;
צור מכשיר BLE ושם אותו כרצונך. כאן ה- ESP32 נקרא בשם " ESP2 כמו iBeacon ". שים לב ש- השמות יכולים להיות ארוכים אך גרסת קוד זו החלה את התמיכה בשמות ארוכים.
BLEDevice:: init ("ESP32 כ- iBeacon");
צור שרת BLE כדי לפרסם ולהתחיל.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
לאחר מכן הגדר את ה- ESP32 למצב iBeacon.
setBeacon ();
התחל לפרסם ואז הפסק לפרסם והלך לישון עמוק למשך 10 שניות.
pAdvertising-> התחל (); pAdvertising-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
לבסוף חבר את לוח הפיתוח ESP32 עם המחשב הנייד שלך באמצעות כבל מיקרו USB והעלה את הקוד ל- ESP32 באמצעות Arduino IDE. ואז פתח את אפליקציית Android nRF Connect בסמארטפון שלך והתחל בסריקה. תוכלו למצוא את ESP32 כשידור iBeacon כפי שמוצג בתמונה למטה:
כך ניתן להשתמש ב- ESP32 כמגדלור BLE לפרסום UUID, מייג'ור וקטין. אם אתה רוצה לדעת יותר על iBeacon, עקוב אחר ההדרכה הקודמת שלנו בנושא HM10 בתור iBeacon. גם אם יש לך ספק אז הגיב למטה או שאל שאלות בפורומים.
הקוד המלא עם סרטון עבודה מופיע להלן.
/>