- భాగాలు అవసరం
- ESP32 iBeacon కోసం nRF కనెక్ట్ Android అనువర్తనాన్ని ఉపయోగించడం
- ప్రోగ్రామింగ్ ESP32 BLE iBeacon గా పనిచేయడానికి
ESP32 నిజంగా బ్లూటూత్ మరియు వైఫైలకు అంతర్నిర్మిత మద్దతు కలిగిన శక్తివంతమైన IoT పరికరం. ESP32 దాని ముందున్న ESP8266 యొక్క అధునాతన వెర్షన్, ఇది RAM, ROM, GPIO పిన్స్ వంటి అదనపు లక్షణాలతో ఉంటుంది. ESP32 మాడ్యూల్ క్లాసిక్ బ్లూటూత్ మరియు బ్లూటూత్ లో ఎనర్జీ (BLE) రెండింటికి మద్దతు ఇస్తుంది, క్లాసిక్ బ్లూటూత్ పాటలు లేదా ఫైళ్ళను బదిలీ చేయడానికి మరియు BLE బ్లూటూత్ బీకాన్లు, ఫిట్నెస్ బ్యాండ్లు, సామీప్యత వంటి బ్యాటరీ ఆప్టిమైజ్ చేసిన అనువర్తనాల కోసం ఎంపికను ఉపయోగించవచ్చు. సాధారణ మైక్రోకంట్రోలర్ ప్రాజెక్ట్ల కోసం ESP32 ను HC-05 లేదా HC-06 మాడ్యూల్స్ వంటి సీరియల్ బ్లూటూత్గా ఉపయోగించడం కూడా సాధ్యమే.
మనకు తెలిసినట్లుగా, BLE రెండు వేర్వేరు రీతుల్లో పనిచేయగలదు - సర్వర్ మోడ్ మరియు క్లయింట్ మోడ్. రెండు మోడ్లు మా మునుపటి ESP32 ట్యుటోరియల్లలో చర్చించబడ్డాయి:
- ESP32 BLE సర్వర్ - బ్యాటరీ స్థాయి సూచిక కోసం GATT సేవ
- ESP32 BLE క్లయింట్ - బల్బ్ను ట్రిగ్గర్ చేయడానికి ఫిట్నెస్ బ్యాండ్కు కనెక్ట్ అవుతోంది
ఈ ట్యుటోరియల్లో మేము ESP32 ను ఉపయోగించి BLE iBeacon ను నిర్మిస్తాము, ఇక్కడ ESP32 సర్వర్గా పనిచేస్తుంది మరియు స్మార్ట్ఫోన్ క్లయింట్గా పనిచేస్తుంది. ESP32 ట్యుటోరియల్తో ప్రారంభించడానికి తిరిగి రాకపోతే, Arduino IDE తో ESP32 బోర్డ్ను ఎలా ఉపయోగించాలో మీకు ఇప్పటికే తెలిసిందని నేను అనుకుంటాను.
రాస్ప్బెర్రీ పై మరియు HM-10 BLE ఐబీకాన్ ఉపయోగించి మా మునుపటి బ్లూటూత్ ఐబీకాన్ ప్రాజెక్టుల ద్వారా వెళ్ళడం ద్వారా బెకన్ / ఐబీకాన్ టెక్నాలజీ అంటే ఏమిటో మీరు మరింత తెలుసుకోవచ్చు.
భాగాలు అవసరం
హార్డ్వేర్:
- ESP32 అభివృద్ధి బోర్డు
- మైక్రో USB కేబుల్
సాఫ్ట్వేర్:
- Arduino IDE
- Android అనువర్తనం: మొబైల్ కోసం nRF కనెక్ట్ (నార్డిక్ సెమీకండక్టర్ ద్వారా)
చాలా BLE స్కానర్ అనువర్తనాలు ఉన్నాయి, వాటిలో ఒకటి ఆర్డునోతో HM-10 BLE మాడ్యూల్ను ఎలా ఉపయోగించాలో మా మునుపటి ప్రాజెక్ట్లో ఉపయోగించాము. ఈ BLE స్కానర్ అనువర్తనం మంచి గ్రాఫికల్ ఇంటర్ఫేస్ (GUI) ను అందిస్తుంది, అయితే అదనంగా సమాచారం లేదు కాబట్టి ఈ ప్రాజెక్ట్లో మేము మొబైల్ అనువర్తనం కోసం NRF కనెక్ట్ను ఉపయోగిస్తున్నాము.
ESP32 iBeacon కోసం nRF కనెక్ట్ Android అనువర్తనాన్ని ఉపయోగించడం
1. గూగుల్ ప్లే స్టోర్ నుండి ఎన్ఆర్ఎఫ్ కనెక్ట్ యాప్ ను డౌన్లోడ్ చేసి ఓపెన్ చేయండి.
2. స్క్రీన్ క్రింద కనిపిస్తుంది. పరికరాలు దొరికినప్పుడు ఈ ప్రాజెక్ట్ కోసం ఉపయోగకరమైన ఎంపికలు 'స్కాన్', 'స్కానర్' మరియు 'సమాచారం'.
'స్కాన్' ఎంపికను అందుబాటులో ఉన్న అన్ని iBeacons చూడటానికి ఉపయోగించబడుతుంది. ఐబీకాన్ కోసం శోధించడం ప్రారంభించడానికి స్క్రీన్ను క్రిందికి లాగండి లేదా స్క్రీన్ కుడి ఎగువ మూలలో ఉన్న 'స్కాన్' ఎంపికకు వెళ్లండి. ఇది అందుబాటులో ఉన్న iBeacons కోసం శోధించడం ప్రారంభిస్తుంది.
3. ఐబీకాన్ను శోధించిన తర్వాత, మీరు ఐబీకాన్ యొక్క RSSI, UUID, మేజర్ మరియు మైనర్ చూడగలరు. మీరు మొబైల్ లేదా ఐబీకాన్ ను ఒకదానికొకటి దూరంగా తీసుకుంటే RSSI మారుతుంది. ఇక్కడ ఈ స్క్రీన్లో, RSSI (-37). ఇది కాకుండా డమ్మీ కంపెనీ పేరు, పరికర రకం, బైట్ల పొడవు, ESP32 యొక్క స్థానిక పేరు వంటి కొన్ని వివరాలు ఉన్నాయి. ఇక్కడ ఇది “ ESB32 as iBeacon ”. మీరు స్కెచ్లో స్థానిక పేరును మార్చవచ్చు.
4. ఐబీకాన్ నుండి స్మార్ట్ఫోన్ను తీసివేసిన తరువాత, RSSI విలువ -37 నుండి -58 వరకు మారుతుంది. మీరు పరికరాల్లో ఒకదాన్ని తరలిస్తే ఈ విలువలు మారుతూ ఉంటాయి.
RSSI సిగ్నల్ ఆమోదయోగ్యమైన విలువలు క్రింది విధంగా ఉన్నాయి:
సిగ్నల్ బలం | టిఎల్; డిఆర్ | కోసం అవసరం | |
---|---|---|---|
-30 డిబిఎం | అమేజింగ్ | గరిష్టంగా సాధించగల సిగ్నల్ బలం. దీన్ని సాధించడానికి క్లయింట్ AP నుండి కొన్ని అడుగులు మాత్రమే ఉంటుంది. వాస్తవ ప్రపంచంలో విలక్షణమైన లేదా కావాల్సినది కాదు. | ఎన్ / ఎ |
-67 డిబిఎం | చాలా బాగుంది | డేటా ప్యాకెట్ల యొక్క చాలా నమ్మకమైన, సకాలంలో డెలివరీ అవసరమయ్యే అనువర్తనాలకు కనీస సిగ్నల్ బలం. | VoIP / VoWiFi, స్ట్రీమింగ్ వీడియో |
-70 డిబిఎం | సరే | నమ్మదగిన ప్యాకెట్ డెలివరీ కోసం కనీస సిగ్నల్ బలం. | ఇమెయిల్, వెబ్ |
-80 డిబిఎం | మంచిది కాదు | ప్రాథమిక కనెక్టివిటీకి కనీస సిగ్నల్ బలం. ప్యాకెట్ డెలివరీ నమ్మదగనిది కావచ్చు. | ఎన్ / ఎ |
-90 డిబిఎం | ఉపయోగించలేనిది | శబ్దం అంతస్తులో చేరుకోవడం లేదా మునిగిపోవడం. ఏదైనా కార్యాచరణ చాలా అరుదు. | ఎన్ / ఎ |
ప్రోగ్రామింగ్ ESP32 BLE iBeacon గా పనిచేయడానికి
మీరు ఆర్డునో IDE లో ESP32 బోర్డ్ను ఇన్స్టాల్ చేసినప్పుడు ESP32 BLE iBeacon యొక్క నమూనా ప్రోగ్రామ్ అందుబాటులో ఉంది. కానీ మేము ఈ ట్యుటోరియల్లో ఈ స్కెచ్ను కొద్దిగా సవరించాము , నమూనా ప్రోగ్రామ్ యొక్క పూర్తి సవరించిన సంస్కరణ ఈ ట్యుటోరియల్ చివరిలో ఇవ్వబడింది.
ESP32 BLE_iBeacon యొక్క నమూనా ప్రోగ్రామ్ను తెరవడానికి దశల క్రింద అనుసరించండి.
- Arduino IDE తెరిచి “ESP32 Dev Module” ఎంచుకోండి. (మీకు ఈ బోర్డు కనిపించకపోతే దయచేసి మీరు 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 ను తయారు చేయడానికి ఉపయోగించే అనేక విధులను కలిగి ఉంటుంది.
# "BLEDevice.h" ను చేర్చండి # "BLEUtils.h" ను చేర్చండి # "BLEServer.h" ను చేర్చండి
IBeacon లైబ్రరీ చేర్చబడింది iBeacon వంటి ESP32 చేస్తుంది. దీనితో పాటు, డీఎస్ స్లీప్ లైబ్రరీ ESP32 కోసం చేర్చబడింది. నిర్వచించిన కాలానికి లోతైన నిద్ర మోడ్లో ESP32 ను పంపడానికి లైబ్రరీ ఉపయోగించబడుతుంది.
# చేర్చండి "BLEBeacon.h" # చేర్చండి "esp_sleep.h"
ESP32 కోసం నిద్ర వ్యవధిని నిర్వచించండి. ఇక్కడ ESP32 10 సెకన్ల పాటు గా deep నిద్రలో ఉంటుంది మరియు అది ప్రకటన చేస్తుంది మరియు తరువాత 10 సెకన్ల పాటు గా deep నిద్రకు వెళుతుంది.
# GPIO_DEEP_SLEEP_DURATION 10 ని నిర్వచించండి
ఇక్కడ RTC_DATA_ATTR నిర్వచించబడింది. మీరు RTC_DATA_ATTR లక్షణంతో గ్లోబల్ వేరియబుల్ను నిర్వచించినట్లయితే, వేరియబుల్ RTC_SLOW_MEM మెమరీలో ఉంచబడుతుంది. కాబట్టి నిర్మాణం RTC_DATA_ATTR గా ప్రకటించబడింది మరియు లోతైన నిద్రకు ముందు డైనమిక్ మెమరీని ఈ నిర్మాణానికి కాపీ చేయడం మేల్కొన్న తర్వాత డైనమిక్ మెమరీలోకి తిరిగి రావడానికి సహాయపడుతుంది. సరళమైన మాటలలో, గా deep నిద్ర తర్వాత దాన్ని తిరిగి పొందటానికి డైనమిక్ మెమరీ నుండి స్టాటిక్ మెమరీలో సమయాన్ని ఆదా చేస్తున్నాము. ఇక్కడ రెండు వేరియబుల్స్ నిర్వచించబడ్డాయి. ESP32 గా deep నిద్రకు వెళ్ళినప్పుడు చివరిసారి పొందడానికి ' చివరిది ' ఉపయోగించబడుతుంది మరియు రీసెట్ల సంఖ్యను బూట్కౌంట్ ఉపయోగిస్తారు.
RTC_DATA_ATTR స్టాటిక్ టైమ్_టి చివరిది; RTC_DATA_ATTR స్టాటిక్ uint32_t బూట్కౌంట్;
అప్పుడు BLE అడ్వర్టైజింగ్ రకాన్ని నిర్వచించండి. నిర్వచనం క్రింది విధంగా జరుగుతుంది.
BLEA అడ్వర్టైజింగ్ * pAd advertising;
Timeval ప్రస్తుత సమయం యాక్సెస్ నిర్మాణం నిర్వచించబడింది.
struct కాల వ్యవధి ఇప్పుడు;
అలాగే UUID నిర్వచించబడింది. ఈ లింక్ నుండి UUID లను ఉత్పత్తి చేయవచ్చు .
# BEACON_UUID ని నిర్వచించండి "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
ఇప్పుడు UUID, మేజర్, మైనర్, మొదలైన ఐబికాన్ లక్షణాలను కలిగి ఉన్న ఒక ఫంక్షన్ను సృష్టించండి.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((బూట్కౌంట్ & 0xFFFF0000) >> 16); oBeacon.setMinor (బూట్కౌంట్ & 0xFFFF);
జెండాను 0x04 గా సెట్ చేయండి, తద్వారా ఇది స్కానర్లో BrEdrNotSupported అవుట్పుట్ అవుతుంది.
oData.setFlags (0x04);
ప్రచురణ కోసం ప్రకటనల డేటాను సెట్ చేయండి.
std:: string strServiceData = "";
ప్రకటన చేయడానికి స్ట్రింగ్ ఒకదాని తరువాత ఒకటి జోడించండి.
strServiceData + = (చార్) 26; // లెన్ strServiceData + = (చార్) 0xFF; // టైప్ strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
డేటాను ప్రచురించడం ద్వారా ప్రకటనలను ప్రారంభించండి.
pAd advertising-> setData (oData); pAd advertising-> setScanResponseData (oScanResponseData);
115200 బాడ్ రేటుతో సీరియల్ మానిటర్ను ప్రారంభించి సమయం పొందండి. రీసెట్ల సంఖ్యను నిల్వ చేయడానికి బూట్కౌంట్ను పెంచండి .
సీరియల్.బెగిన్ (115200); gettimeofday (& ఇప్పుడు, NULL); సీరియల్.ప్రింట్ఫ్ ("ESP32% d \ n ప్రారంభించండి", బూట్కౌంట్ ++);
ప్రస్తుత సమయాన్ని స్టాటిక్ మెమరీలో నిల్వ చేయండి.
last = now.tv_sec;
BLE పరికరాన్ని సృష్టించండి మరియు మీకు కావలసిన విధంగా పేరు పెట్టండి. ఇక్కడ ESP32 కు “ ESP2 గా iBeacon ” అని పేరు పెట్టారు., పేర్లు పొడవుగా ఉండవచ్చని గమనించండి, అయితే ఈ కోడ్ యొక్క సంస్కరణ దీర్ఘ పేర్లకు మద్దతును ప్రారంభించింది.
BLEDevice:: init ("ESB32 as iBeacon");
ప్రకటన చేయడానికి మరియు ప్రారంభించడానికి BLE సర్వర్ను సృష్టించండి.
BLEServer * pServer = BLEDevice:: createServer (); pAd advertising = BLEDevice:: getAd advertising (); BLEDevice:: startAd advertising ();
అప్పుడు ESB32 ను iBeacon మోడ్లో సెట్ చేయండి.
setBeacon ();
ప్రకటనలను ప్రారంభించండి, ఆపై ప్రకటనలను ఆపి 10 సెకన్ల పాటు గా deep నిద్రకు వెళ్ళండి.
pAd advertising-> ప్రారంభం (); pAd advertising-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
చివరగా మైక్రో USB కేబుల్ ఉపయోగించి మీ ల్యాప్టాప్తో ESP32 డెవలప్మెంట్ బోర్డ్ను ప్లగ్ చేయండి మరియు Arduino IDE ని ఉపయోగించి కోడ్ను ESP32 లోకి అప్లోడ్ చేయండి. అప్పుడు మీ స్మార్ట్ఫోన్లో nRF కనెక్ట్ Android అనువర్తనాన్ని తెరిచి, స్కానింగ్ ప్రారంభించండి. దిగువ చిత్రంలో చూపిన విధంగా మీరు ESP32 ను iBeacon ప్రసారంగా కనుగొంటారు:
ఈ ఎలా ఉంది ESP32 BLE బెకన్ ఉపయోగించవచ్చు UUID, మేజర్ మరియు మైనర్ ప్రకటించడానికి. మీరు iBeacon గురించి మరింత తెలుసుకోవాలనుకుంటే, HM10 లో మా మునుపటి ట్యుటోరియల్ను iBeacon గా అనుసరించండి. మీకు ఏమైనా సందేహం ఉంటే క్రింద వ్యాఖ్యానించండి లేదా ఫోరమ్లలో ప్రశ్నలు అడగండి.
పని చేసే వీడియోతో పూర్తి కోడ్ క్రింద ఇవ్వబడింది.
/>