- Súčasti sú povinné
- Používanie aplikácie Android nRF Connect pre ESP32 iBeacon
- Programovanie ESP32 na prácu ako BLE iBeacon
ESP32 je skutočne silné zariadenie IoT, ktoré má zabudovanú podporu Bluetooth a WiFi. ESP32 je pokročilá verzia svojho predchodcu ESP8266 s extra funkciami ako RAM, ROM, GPIO piny atď. Modul ESP32 podporuje klasické Bluetooth aj Bluetooth Low Energy (BLE), klasické Bluetooth je možné použiť na prenos skladieb alebo súborov a BLE túto možnosť je možné použiť pre aplikácie optimalizované na batériu, ako sú Bluetooth majáky, fitness pásma, proximity atď. Je tiež možné použiť ESP32 ako sériové Bluetooth, ako sú moduly HC-05 alebo HC-06 pre jednoduché projekty mikrokontrolérov.
Ako vieme, BLE môže pracovať v dvoch rôznych režimoch - serverový režim a klientský režim. O oboch režimoch sme hovorili v našich predchádzajúcich výučbách ESP32:
- Server ESP32 BLE - služba GATT na indikáciu stavu batérie
- Klient ESP32 BLE - pripojenie k fitness pásmu na spustenie žiarovky
V tomto tutoriáli zostavíme BLE iBeacon pomocou ESP32, kde ESP32 bude fungovať ako server a smartphone ako klient. Predpokladám, že už viete, ako používať dosku ESP32 s Arduino IDE, ak sa nevrátite k úvodnému tutoriálu ESP32.
Môžete sa tiež dozvedieť viac o technológii Beacon / iBeacon Technology a to tak, že si prejdete naše predchádzajúce projekty Bluetooth iBeacon využívajúce Raspberry Pi a HM-10 BLE iBeacon.
Súčasti sú povinné
Hardvér:
- Vývojová rada ESP32
- Kábel micro USB
Softvér:
- Arduino IDE
- Aplikácia pre Android: nRF Connect for Mobile (od spoločnosti Nordic Semiconductor)
Existuje veľa aplikácií na skenovanie BLE, jednu z nich sme použili v našom predchádzajúcom projekte Ako používať modul HM-10 BLE s Arduino. Táto aplikácia skenera BLE poskytuje dobré grafické rozhranie (GUI), chýbajú jej však ďalšie informácie, takže v tomto projekte používame aplikáciu NRF Connect for Mobile.
Používanie aplikácie Android nRF Connect pre ESP32 iBeacon
1. Stiahnite si aplikáciu nRF Connect z obchodu Google Play a otvorte ju.
2. Obrazovka vyzerá takto. Užitočné možnosti pre tento projekt budú „Skenovať“, „Skener“ a „Informácie“, keď sa zariadenia nájdu.
Možnosť „Skenovať“ sa použije na zobrazenie všetkých dostupných iBeaconov. Ak chcete začať vyhľadávať iBeacon, buď potiahnite obrazovku alebo choďte na možnosť „Skenovať“ v pravom hornom rohu obrazovky. Týmto sa začne hľadať dostupné iBeacons.
3. Po prehľadaní iBeaconu uvidíte RSSI, UUID, hlavné a menšie iBeaconu. RSSI sa zmení, ak od seba vzdialite mobil alebo iBeacon. Na tejto obrazovke je hodnota RSSI (-37). Okrem toho existujú aj niektoré podrobnosti, napríklad fiktívny názov spoločnosti, typ zariadenia, dĺžka bajtov, miestny názov ESP32. Tu je to „ ESP32 ako iBeacon “. Miestny názov môžete zmeniť v náčrte.
4. Po odobratí smartfónu z iBeacon sa hodnota RSSI zmení z -37 na -58. Tieto hodnoty sa budú neustále meniť, ak presuniete jedno zo zariadení.
Prijateľné hodnoty signálu RSSI sú nasledujúce:
Sila signálu | TL; DR | Vyžadovaný pre | |
---|---|---|---|
-30 dBm | Úžasný | Maximálna dosiahnuteľná sila signálu. Klient to môže byť len pár metrov od AP, aby to dosiahol. V reálnom svete nie je typické ani žiaduce. | N / A |
-67 dBm | Veľmi dobre | Minimálna sila signálu pre aplikácie, ktoré vyžadujú veľmi spoľahlivé a včasné doručenie dátových paketov. | VoIP / VoWiFi, streamovanie videa |
-70 dBm | Dobre | Minimálna sila signálu pre spoľahlivé doručenie paketov. | E-mail, web |
-80 dBm | Nie dobré | Minimálna sila signálu pre základné pripojenie. Doručovanie paketov môže byť nespoľahlivé. | N / A |
-90 dBm | Nepoužiteľné | Blíži sa alebo sa topí v hlučnej podlahe. Akákoľvek funkčnosť je vysoko nepravdepodobná. | N / A |
Programovanie ESP32 na prácu ako BLE iBeacon
Pri inštalácii dosky ESP32 Board v Arduino IDE je k dispozícii ukážkový program ESP32 BLE iBeacon. Ale tento náčrt sme v tomto tutoriále mierne upravili, kompletná upravená verzia ukážkového programu je uvedená na konci tohto tutoriálu.
Ak chcete otvoriť ukážkový program ESP32 BLE_iBeacon, postupujte podľa krokov uvedených nižšie.
- Otvorte Arduino IDE a zvoľte „ESP32 Dev Module“. (Ak nenájdete túto dosku, skontrolujte, či máte nainštalovaný balík ESP32 Board)
- Prejdite na Súbor > Príklady > ESP32 BLE Arduino > BLE_iBeacon
- Otvorte skicu „BLE_iBeacon“.
Teraz je v kóde vykonaná mierna zmena, ktorá sa vykonáva v tomto návode. Názov ESP32 sa tiež aktualizuje v tomto náčrte. Začnite teda zahrnutím potrebných knižníc, ktoré sa použijú pri vytváraní serverov BLE a iBeacon.
#include "sys / time.h"
Toto je časová knižnica na získanie aktuálneho systémového času. Obsahuje funkcie ako tv_sec, gettimeofday () atď. Viac informácií nájdete v oficiálnom vydaní systému „ sys / time.h“ pre systém UNIX.
Potom sú zahrnuté knižnice ESP32 BLE, ktoré obsahujú veľa funkcií používaných na výrobu ESP32 v rôznych konfiguráciách, ako je BLE klient alebo BLE server.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
Knižnica IBeacon je súčasťou, ktorá stanovuje ESP32 ako IBeacon. Spolu s tým je súčasťou ESP32 aj knižnica hlbokého spánku. Knižnica sa bude používať na zasielanie ESP32 v režime hlbokého spánku po stanovenú dobu.
#include "BLEBeacon.h" #include "esp_sleep.h"
Definujte dobu spánku pre ESP32. Tu bude ESP32 v hlbokom spánku po dobu 10 sekúnd, bude inzerovať a potom opäť prejde do hlbokého spánku na 10 sekúnd.
#define GPIO_DEEP_SLEEP_DURATION 10
Tu je definovaný RTC_DATA_ATTR. Upozorňujeme, že ak definujete globálnu premennú s atribútom RTC_DATA_ATTR, premenná sa vloží do pamäte RTC_SLOW_MEM. Takže štruktúra deklarovaná ako RTC_DATA_ATTR a kopírovanie dynamickej pamäte do tejto štruktúry pred hlbokým spánkom pomáha jej obnoveniu do dynamickej pamäte po prebudení. Jednoducho povedané, šetríme čas v statickej pamäti od dynamickej pamäte, aby sme ho po hlbokom spánku znovu obnovili. Tu sú definované dve premenné. „ Posledný “ sa používa na získanie posledného času, keď systém ESP32 prešiel do hlbokého spánku a počet bootov sa používa na výpočet počtu resetov .
RTC_DATA_ATTR statický čas_t posledný; RTC_DATA_ATTR statický uint32_t bootcount;
Potom definujte typ reklamy BLE. Definícia sa vykonáva nasledovne.
BLEAdvertising * pAdvertising;
Časový interval je definovaný ako štruktúra na prístup k aktuálnemu času.
štruktúrovať timeval now;
Je tiež definované UUID. Z tohto odkazu je možné vygenerovať UUID .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Teraz vytvorte funkciu, ktorá bude obsahovať atribúty iBeacon, ako sú UUID, Major, Minor, atď. V tejto funkcii vytvorte inštanciu pre BLE ako iBeacon a nastavte falošné ID výrobcu, UUID, major a minor pre ESP32 ako iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((bootcount & 0xFFFF0000) >> 16); oBeacon.setMinor (bootcount & 0xFFFF);
Nastavte príznak na 0x04 tak, aby v skeneri zobrazoval výstup BrEdrNotSupported .
oData.setFlags (0x04);
Nastaviť reklamné údaje na zverejnenie.
std:: string strServiceData = "";
Pridajte jeden po druhom na inzerciu.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Zadajte strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Začnite reklamu zverejnením údajov.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Začnite sériový monitor s prenosovou rýchlosťou 115 200 a získajte čas. Tiež zvýšte počet bootovaní na uloženie počtu resetov .
Serial.begin (115200); gettimeofday (& now, NULL); Serial.printf ("spustiť ESP32% d \ n", bootcount ++);
Aktuálny čas uložte do statickej pamäte.
last = now.tv_sec;
Vytvorte zariadenie BLE a pomenujte ho, ako chcete. Tu je ESP32 pomenovaný ako „ ESP2 ako iBeacon “. Názvy, môžu byť dlhé, ale táto verzia kódu začala s podporou dlhých mien.
BLEDevice:: init ("ESP32 ako iBeacon");
Vytvorte server BLE a inzerujte a začnite.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Potom nastavte ESP32 do režimu iBeacon.
setBeacon ();
Spustite reklamu, potom zastavte reklamu a choďte na 10 sekúnd do hlbokého spánku.
pAdvertising-> start (); pAdvertising-> stop (); esp_deep_sleep (10 000 000LL * GPIO_DEEP_SLEEP_DURATION);
Nakoniec pripojte vývojovú dosku ESP32 k notebooku pomocou kábla Micro USB a pomocou Arduino IDE nahrajte kód do ESP32. Potom vo svojom smartfóne otvorte aplikáciu Android nRF Connect a začnite skenovať. ESP32 nájdete ako vysielanie iBeacon, ako je znázornené na nasledujúcom obrázku:
Takto možno ESP32 použiť ako BLE Beacon na inzerciu UUID, veľkých a malých. Ak sa chcete dozvedieť viac o aplikácii iBeacon, postupujte podľa nášho predchádzajúceho tutoriálu o HM10 ako iBeacon. Ak máte pochybnosti, komentujte nižšie alebo sa pýtajte na fórach.
Kompletný kód s fungujúcim videom je uvedený nižšie.
/>