- Nepieciešamās sastāvdaļas
- Lietotnes nRF Connect lietojumprogrammas ESP32 iBeacon izmantošana
- ESP32 programmēšana darbam kā BLE iBeacon
ESP32 ir patiešām spēcīga IoT ierīce, kurai ir iebūvēts atbalsts Bluetooth un WiFi. ESP32 ir tā priekšgājēja ESP8266 uzlabotā versija ar papildu funkcijām, piemēram, RAM, ROM, GPIO Pins utt. ESP32 modulis atbalsta gan klasisko Bluetooth, gan Bluetooth Low Energy (BLE), klasisko Bluetooth var izmantot dziesmu vai failu pārsūtīšanai un BLE opciju var izmantot akumulatoram optimizētām lietojumprogrammām, piemēram, Bluetooth bākugunīm, fitnesa joslām, tuvuma utt. ESP32 var izmantot arī kā sērijveida Bluetooth, piemēram, HC-05 vai HC-06 moduļus vienkāršiem mikrokontrolleru projektiem.
Kā mēs zinām, BLE var darboties divos dažādos režīmos - servera režīmā un klienta režīmā. Abi režīmi ir apspriesti mūsu iepriekšējās ESP32 apmācībās:
- ESP32 BLE serveris - GATT pakalpojums akumulatora līmeņa indikācijai
- ESP32 BLE klients - savienojums ar fitnesa joslu, lai iedarbinātu spuldzi
Šajā apmācībā mēs izveidosim BLE iBeacon, izmantojot ESP32, kur ESP32 darbosies kā serveris, bet viedtālrunis - kā klients. Es pieņemu, ka jūs jau esat iepazinies ar to, kā izmantot ESP32 plāksni ar Arduino IDE, ja neatgriezieties pie darba sākšanas ar ESP32 apmācību.
Jūs varat arī uzzināt vairāk par to, kas ir Beacon / iBeacon tehnoloģija, izmantojot mūsu iepriekšējos Bluetooth iBeacon projektus, izmantojot Raspberry Pi un HM-10 BLE iBeacon.
Nepieciešamās sastāvdaļas
Aparatūra:
- ESP32 attīstības padome
- Mikro USB kabelis
Programmatūra:
- Arduino IDE
- Android lietotne: nRF Connect for Mobile (ar Nordic Semiconductor)
Ir daudz BLE skeneru lietotņu, vienu no tām mēs esam izmantojuši mūsu iepriekšējā projektā Kā izmantot HM-10 BLE moduli ar Arduino. Šī BLE skenera lietotne nodrošina labu grafisko saskarni (GUI), taču tai trūkst papildus informācijas, tāpēc šajā projektā mēs izmantojam NRF Connect for Mobile lietotni.
Lietotnes nRF Connect lietojumprogrammas ESP32 iBeacon izmantošana
1. Lejupielādējiet lietotni nRF Connect no Google Play veikala un atveriet to.
2. Ekrāns izskatās zemāk. Noderīgas opcijas šim projektam būs “Skenēšana”, “Skeneris” un “Informācija”, kad ierīces tiks atrastas.
"Scan" iespēja tiks izmantota, lai redzētu visus pieejamos iBeacons. Lai sāktu meklēt iBeacon, nolieciet ekrānu vai dodieties uz opciju Skenēt ekrāna augšējā labajā stūrī. Tas sāks meklēt pieejamos iBeacons.
3. Pēc iBeacon meklēšanas jūs varēsit redzēt iBeacon RSSI, UUID, Major un Minor. RSSI mainīsies, ja atņemsit mobilo tālruni vai iBeacon viens no otra. Šajā ekrānā RSSI ir (-37). Izņemot šo, ir dažas detaļas, piemēram, manekena uzņēmuma nosaukums, ierīces tips, baitu garums, ESP32 vietējais nosaukums. Šeit tas ir “ ESP32 kā iBeacon ”. Skicē varat mainīt vietējo nosaukumu.
4. Pēc viedtālruņa atņemšanas iBeacon RSSI vērtība mainās no -37 uz -58. Šīs vērtības nemainīsies, ja pārvietosit kādu no ierīcēm.
RSSI signālam pieņemamās vērtības ir šādas:
Signāla stiprums | TL; DR | Nepieciešama | |
---|---|---|---|
-30 dBm | Pārsteidzoši | Maksimāli sasniedzamais signāla stiprums. Lai to sasniegtu, klients var atrasties tikai dažu pēdu attālumā no AP. Nav tipisks vai vēlams reālajā pasaulē. | N / A |
-67 dBm | Ļoti labi | Minimālais signāla stiprums lietojumprogrammām, kurām nepieciešama ļoti uzticama, savlaicīga datu pakešu piegāde. | VoIP / VoWiFi, straumēšanas video |
-70 dBm | Labi | Minimālais signāla stiprums drošai pakešu piegādei. | E-pasts, tīmeklis |
-80 dBm | Nav labi | Minimālais signāla stiprums pamata savienojamībai. Pakešu piegāde var būt neuzticama. | N / A |
-90 dBm | Nelietojams | Tuvojas vai noslīkst trokšņa grīdā. Jebkura funkcionalitāte ir ļoti maz ticama. | N / A |
ESP32 programmēšana darbam kā BLE iBeacon
ESP32 BLE iBeacon paraugprogramma ir pieejama, instalējot ESP32 paneli Arduino IDE. Bet mēs šajā pamācībā esam nedaudz rediģējuši šo skici, šīs apmācības beigās ir norādīta programmas parauga pilnā rediģētā versija.
Lai atvērtu ESP32 BLE_iBeacon paraugprogrammu, veiciet tālāk norādītās darbības.
- Atveriet Arduino IDE un atlasiet “ESP32 Dev Module”. (Ja neatrodat šo dēli, lūdzu, pārbaudiet, vai esat instalējis ESP32 dēļu paketi)
- Dodieties uz Fails > Piemēri > ESP32 BLE Arduino > BLE_iBeacon
- Atveriet skici “BLE_iBeacon”.
Tagad kodā ir nelielas izmaiņas, kas tiek veiktas šajā apmācībā. Šajā skicē tiks atjaunināts arī ESP32 nosaukums. Tāpēc sāciet ar nepieciešamo bibliotēku iekļaušanu, kas tiks izmantotas BLE servera un iBeacon izveidē.
#include "sys / time.h"
Šī ir laika bibliotēka, lai iegūtu pašreizējo sistēmas laiku. Tas satur tādas funkcijas kā tv_sec, gettimeofday () utt. Lai iegūtu papildinformāciju, varat apmeklēt oficiālo UNIX laidienu “ sys / time.h”.
Pēc tam tiek iekļautas ESP32 BLE bibliotēkas, kas satur daudzas funkcijas, kas tiek izmantotas, lai izveidotu ESP32 dažādās konfigurācijās, piemēram, BLE Client vai BLE Server.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
Ir iekļauta iBeacon bibliotēka, kas ESP32 iestata kā iBeacon. Līdz ar to ESP32 ir iekļauta dziļā miega bibliotēka. Bibliotēka tiks izmantota, lai noteiktu laiku nosūtītu ESP32 dziļā miega režīmā.
#include "BLEBeacon.h" #include "esp_sleep.h"
Definējiet ESP32 miega ilgumu. Šeit ESP32 būs dziļā miegā 10 sekundes, un tas reklamēsies un pēc tam atkal sāks gulēt uz 10 sekundēm.
#define GPIO_DEEP_SLEEP_DURATION 10
Šeit ir definēts RTC_DATA_ATTR. Ņemiet vērā, ka, definējot globālo mainīgo ar atribūtu RTC_DATA_ATTR, mainīgais tiks ievietots RTC_SLOW_MEM atmiņā. Tātad struktūra, kas deklarēta kā RTC_DATA_ATTR, un dinamiskās atmiņas kopēšana šajā struktūrā pirms dziļa miega palīdz to atgūt dinamiskajā atmiņā pēc pamošanās. Vienkāršos vārdos mēs ietaupām laiku statiskajā atmiņā no dinamiskās atmiņas, lai to atkal atgūtu pēc dziļa miega. Šeit ir definēti divi mainīgie. “ Pēdējais ” tiek izmantots, lai iegūtu pēdējo reizi, kad ESP32 gulēja dziļā miegā, un sāknēšanas skaitam tiek izmantots atiestatījumu skaits.
RTC_DATA_ATTR statiskais laiks_t pēdējais; RTC_DATA_ATTR statiskais uint32_t sāknēšanas skaitlis;
Pēc tam definējiet BLE reklamēšanas veidu. Definīcija tiek veikta šādi.
BLEReklāma * pReklāma;
Timeval tiek definēta kā struktūra, lai piekļūtu pašreizējo laiku.
struktūras laiks tagad;
Ir definēts arī UUID. UUID var izveidot no šīs saites .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Tagad izveidojiet funkciju, kurā būs iBeacon atribūti, piemēram, UUID, Major, Minor utt. Šajā funkcijā izveidojiet BLE instanci kā iBeacon un iestatiet ESP32 kā iBeacon viltotu ražotāja ID, UUID, major un minor.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((sāknēšanas skaits un 0xFFFF0000) >> 16); oBeacon.setMinor (sāknēšanas skaits un 0xFFFF);
Iestatiet karodziņu kā 0x04 , lai tas skenerī izdotu BrEdrNotSupported .
oData.setFlags (0x04);
Iestatiet reklāmas datus publicēšanai.
std:: string strServiceData = "";
Pievienojiet virkni viens pēc otra, lai reklamētos.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Ierakstiet strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Sāciet reklamēšanu, publicējot datus.
pReklāma-> setData (oData); pReklāma-> setScanResponseData (oScanResponseData);
Sāciet sērijveida monitoru ar ātrumu 115200 un iegūstiet laiku. Lai saglabātu atiestatījumu skaitu, palieliniet arī sāknēšanas skaitli.
Sērijas sākums (115200); gettimeofday (& tagad, NULL); Serial.printf ("start ESP32% d \ n", sāknēšanas skaits ++);
Saglabājiet pašreizējo laiku statiskajā atmiņā.
pēdējais = tagad.tv_sek;
Izveidojiet BLE ierīci un nosauciet to, kā vēlaties. Šeit ESP32 tiek nosaukts kā “ ESP2 kā iBeacon ”. Ņemiet vērā, ka nosaukumi var būt gari, taču šī koda versija ir sākusi garo vārdu atbalstu.
BLEDevice:: init ("ESP32 kā iBeacon");
Izveidojiet BLE serveri, lai reklamētos un sāktu.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startReklāma ();
Pēc tam iestatiet ESP32 iBeacon režīmā.
setBeacon ();
Sāciet reklamēt, pēc tam pārtrauciet reklamēšanu un dodieties dziļā miegā uz 10 sekundēm.
pReklāma-> sākums (); pReklāma-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Visbeidzot pievienojiet ESP32 izstrādes paneli ar savu klēpjdatoru, izmantojot Micro USB kabeli, un augšupielādējiet kodu ESP32, izmantojot Arduino IDE. Pēc tam viedtālrunī atveriet nRF Connect Android lietotni un sāciet skenēšanu. ESP32 atradīsit kā iBeacon apraidi, kā parādīts zemāk esošajā attēlā:
Šādi ESP32 var izmantot kā BLE Beacon, lai reklamētu UUID, Major un Minor. Ja vēlaties uzzināt vairāk par iBeacon, izpildiet mūsu iepriekšējo apmācību par HM10 kā iBeacon. Arī tad, ja jums ir kādas šaubas, komentējiet tālāk vai uzdodiet jautājumus forumos.
Pilns kods ar darba video ir norādīts zemāk.
/>