ESP32 هو حقًا جهاز إنترنت الأشياء قوي له دعم داخلي للبلوتوث والواي فاي. يعد ESP32 إصدارًا متقدمًا من سابقه ESP8266 مع ميزات إضافية مثل ذاكرة الوصول العشوائي وذاكرة القراءة فقط ودبابيس GPIO وما إلى ذلك. تدعم وحدة ESP32 كلاً من البلوتوث الكلاسيكي وبلوتوث منخفض الطاقة (BLE) ، ويمكن استخدام البلوتوث الكلاسيكي لنقل الأغاني أو الملفات و BLE يمكن استخدام الخيار للتطبيقات المُحسّنة للبطارية مثل إشارات البلوتوث ونطاقات اللياقة البدنية والقرب وما إلى ذلك. ومن الممكن أيضًا استخدام ESP32 كجهاز بلوتوث تسلسلي مثل وحدات HC-05 أو HC-06 لمشاريع المتحكم البسيط.
كما نعلم ، يمكن لـ BLE العمل في وضعين مختلفين - وضع الخادم ووضع العميل. تمت مناقشة كلا الوضعين في دروسنا السابقة ESP32:
- خادم ESP32 BLE - خدمة GATT لمؤشر مستوى البطارية
- عميل ESP32 BLE - الاتصال بشريط اللياقة لتشغيل لمبة
في هذا البرنامج التعليمي ، سوف نبني BLE iBeacon باستخدام ESP32 حيث يعمل ESP32 كخادم وسيعمل الهاتف الذكي كعميل. أفترض أنك معتاد بالفعل على كيفية استخدام لوحة ESP32 مع Arduino IDE ، إن لم تكن تعود إلى بدء البرنامج التعليمي ESP32.
يمكنك أيضًا معرفة المزيد حول ما هي تقنية Beacon / iBeacon من خلال الاطلاع على مشاريع Bluetooth iBeacon السابقة باستخدام Raspberry Pi و HM-10 BLE iBeacon.
المكونات مطلوبة
المعدات:
- مجلس التنمية ESP32
- كابل Micro USB
البرمجيات:
- اردوينو IDE
- تطبيق Android: nRF Connect للجوال (بواسطة Nordic Semiconductor)
هناك العديد من تطبيقات الماسح الضوئي BLE ، أحدها استخدمناه في مشروعنا السابق حول كيفية استخدام HM-10 BLE Module مع Arduino. يوفر تطبيق BLE scanner هذا واجهة رسومية جيدة (GUI) ولكنه يفتقر إلى معلومات إضافية ، لذا في هذا المشروع ، نستخدم تطبيق NRF Connect for Mobile.
استخدام تطبيق nRF Connect Android لـ ESP32 iBeacon
1. قم بتنزيل تطبيق nRF Connect من متجر Google Play وافتحه.
2. تبدو الشاشة أدناه. ستكون الخيارات المفيدة لهذا المشروع هي "Scan" و "Scanner" و "Info" عند العثور على الأجهزة.
و 'مسح' ستستخدم الخيار لرؤية كل iBeacons المتاحة. لبدء البحث عن iBeacon ، إما أن تسحب الشاشة لأسفل أو انتقل إلى خيار "Scan" في الزاوية اليمنى العليا من الشاشة. سيبدأ هذا في البحث عن أجهزة iBeacons المتوفرة.
3 بعد البحث في iBeacon ، ستتمكن من رؤية RSSI و UUID والرائد والصغرى من iBeacon سيتغير RSSI إذا أخذت الهاتف المحمول أو iBeacon بعيدًا عن بعضهما البعض. هنا في هذه الشاشة ، RSSI هو (-37). بخلاف ذلك ، توجد بعض التفاصيل مثل اسم الشركة الوهمي ، ونوع الجهاز ، وطول البايت ، والاسم المحلي لـ ESP32. هنا هو “ ESP32 as iBeacon ”. يمكنك تغيير الاسم المحلي في الرسم.
4. بعد إزالة الهاتف الذكي من iBeacon ، تتغير قيمة RSSI من -37 إلى -58. ستستمر هذه القيم في التغيير إذا قمت بنقل أحد الأجهزة.
القيم المقبولة لإشارة RSSI هي كما يلي:
قوة الاشارة | TL ؛ DR | مطلوب ل | |
---|---|---|---|
-30 ديسيبل ميلي واط | رائعة حقا | أقصى قوة إشارة يمكن تحقيقها. يمكن للعميل أن يكون على بعد أقدام قليلة من نقطة الوصول لتحقيق ذلك. غير نموذجي أو مرغوب فيه في العالم الحقيقي. | غير متاح |
-67 ديسيبل ميلي واط | جيد جدا | الحد الأدنى من قوة الإشارة للتطبيقات التي تتطلب تسليم حزم البيانات بشكل موثوق للغاية وفي الوقت المناسب. | VoIP / VoWiFi ، تدفق الفيديو |
-70 ديسيبل | حسنا | الحد الأدنى من قوة الإشارة لتسليم حزم موثوق. | البريد الإلكتروني والويب |
-80 ديسيبل | غير جيد | الحد الأدنى من قوة الإشارة للاتصال الأساسي. قد يكون تسليم الحزم غير موثوق به. | غير متاح |
-90 ديسيبل | غير صالح للإستعمال | الاقتراب أو الغرق في أرضية الضوضاء. أي وظيفة غير محتملة للغاية. | غير متاح |
برمجة ESP32 للعمل كـ BLE iBeacon
يتوفر نموذج لبرنامج ESP32 BLE iBeacon عند تثبيت لوحة ESP32 في Arduino IDE. لكننا قمنا بتحرير هذا الرسم التخطيطي قليلاً في هذا البرنامج التعليمي ، يتم تقديم النسخة الكاملة المحررة من نموذج البرنامج في نهاية هذا البرنامج التعليمي.
لفتح نموذج برنامج ESP32 BLE_iBeacon ، ما عليك سوى اتباع الخطوات التالية.
- افتح Arduino IDE وحدد "ESP32 Dev Module". (إذا لم تجد هذه اللوحة ، فيرجى التحقق مما إذا كنت قد قمت بتثبيت حزمة اللوحة ESP32)
- انتقل إلى ملف > أمثلة > ESP32 BLE Arduino > BLE_iBeacon
- افتح رسم "BLE_iBeacon".
يوجد الآن تعديل بسيط في الكود يتم إجراؤه في هذا البرنامج التعليمي. سيتم أيضًا تحديث اسم ESP32 في هذا الرسم التخطيطي. لذا ابدأ بإدراج المكتبات الضرورية التي سيتم استخدامها في إنشاء BLE Server و iBeacon.
# تضمين "sys / time.h"
هذه مكتبة وقت للحصول على وقت النظام الحالي. يحتوي هذا على وظائف مثل tv_sec و gettimeofday () وما إلى ذلك. لمزيد من المعلومات ، يمكنك زيارة إصدار UNIX الرسمي لـ ' sys / time.h'.
ثم يتم تضمين مكتبات ESP32 BLE والتي تحتوي على العديد من الوظائف المستخدمة لإنشاء ESP32 في تكوينات مختلفة مثل BLE Client أو BLE Server.
# تضمين "BLEDevice.h" # تضمين "BLEUtils.h" # تضمين "BLEServer.h"
و يتم تضمين مكتبة تقنية أي بيكون الذي يحدد ESP32 كما تقنية أي بيكون. إلى جانب ذلك ، تم تضمين مكتبة النوم العميق لـ ESP32. سيتم استخدام المكتبة لإرسال ESP32 في وضع السكون العميق لفترة زمنية محددة.
# تضمين "BLEBeacon.h" #include "esp_sleep.h"
حدد مدة النوم لـ ESP32. هنا ، سيكون ESP32 في نوم عميق لمدة 10 ثوانٍ وسيعلن عنه ثم ينتقل مرة أخرى إلى نوم عميق لمدة 10 ثوانٍ.
#define GPIO_DEEP_SLEEP_DURATION 10
هنا يتم تعريف RTC_DATA_ATTR. لاحظ أنه إذا قمت بتعريف متغير عام بسمة RTC_DATA_ATTR ، فسيتم وضع المتغير في ذاكرة RTC_SLOW_MEM. لذلك تم الإعلان عن الهيكل على أنه RTC_DATA_ATTR ونسخ الذاكرة الديناميكية إلى هذا الهيكل قبل النوم العميق يساعد في استعادة ذلك في الذاكرة الديناميكية بعد الاستيقاظ. بكلمات بسيطة نحن نوفر الوقت في الذاكرة الثابتة من الذاكرة الديناميكية لاستعادتها مرة أخرى بعد نوم عميق. هنا يتم تعريف المتغيرين. يتم استخدام " الأخير " للحصول على آخر مرة ذهب فيها ESP32 إلى وضع السكون العميق ويستخدم عدد التمهيد لعدد مرات إعادة التعيين.
RTC_DATA_ATTR ثابت time_t last ؛ RTC_DATA_ATTR ثابت uint32_t bootcount ؛
ثم حدد نوع إعلان BLE. يتم التعريف على النحو التالي.
BLEAdvertising * pAdvertising
و timeval يعرف بأنه هيكل للوصول إلى الوقت الحالي.
الهيكل الزمني الآن ؛
كما يتم تعريف UUID. يمكن إنشاء UUIDs من هذا الارتباط .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
الآن قم بإنشاء دالة تحتوي على سمات iBeacon مثل UUID ، Major ، Minor ، إلخ. في هذه الوظيفة ، قم بإنشاء مثيل لـ BLE مثل iBeacon ، وقم بتعيين معرف مُصنِّع مزيف ، UUID ، رئيسي وثانوي لـ ESP32 كـ iBeacon.
setBeacon () باطلة { BLEBeacon oBeacon = BLEBeacon () ؛ oBeacon.setManufacturerId (0x4C00) ؛ oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)) ، oBeacon.setMajor ((bootcount & 0xFFFF0000) >> 16) ؛ oBeacon.setMinor (bootcount & 0xFFFF) ؛
قم بتعيين العلامة كـ 0x04 بحيث يتم إخراج BrEdrNotSupported في الماسح الضوئي.
oData.setFlags (0x04) ،
قم بتعيين بيانات الإعلان للنشر.
std:: string strServiceData = ""؛
أضف السلسلة واحدة تلو الأخرى للإعلان.
strServiceData + = (char) 26 ؛ // Len strServiceData + = (char) 0xFF ؛ // اكتب strServiceData + = oBeacon.getData () ؛ oData.addData (strServiceData) ؛
ابدأ الإعلان عن طريق نشر البيانات.
pAdvertising-> setData (oData) ؛ pAdvertising-> setScanResponseData (oScanResponseData) ؛
ابدأ الشاشة التسلسلية بمعدل 115200 باود واحصل على الوقت. قم أيضًا بزيادة عدد التمهيد لتخزين عدد عمليات إعادة التعيين .
Serial.begin (115200) ؛ gettimeofday (& now، NULL) ؛ Serial.printf ("بدء ESP32٪ d \ n"، bootcount ++)؛
قم بتخزين الوقت الحالي في الذاكرة الثابتة.
last = 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-> start () ؛ pAdvertising-> stop () ؛ esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION) ،
أخيرًا ، قم بتوصيل لوحة تطوير ESP32 بجهاز الكمبيوتر المحمول الخاص بك باستخدام كابل Micro USB وقم بتحميل الكود إلى ESP32 باستخدام Arduino IDE. ثم افتح تطبيق nRF Connect Android في هاتفك الذكي وابدأ المسح. سوف تجد ESP32 كبث iBeacon كما هو موضح في الصورة أدناه:
هذه هي الطريقة التي يمكن بها استخدام ESP32 كإشارة BLE للإعلان عن UUID و Major و Minor. إذا كنت تريد معرفة المزيد عن iBeacon ، فاتبع البرنامج التعليمي السابق على HM10 كـ iBeacon. أيضًا إذا كان لديك أي شك ، فقم بالتعليق أدناه أو اطرح أسئلة في المنتديات.
ويرد أدناه رمز كامل مع فيديو العمل.
/>