- Komponente potrebne
- Korištenje aplikacije nRF Connect Android za ESP32 iBeacon
- Programiranje ESP32 za rad kao BLE iBeacon
ESP32 je stvarno moćan IoT uređaj s ugrađenom podrškom za Bluetooth i WiFi. ESP32 je napredna verzija svog prethodnika ESP8266 s dodatnim značajkama poput RAM-a, ROM-a, GPIO pinova itd. ESP32 modul podržava klasični Bluetooth i Bluetooth Low Energy (BLE), klasični Bluetooth može se koristiti za prijenos pjesama ili datoteka te BLE opcija se može koristiti za aplikacije optimizirane za bateriju kao što su Bluetooth svjetionici, fitnes pojasevi, blizina itd. Također je moguće koristiti ESP32 kao serijski Bluetooth poput modula HC-05 ili HC-06 za jednostavne projekte mikrokontrolera.
Kao što znamo, BLE može raditi u dva različita načina - poslužiteljskom i klijentskom. Oba načina su razmatrana u našim prethodnim Vodičima za ESP32:
- ESP32 BLE poslužitelj - GATT usluga za indikaciju razine baterije
- ESP32 BLE klijent - spajanje na fitnes traku za aktiviranje žarulje
U ovom uputstvu izradit ćemo BLE iBeacon koristeći ESP32 gdje će ESP32 djelovati kao poslužitelj, a pametni telefon kao klijent. Pretpostavljam da ste već upoznati s načinom korištenja ESP32 ploče s Arduino IDE-om, ako se ne vratite na početak rada s ESP32 tutorialom.
Također možete saznati više o tome što je Beacon / iBeacon tehnologija prolazeći kroz naše prethodne Bluetooth iBeacon projekte koristeći Raspberry Pi i HM-10 BLE iBeacon.
Komponente potrebne
Hardver:
- ESP32 odbor za razvoj
- Mikro USB kabel
Softver:
- Arduino IDE
- Android aplikacija: nRF Connect za mobilne uređaje (Nordic Semiconductor)
Postoji mnogo aplikacija za BLE skener, jednu od njih koristili smo u našem prethodnom projektu Kako koristiti HM-10 BLE modul s Arduinom. Ova aplikacija za skeniranje BLE pruža dobro grafičko sučelje (GUI), ali nema dodatne informacije, tako da u ovom projektu koristimo aplikaciju NRF Connect for Mobile.
Korištenje aplikacije nRF Connect Android za ESP32 iBeacon
1. Preuzmite aplikaciju nRF Connect s Google Play trgovine i otvorite je.

2. Zaslon izgleda kao dolje. Korisne opcije za ovaj projekt bit će "Skeniraj", "Skener" i "Informacije" kada se uređaji pronađu.
Opcija 'Skeniraj' koristit će se za prikaz svih dostupnih iBeacona. Da biste započeli potragu za iBeaconom, povucite zaslon ili idite na opciju 'Skeniraj' u gornjem desnom kutu zaslona. Ovo će započeti potragu za dostupnim iBeaconsima.

3. Nakon pretraživanja iBeacona, moći ćete vidjeti RSSI, UUID, Major i Minor iBeacona. RSSI će se promijeniti ako međusobno odvojite mobitel ili iBeacon. Ovdje na ovom zaslonu, RSSI je (-37). Osim ovoga, postoje neki detalji kao što su ime tvrtke, tip uređaja, duljina bajtova, lokalni naziv ESP32. Ovdje je “ ESP32 kao iBeacon ”. Lokalno ime možete promijeniti na skici.

4. Nakon oduzimanja pametnog telefona iBeaconu, vrijednost RSSI mijenja se s -37 na -58. Te će se vrijednosti mijenjati ako premjestite jedan od uređaja.

Vrijednosti RSSI signala su sljedeće:
| Jačina signala | TL; DR | Potrebno za | |
|---|---|---|---|
| -30 dBm | Nevjerojatno | Maksimalno dostižna snaga signala. Klijent može biti udaljen samo nekoliko metara od AP-a da to postigne. Nije tipično ili poželjno u stvarnom svijetu. | N / A | 
| -67 dBm | Vrlo dobro | Minimalna jačina signala za aplikacije koje zahtijevaju vrlo pouzdanu i pravodobnu isporuku paketa podataka. | VoIP / VoWiFi, streaming video | 
| -70 dBm | u redu | Minimalna jačina signala za pouzdanu isporuku paketa. | E-pošta, web | 
| -80 dBm | Nije dobro | Minimalna jačina signala za osnovno povezivanje. Dostava paketa može biti nepouzdana. | N / A | 
| -90 dBm | Neupotrebljiv | Približavanje ili utapanje u podu buke. Bilo koja funkcionalnost je vrlo malo vjerojatna. | N / A | 
Programiranje ESP32 za rad kao BLE iBeacon
Postoji uzorak programa ESP32 BLE iBeacon dostupan kada instalirate ESP32 ploču u Arduino IDE. Ali malo smo uredili ovu skicu u ovom vodiču, cjelovita uređena verzija oglednog programa data je na kraju ovog vodiča.
Da biste otvorili uzorak programa ESP32 BLE_iBeacon, samo slijedite korake ispod.
- Otvorite Arduino IDE i odaberite “ESP32 Dev Module”. (Ako ovu ploču ne pronađete, provjerite jeste li instalirali paket ploča ESP32)
- Idite na Datoteka > Primjeri > ESP32 BLE Arduino > BLE_iBeacon
- Otvorite skicu “BLE_iBeacon”.
Sada postoji mala izmjena koda koja je izvedena u ovom vodiču. Ime ESP32 također će biti ažurirano u ovoj skici. Započnite s uključivanjem potrebnih knjižnica koje će se koristiti u stvaranju BLE poslužitelja i iBeacona.
#include "sys / time.h"
Ovo je knjižnica vremena za dobivanje trenutnog sistemskog vremena. Sadrži funkcije kao što su tv_sec, gettimeofday () itd. Za više informacija možete posjetiti službeno UNIX-ovo izdanje " sys / time.h".
Zatim su uključene ESP32 BLE knjižnice koje sadrže mnoge funkcije korištene za izradu ESP32 u različitim konfiguracijama, poput BLE klijenta ili BLE poslužitelja.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
IBeacon knjižnica je uključena koji postavlja ESP32 kao iBeacon. Uz to je za ESP32 uključena i knjižnica dubokog spavanja. Knjižnica će se koristiti za slanje ESP32 u načinu dubokog spavanja tijekom određenog vremenskog razdoblja.
#include "BLEBeacon.h" #include "esp_sleep.h"
Definirajte trajanje spavanja za ESP32. Ovdje će ESP32 biti u dubokom snu u trajanju od 10 sekundi, oglašavat će se, a zatim ponovno ići u duboki san na 10 sekundi.
#define GPIO_DEEP_SLEEP_DURATION 10
Ovdje je definiran RTC_DATA_ATTR. Imajte na umu da ako definirate globalnu varijablu s RTC_DATA_ATTR atributom, varijabla će biti smještena u RTC_SLOW_MEM memoriju. Dakle, struktura deklarirana kao RTC_DATA_ATTR i kopiranje dinamičke memorije u ovu strukturu prije dubokog spavanja pomaže oporavku toga u dinamičku memoriju nakon buđenja. Jednostavnim riječima štedimo vrijeme u statičkoj memoriji iz dinamičke memorije da bismo ga ponovno oporavili nakon dubokog sna. Ovdje su definirane dvije varijable. Znak ' zadnji ' koristi se za posljednji put kada je ESP32 prešao u duboko spavanje i kada se koristi broj računara za resetiranje.
RTC_DATA_ATTR statički time_t zadnji; RTC_DATA_ATTR statički broj pokretanja uint32_t;
Zatim definirajte BLE vrstu oglašavanja. Definicija se vrši na sljedeći način.
BLEAdvertising * pAdvertising;
Vremenski interval definiran je kao struktura za pristup trenutnom vremenu.
struct timeval sada;
Također je definiran UUID. UUID-ovi se mogu generirati s ove veze .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Sada stvorite funkciju koja će sadržavati iBeacon atribute kao što su UUID, Major, Minor itd. U ovoj funkciji stvorite instancu za BLE kao iBeacon i postavite lažni ID proizvođača, UUID, major i mol za ESP32 kao iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((broj pokretanja & 0xFFFF0000) >> 16); oBeacon.setMinor (broj pokretanja & 0xFFFF);
Postavite zastavicu na 0x04 tako da će na skeneru izlaziti BrEdrNotSupported .
oData.setFlags (0x04);
Postavite podatke o oglašavanju za objavljivanje.
std:: string strServiceData = "";
Dodajte niz jedan za drugim za oglašavanje.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Upišite strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Započnite oglašavanje objavljivanjem podataka.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Pokrenite serijski monitor brzinom od 115200 baudova i iskoristite vrijeme. Također povećajte broj pokretanja kako biste pohranili broj Resetiranja.
Serial.begin (115200); gettimeofday (& sada, NULL); Serial.printf ("pokreni ESP32% d \ n", broj pokretanja ++);
Spremite trenutno vrijeme u statičku memoriju.
zadnji = sada.tv_sec;
Stvorite BLE uređaj i imenujte ga kako želite. Ovdje je ESP32 nazvan „ ESP2 kao iBeacon “. Imajte na umu da imena mogu biti duga, ali ova verzija koda pokrenula je podršku za duga imena.
BLEDevice:: init ("ESP32 kao iBeacon");
Stvorite BLE poslužitelj za oglašavanje i početak.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Zatim postavite ESP32 u iBeacon mod.
setBeacon ();
Počnite s oglašavanjem, a zatim prestanite s oglašavanjem i prijeđite na duboko spavanje 10 sekundi.
pOglašavanje-> start (); pOglašavanje-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Napokon priključite ESP32 razvojnu ploču s prijenosnim računalom pomoću Micro USB kabela i prenesite kôd u ESP32 pomoću Arduino IDE-a. Zatim otvorite aplikaciju nRF Connect Android na pametnom telefonu i započnite skeniranje. ESP32 kao iBeacon emitiranje naći ćete kako je prikazano na donjoj slici:

Na ovaj se način ESP32 može koristiti kao BLE svjetionik za oglašavanje UUID-a, dur-a i mola. Ako želite znati više o iBeaconu, slijedite naš prethodni vodič o HM10 kao iBeacon. Također ako sumnjate, komentirajte u nastavku ili postavljajte pitanja na forumima.
Kompletni kod s radnim video zapisom dan je u nastavku.
/>
