- Kinakailangan ang Mga Bahagi
- Gamit ang nRF Connect Android App para sa ESP32 iBeacon
- Programming ESP32 upang gumana bilang BLE iBeacon
Ang ESP32 ay talagang isang malakas na aparato ng IoT na may built-in na suporta para sa Bluetooth at WiFi. Ang ESP32 ay advanced na bersyon ng hinalinhan nito na ESP8266 na may mga karagdagang tampok tulad ng RAM, ROM, GPIO Pins atbp. Sinusuportahan ng module ng ESP32 ang parehong klasikong Bluetooth at Bluetooth Low Energy (BLE), ang klasikong Bluetooth ay maaaring magamit upang ilipat ang mga kanta o file at ang BLE Maaaring magamit ang pagpipilian para sa mga application na na-optimize ng baterya tulad ng mga Bluetooth beacon, fitness band, proximity s atbp Posible ring gamitin ang ESP32 bilang isang serial Bluetooth tulad ng mga HC-05 o HC-06 na mga module para sa mga simpleng proyekto ng microcontroller.
Tulad ng alam namin na ang BLE ay maaaring gumana sa dalawang magkakaibang mga mode - Server mode at Client mode. Parehong tinalakay ang mga mode sa aming nakaraang Mga Tutorial sa ESP32:
- ESP32 BLE Server - Serbisyo ng GATT para sa Indikasyon ng Antas ng Baterya
- ESP32 BLE Client - Pagkonekta sa Fitness Band upang Mag-trigger ng isang bombilya
Sa tutorial na ito magtatayo kami ng isang BLE iBeacon gamit ang ESP32 kung saan kikilos ang ESP32 bilang isang server at ang smartphone ay kikilos bilang isang kliyente. Ipinapalagay ko na pamilyar ka na sa kung paano gamitin ang board ng ESP32 sa Arduino IDE, kung hindi bumalik sa pagsisimula sa tutorial ng ESP32.
Maaari mo ring malaman ang higit pa tungkol sa kung ano ang Beacon / iBeacon Technology sa pamamagitan ng pagdaan sa aming nakaraang mga proyektong Bluetooth iBeacon gamit ang Raspberry Pi at HM-10 BLE iBeacon.
Kinakailangan ang Mga Bahagi
Hardware:
- Lupon sa Pagpapaunlad ng ESP32
- Micro USB Cable
Software:
- Arduino IDE
- Android App: nRF Connect for Mobile (Ni Nordic Semiconductor)
Maraming mga BLE scanner app, isa sa mga ito ang ginamit namin sa aming nakaraang proyekto ng Paano Gumamit ng HM-10 BLE Module kasama ang Arduino. Nagbibigay ang BLE scanner app na ito ng mahusay na Graphical Interface (GUI) ngunit wala sa karagdagang impormasyon kaya sa proyektong ito ginagamit namin ang NRF Connect for Mobile app.
Gamit ang nRF Connect Android App para sa ESP32 iBeacon
1. I-download ang nRF Connect app mula sa Google Play Store at Buksan ito.
2. Ang screen ay mukhang sa ibaba. Ang Mga kapaki-pakinabang na pagpipilian para sa proyektong ito ay ang 'I-scan', 'Scanner' at 'Impormasyon' kapag nahanap ang mga aparato.
Ang 'I-scan' na opsyon ay maaaring gamitin upang makita ang lahat ng magagamit na iBeacons. Upang simulang maghanap para sa iBeacon alinman hilahin ang screen o pumunta sa pagpipiliang 'I-scan' sa kanang sulok sa itaas ng Screen. Magsisimula na itong maghanap para sa mga magagamit na iBeacons.
3. Matapos hanapin ang iBeacon, makikita mo ang RSSI, UUID, Major at Minor ng iBeacon. Magbabago ang RSSI kung aalisin mo ang mobile o iBeacon mula sa bawat isa. Dito sa screen na ito, ang RSSI ay (-37). Maliban dito mayroong ilang mga detalye tulad ng Pangalan ng Dummy Company, Uri ng Device, Haba ng Bytes, Ang Lokal na Pangalan ng ESP32. Narito ito ay " ESP32 bilang iBeacon ". Maaari mong baguhin ang lokal na pangalan sa sketch.
4. Matapos alisin ang smartphone mula sa iBeacon, ang halaga ng RSSI ay nagbabago mula -37 hanggang -58. Ang mga halagang ito ay patuloy na magbabago kung ilipat mo ang isa sa mga aparato.
Ang mga katanggap-tanggap na halaga ng signal ng RSSI ay ang sumusunod:
Lakas ng signal | TL; DR | Kinakailangan para sa | |
---|---|---|---|
-30 dBm | Kamangha-mangha | Max na maaaring matamo ang lakas ng signal. Ang kliyente ay maaaring ilang mga paa lamang mula sa AP upang makamit ito. Hindi tipikal o kanais-nais sa totoong mundo. | N / A |
-67 dBm | Napakahusay | Minimum na lakas ng signal para sa mga application na nangangailangan ng napaka maaasahan, napapanahong paghahatid ng mga packet ng data. | VoIP / VoWiFi, streaming video |
-70 dBm | Sige | Minimum na lakas ng signal para sa maaasahang paghahatid ng packet. | Email, web |
-80 dBm | Hindi maganda | Minimum na lakas ng signal para sa pangunahing pagkakakonekta. Ang packet delivery ay maaaring hindi maaasahan. | N / A |
-90 dBm | Hindi magagamit | Papalapit o malulunod sa sahig ng ingay. Anumang pagpapaandar ay lubos na malamang. | N / A |
Programming ESP32 upang gumana bilang BLE iBeacon
Mayroong sample na programa ng ESP32 BLE iBeacon na magagamit kapag na-install mo ang ESP32 Board sa Arduino IDE. Ngunit nai-edit namin nang kaunti ang sketch na ito sa tutorial na ito, ang kumpletong nai-edit na bersyon ng sample na programa ay ibinibigay sa pagtatapos ng tutorial na ito.
Upang buksan ang Sample Program ng ESP32 BLE_iBeacon sundin lamang ang mga hakbang sa ibaba.
- Buksan ang Arduino IDE at Piliin ang "ESP32 Dev Module". (Kung hindi mo makita ang board na ito, mangyaring suriin kung na-install mo ang Package ng Linya ng ESP32)
- Pumunta sa File > Mga Halimbawa > ESP32 BLE Arduino > BLE_iBeacon
- Buksan ang "BLE_iBeacon" Sketch.
Ngayon ay may isang bahagyang pagbabago sa code na kung saan ay tapos na sa tutorial na ito. Ang Pangalan ng ESP32 ay maa-update din sa sketch na ito. Kaya't magsimula sa pagsasama ng mga kinakailangang Aklatan na gagamitin sa Paglikha ng BLE Server at iBeacon.
# isama ang "sys / time.h"
Ito ay isang time library upang makuha ang kasalukuyang oras ng system. Naglalaman ito ng mga pagpapaandar tulad ng tv_sec, gettimeofday () atbp Para sa karagdagang impormasyon, maaari mong bisitahin ang opisyal na paglabas ng UNIX ng ' sys / time.h'.
Pagkatapos ay kasama ang mga aklatan ng ESP32 BLE na naglalaman ng maraming mga pagpapaandar na ginamit upang gawin ang ESP32 sa iba't ibang mga pagsasaayos tulad ng BLE Client o BLE Server.
# isama ang "BLEDevice.h" # isama ang "BLEUtils.h" # isama ang "BLEServer.h"
Ang iBeacon library ay kasama na nagtatakda ng ESP32 bilang iBeacon. Kasama nito, ang malalim na library ng pagtulog ay kasama para sa ESP32. Gagamitin ang silid-aklatan upang magpadala ng ESP32 sa malalim na mode ng pagtulog para sa isang tinukoy na tagal ng panahon.
# isama ang "BLEBeacon.h" # isama ang "esp_sleep.h"
Tukuyin ang tagal ng pagtulog para sa ESP32. Narito ang ESP32 ay mahimbing na natutulog sa tagal ng 10 segundo at mag-a-advertise ito at pagkatapos ay muling matulog nang 10 segundo.
# tukuyin ang GPIO_DEEP_SLEEP_DURATION 10
Dito tinukoy ang RTC_DATA_ATTR. Tandaan na kung tinukoy mo ang isang pandaigdigang variable na may katangian ng RTC_DATA_ATTR, ang variable ay mailalagay sa memorya ng RTC_SLOW_MEM. Kaya't ang istraktura na idineklara bilang RTC_DATA_ATTR at ang pagkopya ng pabagu-bago ng memorya sa istrakturang ito bago ang isang malalim na pagtulog ay makakatulong sa pag-recover nito sa pabuong memorya pagkatapos magising. Sa mga simpleng salita ay nakakatipid kami ng oras sa static memory mula sa pabagu-bagong memorya upang mabawi ito muli pagkatapos ng mahimbing na pagtulog. Dito natukoy ang dalawang variable. Ang ' huling ' ay ginagamit upang makuha ang huling oras kung ang ESP32 ay natulog nang malalim at ang bootcount ay ginamit bilang ng bilang ng mga pag-reset.
RTC_DATA_ATTR static time_t last; RTC_DATA_ATTR static uint32_t bootcount;
Pagkatapos tukuyin ang Uri ng BLE Advertising. Ang kahulugan ay tapos na tulad ng sumusunod.
BLEAdvertising * pAdvertising;
Ang timeval ay tinukoy bilang istraktura upang ma-access ang kasalukuyang oras.
struct timeval ngayon;
Gayundin ang UUID ay tinukoy. Ang mga UUID ay maaaring mabuo mula sa link na ito .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Lumikha ngayon ng isang pagpapaandar na naglalaman ng mga katangian ng iBeacon tulad ng UUID, Major, Minor, Atbp Sa pagpapaandar na ito lumikha ng isang halimbawa para sa BLE bilang iBeacon, at magtakda ng isang pekeng ID ng tagagawa, UUID, pangunahing at menor de edad para sa ESP32 bilang iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setMan ManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((bootcount & 0xFFFF0000) >> 16); oBeacon.setMinor (bootcount & 0xFFFF);
Itakda ang watawat bilang 0x04 upang ma-output nito ang BrEdrNotSupported sa scanner.
oData.setFlags (0x04);
Itakda ang data ng advertising para sa pag-publish.
std:: string strServiceData = "";
Idagdag ang sunod-sunod na string upang mag-advertise.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Type strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Simulan ang advertising sa pamamagitan ng pag-publish ng data.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Simulan ang serial monitor sa 115200 baud rate at makuha ang oras. Dagdagan din ang bootcount upang maiimbak ang bilang ng mga Pag-reset.
Serial.begin (115200); gettimeofday (& now, NULL); Serial.printf ("simulan ang ESP32% d \ n", bootcount ++);
Itabi ang kasalukuyang oras sa static memory.
huling = ngayon.tv_sec;
Lumikha ng isang BLE aparato at pangalanan ito ayon sa gusto mo. Dito ang ESP32 ay pinangalanan bilang " ESP2 bilang iBeacon ". Tandaan na ang, ang mga pangalan ay maaaring maging mahaba ngunit ang bersyon na ito ng code ay nagsimula ang suporta para sa mahabang pangalan.
BLEDevice:: init ("ESP32 bilang iBeacon");
Lumikha ng server na BLE upang mag-advertise at magsimula.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Pagkatapos itakda ang ESP32 sa iBeacon mode.
setBeacon ();
Simulan ang advertising pagkatapos ay itigil ang advertising at matulog nang mahimbing sa loob ng 10 segundo.
pAdvertising-> simula (); pAdvertising-> ihinto (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Sa wakas I-plug ang ESP32 Development Board gamit ang iyong Laptop gamit ang isang Micro USB cable at i-upload ang code sa ESP32 gamit ang Arduino IDE. Pagkatapos buksan ang nRF Connect Android App sa iyong smartphone at simulang i-scan. Mahahanap mo ang ESP32 bilang iBeacon broadcast tulad ng ipinakita sa larawan sa ibaba:
Ganito magagamit ang ESP32 bilang BLE Beacon upang i-advertise ang UUID, Major at Minor. Kung nais mong malaman ang tungkol sa iBeacon pagkatapos sundin ang aming nakaraang tutorial sa HM10 bilang iBeacon. Gayundin kung mayroon kang anumang pagdududa pagkatapos ay magkomento sa ibaba o magtanong ng mga katanungan sa mga forum.
Ang kumpletong Code na may gumaganang video ay ibinibigay sa ibaba.
/>