- Potrebne komponente
- Uporaba aplikacije nRF Connect Android za ESP32 iBeacon
- Programiranje ESP32 za delovanje kot BLE iBeacon
ESP32 je res močna naprava IoT z vgrajeno podporo za Bluetooth in WiFi. ESP32 je napredna različica predhodnika ESP8266 z dodatnimi funkcijami, kot so RAM, ROM, GPIO zatiči itd. Modul ESP32 podpira klasični Bluetooth in Bluetooth Low Energy (BLE), klasični Bluetooth pa lahko uporabite za prenos skladb ali datotek in BLE možnost se lahko uporablja za aplikacije, optimizirane za baterije, kot so svetilniki Bluetooth, fitnes pasovi, bližine itd. ESP32 je mogoče uporabiti tudi kot serijski Bluetooth, kot so moduli HC-05 ali HC-06, za preproste projekte mikrokrmilnika.
Kot vemo, lahko BLE deluje v dveh različnih načinih - strežniškem in odjemalskem. Oba načina sta bila obravnavana v naših prejšnjih vajah za ESP32:
- Strežnik ESP32 BLE - storitev GATT za prikaz stanja baterije
- ESP32 BLE odjemalec - priklop na fitnes pas za sprožitev žarnice
V tej vadnici bomo z uporabo ESP32 zgradili BLE iBeacon, kjer bo ESP32 deloval kot strežnik, pametni telefon pa kot odjemalec. Predvidevam, da ste že seznanjeni s tem, kako uporabljati ploščo ESP32 z Arduino IDE, če se ne vrnete na uvod v vadnico ESP32.
Več o tem, kaj je tehnologija Beacon / iBeacon, lahko izveste tudi v prejšnjih projektih Bluetooth iBeacon z uporabo Raspberry Pi in HM-10 BLE iBeacon.
Potrebne komponente
Strojna oprema:
- Odbor za razvoj ESP32
- Kabel Micro USB
Programska oprema:
- Arduino IDE
- Aplikacija za Android: nRF Connect for Mobile (Nordic Semiconductor)
Obstaja veliko aplikacij za optični bralnik BLE, eno od njih smo uporabili v prejšnjem projektu Kako uporabljati modul HM-10 BLE z Arduino. Ta aplikacija za optični bralnik BLE ponuja dober grafični vmesnik (GUI), vendar nima dodatnih informacij, zato v tem projektu uporabljamo aplikacijo NRF Connect for Mobile.
Uporaba aplikacije nRF Connect Android za ESP32 iBeacon
1. Prenesite aplikacijo nRF Connect iz trgovine Google Play in jo odprite.
2. Zaslon je videti spodaj. Koristne možnosti za ta projekt bodo 'Scan', 'Scanner' in 'Info', ko bodo najdene naprave.
Možnost 'Scan' bo uporabljena za ogled vseh razpoložljivih iBeacons. Če želite začeti iskati iBeacon, spustite zaslon ali pojdite na možnost »Optično branje« v zgornjem desnem kotu zaslona. S tem se bo začelo iskanje razpoložljivih iBeacons.
3. Po iskanju iBeacon boste lahko videli RSSI, UUID, Major in Minor iBeacon. RSSI se bo spremenil, če si mobilni telefon ali iBeacon vzamete drug od drugega. Na tem zaslonu je RSSI (-37). Poleg tega obstajajo nekatere podrobnosti, kot so ime lažnega podjetja, vrsta naprave, dolžina bajtov, lokalno ime ESP32. Tukaj je " ESP32 kot iBeacon ". Na skici lahko spremenite lokalno ime.
4. Po odvzemu pametnega telefona iBeaconu se vrednost RSSI spremeni s -37 na -58. Te vrednosti se bodo še naprej spreminjale, če premaknete eno od naprav.
Sprejemljive vrednosti signala RSSI so naslednje:
Moč signala | TL; DR | Potrebno za | |
---|---|---|---|
-30 dBm | Neverjetno | Največja moč signala. Za dosego tega je stranka oddaljena le nekaj metrov od AP. Ni tipično ali zaželeno v resničnem svetu. | N / A |
-67 dBm | Zelo dobro | Minimalna moč signala za aplikacije, ki zahtevajo zelo zanesljivo in pravočasno dostavo podatkovnih paketov. | VoIP / VoWiFi, pretočni video |
-70 dBm | v redu | Najmanjša moč signala za zanesljivo dostavo paketov. | E-pošta, splet |
-80 dBm | Slabo | Najmanjša moč signala za osnovno povezljivost. Dostava paketov je lahko nezanesljiva. | N / A |
-90 dBm | Neuporaben | Približevanje ali utopitev v tleh s hrupom. Kakršna koli funkcionalnost je zelo malo verjetna. | N / A |
Programiranje ESP32 za delovanje kot BLE iBeacon
Ko namestite ploščo ESP32 v Arduino IDE, je na voljo vzorčni program ESP32 BLE iBeacon. Toda to skico smo nekoliko uredili v tej vadnici, celotna urejena različica vzorčnega programa je podana na koncu te vaje.
Če želite odpreti vzorčni program ESP32 BLE_iBeacon, sledite spodnjim korakom.
- Odprite Arduino IDE in izberite »ESP32 Dev Module«. (Če te plošče ne najdete, preverite, ali ste namestili paket plošč ESP32)
- Pojdite v Datoteka > Primeri > ESP32 BLE Arduino > BLE_iBeacon
- Odprite skico »BLE_iBeacon«.
Zdaj je v tej vadnici narejena manjša sprememba kode. V tej skici bo posodobljeno tudi ime ESP32. Začnite z vključitvijo potrebnih knjižnic, ki bodo uporabljene pri ustvarjanju strežnika BLE in iBeacon.
#include "sys / time.h"
To je knjižnica časa, da dobite trenutni sistemski čas. Ta vsebuje funkcije, kot so tv_sec, gettimeofday () itd. Za več informacij lahko obiščete uradno UNIX -ovo izdajo ' sys / time.h'.
Nato so vključene knjižnice ESP32 BLE, ki vsebuje veliko funkcij, ki se uporabljajo za izdelavo ESP32 v različnih konfiguracijah, kot sta odjemalec BLE ali strežnik BLE.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
Knjižnica iBeacon je vključen, ki določa ESP32 kot iBeacon. Skupaj s tem je za ESP32 vključena knjižnica globokega spanja. Knjižnica bo uporabljena za pošiljanje ESP32 v načinu globokega spanja za določeno časovno obdobje.
#include "BLEBeacon.h" #include "esp_sleep.h"
Določite trajanje spanja za ESP32. Tu bo ESP32 10 sekund v globokem spanju, oglaševal se bo in nato 10 sekund spet prešel v globok spanec.
#define GPIO_DEEP_SLEEP_DURATION 10
Tu je definiran RTC_DATA_ATTR. Če definirate globalno spremenljivko z atributom RTC_DATA_ATTR, bo spremenljivka postavljena v pomnilnik RTC_SLOW_MEM. Torej struktura, razglašena za RTC_DATA_ATTR, in kopiranje dinamičnega pomnilnika v to strukturo pred globokim spanjem pomaga obnoviti to v dinamični pomnilnik po prebujanju. Z enostavnimi besedami prihranimo čas v statičnem pomnilniku iz dinamičnega spomina, da ga po globokem spanju spet obnovimo. Tu sta opredeljeni dve spremenljivki. ' Zadnji ' se uporablja za prikaz zadnjega trenutka, ko je ESP32 prešel v globok spanec in je uporabljen števec zagonov šteje število ponastavitev.
RTC_DATA_ATTR statični time_t zadnji; RTC_DATA_ATTR statični uint32_t bootcount;
Nato določite vrsto oglaševanja BLE. Opredelitev je narejena na naslednji način.
BLEAdvertising * pReklamiranje;
Časovni interval je opredeljen kot struktura za dostop do trenutnega časa.
struct timeval zdaj;
Opredeljen je tudi UUID. UUID-je je mogoče ustvariti s te povezave .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Zdaj ustvarite funkcijo, ki bo vsebovala atribute iBeacon, kot so UUID, Major, Minor itd. V tej funkciji ustvarite primerek za BLE kot iBeacon in nastavite ponarejeni ID proizvajalca, UUID, major in minor za ESP32 kot iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((bootcount & 0xFFFF0000) >> 16); oBeacon.setMinor (števec zagona & 0xFFFF);
Zastavico nastavite kot 0x04, tako da bo v optičnem bralniku izpisala BrEdrNotSupported .
oData.setFlags (0x04);
Nastavite oglaševalske podatke za objavo.
std:: string strServiceData = "";
Niz dodajte enega za drugim za oglaševanje.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Vnesite strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Začnite oglaševati z objavo podatkov.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Začnite serijski monitor s hitrostjo 115200 baudov in si zagotovite čas. Povečajte tudi zagonsko število, da shranite število ponastavitev.
Serial.begin (115200); gettimeofday (& zdaj, NULL); Serial.printf ("zaženi ESP32% d \ n", bootcount ++);
Trenutni čas shranite v statični pomnilnik.
zadnji = zdaj.tv_sec;
Ustvarite napravo BLE in jo poimenujte, kot želite. Tu je ESP32 poimenovan kot “ ESP2 kot iBeacon ”. Imena so lahko dolga, vendar je ta različica kode začela podporo za dolga imena.
BLEDevice:: init ("ESP32 kot iBeacon");
Ustvari strežnik BLE za oglaševanje in zagon.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Nato nastavite ESP32 v način iBeacon.
setBeacon ();
Začnite oglaševati, nato ustavite oglaševanje in pojdite v globok spanec za 10 sekund.
pOglaševanje-> start (); pOglaševanje-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Na koncu priključite razvojno ploščo ESP32 s prenosnim računalnikom s kablom Micro USB in naložite kodo v ESP32 z uporabo Arduino IDE. Nato v pametnem telefonu odprite aplikacijo nRF Connect Android in začnite z optičnim branjem. ESP32 kot iBeacon boste našli v oddaji, kot je prikazano na spodnji sliki:
Tako lahko ESP32 uporabljamo kot svetilnik BLE za oglaševanje UUID, Major in Minor. Če želite izvedeti več o iBeacon, sledite naši prejšnji vadnici o HM10 kot iBeacon. Tudi če dvomite, komentirajte spodaj ali postavljajte vprašanja na forumih.
Celotna koda z delujočim videoposnetkom je navedena spodaj.
/>