- Požadované komponenty
- Používání aplikace nRF Connect pro Android pro ESP32 iBeacon
- Programování ESP32 pro práci jako BLE iBeacon
ESP32 je opravdu silné zařízení IoT, které má vestavěnou podporu Bluetooth a WiFi. ESP32 je pokročilá verze svého předchůdce ESP8266 s dalšími funkcemi, jako je RAM, ROM, GPIO piny atd. Modul ESP32 podporuje klasický Bluetooth i Bluetooth Low Energy (BLE), klasický Bluetooth lze použít k přenosu skladeb nebo souborů a BLE možnost lze použít pro aplikace optimalizované na baterii, jako jsou Bluetooth majáky, fitness pásma, bezdotykové systémy atd. Je také možné použít ESP32 jako sériové Bluetooth jako moduly HC-05 nebo HC-06 pro jednoduché projekty mikrokontroléru.
Jak víme, BLE může pracovat ve dvou různých režimech - režim serveru a režim klienta. Oba režimy byly popsány v našich předchozích výukových programech ESP32:
- Server ESP32 BLE - služba GATT pro indikaci stavu baterie
- Klient ESP32 BLE - připojení k fitness pásmu pro spuštění žárovky
V tomto kurzu sestavíme BLE iBeacon pomocí ESP32, kde bude ESP32 fungovat jako server a smartphone jako klient. Předpokládám, že už víte, jak používat desku ESP32 s Arduino IDE, pokud ne spadnout zpět na začátek s výukovým programem ESP32.
Další informace o tom, co je technologie Beacon / iBeacon, naleznete v našich předchozích projektech Bluetooth iBeacon pomocí Raspberry Pi a HM-10 BLE iBeacon.
Požadované komponenty
Hardware:
- Vývojová deska ESP32
- Kabel micro USB
Software:
- Arduino IDE
- Aplikace pro Android: nRF Connect pro mobilní zařízení (Nordic Semiconductor)
Existuje mnoho aplikací pro skenování BLE, jednu z nich jsme použili v našem předchozím projektu How to Use HM-10 BLE Module with Arduino. Tato aplikace skeneru BLE poskytuje dobré grafické rozhraní (GUI), postrádá však dodatečné informace, takže v tomto projektu používáme aplikaci NRF Connect pro mobilní zařízení.
Používání aplikace nRF Connect pro Android pro ESP32 iBeacon
1. Stáhněte si aplikaci nRF Connect z obchodu Google Play a otevřete ji.
2. Obrazovka vypadá níže. Užitečnými možnostmi pro tento projekt budou „Scan“, „Scanner“ a „Info“, když se zařízení najde.
‚Scan‘ volba bude použita pro zobrazení všech dostupných iBeacons. Chcete-li začít hledat iBeacon, buď stáhněte obrazovku dolů nebo přejděte na možnost „Skenovat“ v pravém horním rohu obrazovky. Tím se začne hledat dostupné iBeacony.
3.Po prohledání iBeaconu uvidíte RSSI, UUID, Major i Minor iBeaconu. RSSI se změní, pokud od sebe vzdálíte mobilní zařízení nebo iBeacon. Zde na této obrazovce je RSSI (-37). Kromě toho existují některé podrobnosti, například fiktivní název společnosti, typ zařízení, délka bajtů, místní název ESP32. Tady je „ ESP32 jako iBeacon “. Ve skici můžete změnit místní název.
4. Po odebrání smartphonu z iBeacon se hodnota RSSI změní z -37 na -58. Tyto hodnoty se budou neustále měnit, pokud přesunete jedno ze zařízení.
Přijatelné hodnoty signálu RSSI jsou následující:
Síla signálu | TL; DR | Povinné pro | |
---|---|---|---|
-30 dBm | Úžasný | Maximální dosažitelná síla signálu. K dosažení tohoto cíle může být klient jen pár stop od AP. Ve skutečném světě není typické ani žádoucí. | N / A |
-67 dBm | Velmi dobře | Minimální síla signálu pro aplikace, které vyžadují velmi spolehlivé a včasné doručení datových paketů. | VoIP / VoWiFi, streamování videa |
-70 dBm | dobře | Minimální síla signálu pro spolehlivé doručení paketů. | E-mail, web |
-80 dBm | Špatný | Minimální síla signálu pro základní připojení. Doručování paketů může být nespolehlivé. | N / A |
-90 dBm | Nepoužitelný | Blíží se nebo se topí v hlučné podlaze. Jakákoli funkce je vysoce nepravděpodobná. | N / A |
Programování ESP32 pro práci jako BLE iBeacon
Když instalujete desku ESP32 v Arduino IDE, je k dispozici ukázkový program ESP32 BLE iBeacon. Ale tento náčrt jsme v tomto výukovém programu mírně upravili, kompletní upravená verze ukázkového programu je uvedena na konci tohoto výukového programu.
Chcete-li otevřít ukázkový program ESP32 BLE_iBeacon, postupujte podle níže uvedených kroků.
- Otevřete Arduino IDE a vyberte „ESP32 Dev Module“. (Pokud tuto desku nenajdete, zkontrolujte prosím, zda jste nainstalovali balíček ESP32 Board)
- Přejděte na Soubor > Příklady > ESP32 BLE Arduino > BLE_iBeacon
- Otevřete skicu „BLE_iBeacon“.
Nyní dochází k mírné úpravě kódu, která se provádí v tomto kurzu. V tomto náčrtu bude také aktualizován název ESP32. Začněte tedy zahrnutím nezbytných knihoven, které budou použity při vytváření serveru BLE a iBeacon.
#include "sys / time.h"
Toto je časová knihovna pro získání aktuálního systémového času. Obsahuje funkce jako tv_sec, gettimeofday () atd. Další informace najdete v oficiálním vydání systému ' sys / time.h' pro UNIX.
Pak jsou zahrnuty knihovny ESP32 BLE, které obsahují mnoho funkcí používaných k výrobě ESP32 v různých konfiguracích, jako je BLE klient nebo BLE server.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
Knihovna IBeacon je součástí, která stanoví ESP32 jako IBeacon. Spolu s tím je pro ESP32 zahrnuta knihovna hlubokého spánku. Knihovna bude použita k odesílání ESP32 v režimu hlubokého spánku po definovanou dobu.
#include "BLEBeacon.h" #include "esp_sleep.h"
Definujte dobu spánku pro ESP32. Zde bude ESP32 v hlubokém spánku po dobu 10 sekund, bude inzerovat a poté znovu přejde do hlubokého spánku po dobu 10 sekund.
#define GPIO_DEEP_SLEEP_DURATION 10
Zde je definován RTC_DATA_ATTR. Všimněte si, že pokud definujete globální proměnnou s atributem RTC_DATA_ATTR, bude proměnná umístěna do paměti RTC_SLOW_MEM. Takže struktura deklarovaná jako RTC_DATA_ATTR a kopírování dynamické paměti do této struktury před hlubokým spánkem pomáhá obnovit to do dynamické paměti po probuzení. Jednoduše řečeno, šetříme čas ve statické paměti z dynamické paměti, abychom jej po hlubokém spánku znovu obnovili. Zde jsou definovány dvě proměnné. ' Poslední ' se používá k získání posledního času, kdy ESP32 přešel do hlubokého spánku a počet bootů se používá počet počet resetů.
RTC_DATA_ATTR statický čas_t poslední; RTC_DATA_ATTR statický uint32_t bootcount;
Poté definujte typ reklamy BLE. Definice se provádí následovně.
BLEAdvertising * pAdvertising;
Časový interval je definován jako struktura pro přístup k aktuálnímu času.
strukturovat timeval hned;
Rovněž je definován UUID. Z tohoto odkazu lze vygenerovat UUID .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Nyní vytvořte funkci, která bude obsahovat atributy iBeacon, jako jsou UUID, Major, Minor atd. V této funkci vytvořte instanci pro BLE jako iBeacon a nastavte falešné ID výrobce, UUID, major a minor pro ESP32 jako iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((bootcount & 0xFFFF0000) >> 16); oBeacon.setMinor (bootcount & 0xFFFF);
Nastavit příznak jako 0x04 tak, že bude výstup BrEdrNotSupported ve skeneru.
oData.setFlags (0x04);
Nastavit reklamní data pro publikování.
std:: string strServiceData = "";
Přidejte řetězec jeden po druhém pro inzerci.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Zadejte strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Zahajte reklamu zveřejněním údajů.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Začněte sériový monitor s přenosovou rychlostí 115200 a získejte čas. Také zvyšovat bootcount pro uložení počtu resetů.
Serial.begin (115200); gettimeofday (& now, NULL); Serial.printf ("start ESP32% d \ n", bootcount ++);
Uložte aktuální čas do statické paměti.
last = now.tv_sec;
Vytvořte zařízení BLE a pojmenujte jej, jak chcete. Zde je ESP32 pojmenován jako „ ESP2 jako iBeacon “. Všimněte si, že názvy mohou být dlouhé, ale tato verze kódu zahájila podporu dlouhých jmen.
BLEDevice:: init ("ESP32 jako iBeacon");
Chcete-li inzerovat a začít, vytvořte server BLE.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Poté nastavte ESP32 v režimu iBeacon.
setBeacon ();
Spusťte reklamu, poté ji zastavte a jděte na 10 sekund do hlubokého spánku.
pAdvertising-> start (); pAdvertising-> stop (); esp_deep_sleep (10 000 000LL * GPIO_DEEP_SLEEP_DURATION);
Nakonec připojte vývojovou desku ESP32 k notebooku pomocí kabelu Micro USB a nahrajte kód do ESP32 pomocí Arduino IDE. Poté ve smartphonu otevřete aplikaci nRF Connect pro Android a spusťte skenování. ESP32 najdete jako vysílání iBeacon, jak je znázorněno na následujícím obrázku:
Takto lze ESP32 použít jako BLE Beacon k inzerci UUID, Major a Minor. Pokud se chcete o iBeaconu dozvědět více, postupujte podle našeho předchozího kurzu o HM10 jako iBeacon. Pokud máte jakékoli pochybnosti, komentujte níže nebo pokládejte otázky ve fórech.
Kompletní kód s fungujícím videem je uveden níže.
/>