- अवयव आवश्यक
- ESP32 iBeacon के लिए nRF कनेक्ट Android ऐप का उपयोग करना
- ESP32 को BLE iBeacon के रूप में काम करने के लिए प्रोग्रामिंग करना
ESP32 वास्तव में एक शक्तिशाली IoT डिवाइस है जिसमें ब्लूटूथ और वाईफाई के लिए इनबिल्ट सपोर्ट है। ESP32 अपने पूर्ववर्ती ESP8266 का अतिरिक्त संस्करण है जिसमें RAM, ROM, GPIO पिन आदि जैसे अतिरिक्त फीचर हैं। ESP32 मॉड्यूल क्लासिक ब्लूटूथ और ब्लूटूथ लो एनर्जी (BLE) दोनों को सपोर्ट करता है, क्लासिक ब्लूटूथ का उपयोग आपकी फाइल या BLE को ट्रांसफर करने के लिए किया जा सकता है। विकल्प का उपयोग बैटरी अनुकूलित अनुप्रयोगों के लिए किया जा सकता है जैसे ब्लूटूथ बीकन, फिटनेस बैंड, निकटता एस आदि। यह सरल सीरियल माइक्रोकंट्रोलर परियोजनाओं के लिए HC-05 या HC-06 मॉड्यूल जैसे सीरियल ब्लूटूथ के रूप में ESP32 का उपयोग करना भी संभव है।
जैसा कि हम जानते हैं कि BLE दो अलग-अलग मोड्स में काम कर सकता है - सर्वर मोड और क्लाइंट मोड। हमारे पिछले ESP32 ट्यूटोरियल में दोनों मोड पर चर्चा की गई है:
- ESP32 BLE सर्वर - बैटरी स्तर संकेत के लिए गैट सेवा
- ESP32 BLE क्लाइंट - एक बल्ब को ट्रिगर करने के लिए फिटनेस बैंड से जुड़ना
इस ट्यूटोरियल में हम ESP32 का उपयोग करके एक BLE iBeacon का निर्माण करेंगे जहाँ ESP32 एक सर्वर के रूप में कार्य करेगा और स्मार्टफोन एक क्लाइंट के रूप में कार्य करेगा। मुझे लगता है कि आप पहले से ही इस बात से परिचित हैं कि ईएसपी 32 बोर्ड का उपयोग अरुदिनो आईडीई के साथ कैसे किया जाता है, यदि ईएसपी 32 ट्यूटोरियल के साथ शुरुआत करना वापस नहीं आता है।
रास्पबेरी पाई और HM-10 BLE iBeacon का उपयोग करके हमारे पिछले ब्लूटूथ iBeacon प्रोजेक्ट्स के माध्यम से बीकन / iBeacon टेक्नोलॉजी क्या है, इसके बारे में आप अधिक जानकारी प्राप्त कर सकते हैं।
अवयव आवश्यक
हार्डवेयर:
- ESP32 विकास बोर्ड
- माइक्रो यूएसबी केबल
सॉफ्टवेयर:
- Arduino IDE
- Android ऐप: मोबाइल के लिए nRF कनेक्ट (नॉर्डिक सेमीकंडक्टर द्वारा)
कई BLE स्कैनर ऐप हैं, उनमें से एक हमने एचपी -10 BLE मॉड्यूल के साथ अपने पिछले प्रोजेक्ट में डुडुइनो के साथ उपयोग किया है। यह BLE स्कैनर ऐप अच्छा ग्राफिकल इंटरफ़ेस (GUI) प्रदान करता है, लेकिन इसके अतिरिक्त जानकारी का अभाव है, इसलिए इस परियोजना में हम NRF कनेक्ट फॉर मोबाइल ऐप का उपयोग कर रहे हैं ।
ESP32 iBeacon के लिए nRF कनेक्ट Android ऐप का उपयोग करना
1. Google Play Store से nRF कनेक्ट ऐप डाउनलोड करें और इसे खोलें।
2. स्क्रीन नीचे की तरह दिखता है। इस प्रोजेक्ट के लिए उपयोगी विकल्प 'स्कैन', 'स्कैनर' और 'इंफो' होंगे जब डिवाइस मिल जाएंगे।
'स्कैन' विकल्प सभी उपलब्ध iBeacons देखने के लिए इस्तेमाल किया जाएगा। IBeacon की खोज शुरू करने के लिए या तो स्क्रीन को नीचे खींचें या स्क्रीन के ऊपरी दाएं कोने पर 'स्कैन' विकल्प पर जाएं। यह उपलब्ध iBeacons के लिए खोज करना शुरू कर देगा।
3. iBeacon को सर्च करने के बाद आप RSSI, UUID, मेजर और iBeacon के माइनर को देख पाएंगे। अगर आप मोबाइल या iBeacon को एक दूसरे से दूर ले जाते हैं तो RSSI बदल जाएगा। यहाँ इस स्क्रीन में, RSSI (-37) है। इसके अलावा कुछ विवरण हैं जैसे डमी कंपनी का नाम, डिवाइस प्रकार, बाइट्स की लंबाई, ईएसपी 32 का स्थानीय नाम। यहाँ यह " ESP32 iBeacon के रूप में " है। आप स्केच में स्थानीय नाम बदल सकते हैं।
4. iBeacon से स्मार्टफोन को हटाने के बाद, RSSI का मान -37 से -58 तक बदल जाता है। यदि आप किसी एक डिवाइस को स्थानांतरित करते हैं, तो ये मान बदलते रहेंगे।
RSSI संकेत स्वीकार्य मान इस प्रकार हैं:
सिग्नल की शक्ति | टीएल, डॉ | के लिए आवश्यक | |
---|---|---|---|
-30 डीबीएम | गजब का | अधिकतम प्राप्त संकेत शक्ति। इसे प्राप्त करने के लिए ग्राहक केवल एपी से कुछ फीट की दूरी पर हो सकता है। वास्तविक दुनिया में विशिष्ट या वांछनीय नहीं है। | एन / ए |
-67 डीबीएम | बहुत अच्छा | उन अनुप्रयोगों के लिए न्यूनतम सिग्नल की शक्ति जो डेटा पैकेट की बहुत विश्वसनीय, समय पर डिलीवरी की आवश्यकता होती है। | वीओआईपी / VoWiFi, वीडियो स्ट्रीमिंग |
-70 डीबीएम | ठीक है | विश्वसनीय पैकेट वितरण के लिए न्यूनतम संकेत शक्ति। | ईमेल, वेब |
-80 डीबीएम | अच्छा नही | बुनियादी कनेक्टिविटी के लिए न्यूनतम सिग्नल की शक्ति। पैकेट वितरण अविश्वसनीय हो सकता है। | एन / ए |
-90 डीबीएम | व्यर्थ | शोरगुल में डूबना या डूबना। कोई भी कार्यक्षमता अत्यधिक संभावना नहीं है। | एन / ए |
ESP32 को BLE iBeacon के रूप में काम करने के लिए प्रोग्रामिंग करना
जब आप Arduino IDE में ESP32 बोर्ड स्थापित करते हैं तो ESP32 BLE iBeacon का नमूना कार्यक्रम उपलब्ध होता है। लेकिन हमने इस ट्यूटोरियल में इस स्केच को थोड़ा एडिट किया है, सैंपल प्रोग्राम का पूरा एडिटेड वर्जन इस ट्यूटोरियल के अंत में दिया गया है।
ESP32 BLE_iBeacon का नमूना कार्यक्रम खोलने के लिए बस नीचे दिए गए चरणों का पालन करें।
- Arduino IDE खोलें और "ESP32 देव मॉड्यूल" चुनें। (यदि आपको यह बोर्ड नहीं मिला तो कृपया जांच लें कि क्या आपने ESP32 बोर्ड पैकेज स्थापित किया है)
- पर जाएं फ़ाइल > उदाहरण > ESP32 BLE Arduino > BLE_iBeacon
- "BLE_iBeacon" स्केच खोलें।
अब कोड में एक मामूली संशोधन है जो इस ट्यूटोरियल में किया जाता है । इस स्केच में ESP32 नाम को भी अपडेट किया जाएगा। तो आवश्यक पुस्तकालयों को शामिल करने से शुरू करें जो BLE सर्वर और iBeacon बनाने में उपयोग किए जाएंगे।
# साइन करें "sys / time.h"
यह वर्तमान सिस्टम समय प्राप्त करने के लिए एक समय पुस्तकालय है। इसमें tv_sec, gettimeofday () आदि जैसे कार्य शामिल हैं । अधिक जानकारी के लिए, आप ' sys / time.h' की आधिकारिक UNIX रिलीज़ पर जा सकते हैं ।
फिर ESP32 BLE पुस्तकालयों को शामिल किया गया है जिसमें BLE क्लाइंट या BLE सर्वर जैसे विभिन्न कॉन्फ़िगरेशन में ESP32 बनाने के लिए उपयोग किए जाने वाले कई कार्य शामिल हैं।
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
IBeacon पुस्तकालय शामिल किया गया है जो iBeacon के रूप में ESP32 सेट। इसके साथ ही, ESP32 के लिए गहरी नींद पुस्तकालय शामिल है। लाइब्रेरी का उपयोग परिभाषित समय के लिए गहरी नींद मोड में ईएसपी 32 भेजने के लिए किया जाएगा।
#include "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 के रूप में घोषित किया गया है और गहरी नींद से पहले इस संरचना को गतिशील मेमोरी की प्रतिलिपि बनाने से जागने के बाद इसे गतिशील मेमोरी में पुनर्प्राप्त करने में मदद मिलती है। सरल शब्दों में हम एक गहरी नींद के बाद इसे फिर से ठीक करने के लिए गतिशील मेमोरी से स्थिर मेमोरी में समय बचा रहे हैं। यहाँ दो चर को परिभाषित किया गया है। ' आखिरी ' का इस्तेमाल आखिरी बार तब किया जाता है जब ईएसपी 32 गहरी नींद में चला जाता है और बूटकाउंट का इस्तेमाल रेसेट्स की संख्या के लिए किया जाता है।
RTC_DATA_ATTR स्थिर time_t अंतिम; RTC_DATA_ATTR स्थिर uint32_t बूटकाउंट;
फिर BLE विज्ञापन प्रकार को परिभाषित करें । परिभाषा निम्नानुसार की जाती है।
BLEAdolars * pAdolars;
Timeval वर्तमान समय का उपयोग करने की संरचना के रूप में परिभाषित किया गया है।
अब संरचना का समय;
इसके अलावा यूयूआईडी को परिभाषित किया गया है। इस लिंक से यूयूआईडी जनरेट किया जा सकता है ।
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
अब एक फ़ंक्शन बनाएं जिसमें iBeacon विशेषताएँ होंगी जैसे UUID, मेजर, माइनर, Etc. इस फ़ंक्शन में BLE के लिए iBeacon के रूप में एक उदाहरण बनाएं, और iBeacon के रूप में ESB32 के लिए एक प्रमुख निर्माता ID, UUID, प्रमुख और मामूली सेट करें।
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setPro निकटताUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((बूटकाउंट और 0xFFFF0000) >> 16); oBeacon.setMinor (बूटकाउंट और 0xFFFF);
ध्वज को 0x04 के रूप में सेट करें ताकि यह स्कैनर में BrEdrNotSupported आउटपुट हो ।
oData.setFlags (0x04);
प्रकाशन के लिए विज्ञापन डेटा सेट करें।
std:: string strServiceData = "";
विज्ञापन करने के लिए एक के बाद एक स्ट्रिंग जोड़ें।
strServiceData + = (char) 26; // लेन strServiceData + = (चार) 0xFF; // टाइप strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
डेटा प्रकाशित करके विज्ञापन शुरू करें।
pAdolars-> setData (oData); pAdolars-> setScanResponseData (oScanResponseData);
115200 बॉड दर से सीरियल मॉनिटर शुरू करें और समय पाएं। रिसेट की संख्या को स्टोर करने के लिए बूटकाउंट भी बढ़ाएँ ।
सीरियल.बेगिन (115200); gettimeofday (और अब, NULL); Serial.printf ("स्टार्ट ESP32% d \ n", बूटकाउंट ++);
स्थिर मेमोरी में वर्तमान समय स्टोर करें।
अंतिम = now.tv_sec;
एक BLE डिवाइस बनाएं और जैसा चाहें वैसा नाम दें। यहाँ ESP32 को “ ESP2 के रूप में iBeacon ” नाम दिया गया है । ध्यान दें कि, नाम लंबे हो सकते हैं लेकिन कोड के इस संस्करण ने लंबे नामों के लिए समर्थन शुरू कर दिया है।
BLEDevice:: init ("iBeacon के रूप में ESP32");
विज्ञापन और शुरू करने के लिए BLE सर्वर बनाएँ।
BLEServer * pServer = BLEDevice:: createServer (); pAdolars = BLEDevice:: getAdolars (); BLEDevice:: startAdolars ();
फिर ESB32 को iBeacon मोड में सेट करें।
setBeacon ();
विज्ञापन शुरू करें फिर विज्ञापन बंद करें और 10 सेकंड के लिए गहरी नींद में जाएं।
pAdolars-> start (); pAdolars-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
अंत में माइक्रो USB केबल का उपयोग करके अपने लैपटॉप के साथ ESP32 डेवलपमेंट बोर्ड को प्लग करें और Arduino IDE का उपयोग करके कोड को ESP32 में अपलोड करें। फिर अपने स्मार्टफोन में एनआरएफ कनेक्ट एंड्रॉयड ऐप खोलें और स्कैनिंग शुरू करें। आप नीचे दिए गए चित्र में दिखाए अनुसार ESP32 को iBeacon प्रसारण के रूप में पाएंगे:
यह कैसे ESP32 UUID, मेजर और माइनर को विज्ञापित करने के लिए BLE बीकन के रूप में इस्तेमाल किया जा सकता है । यदि आप iBeacon के बारे में अधिक जानना चाहते हैं तो HMB पर iBeacon के रूप में हमारे पिछले ट्यूटोरियल का पालन करें। इसके अलावा यदि आपको कोई संदेह है तो नीचे टिप्पणी करें या मंचों में सवाल पूछें।
एक कामकाजी वीडियो के साथ पूरा कोड नीचे दिया गया है।
/>