- Szükséges alkatrészek
- Az nRF Connect Android App for ESP32 iBeacon használata
- Az ESP32 programozása BLE iBeacon néven történő működésre
Az ESP32 valóban erős IoT-eszköz, amely beépített támogatást nyújt a Bluetooth és a WiFi számára. Az ESP32 az elődje, az ESP8266 fejlett változata, extra funkciókkal, például RAM, ROM, GPIO Pins stb. opció használható akkumulátorral optimalizált alkalmazásokhoz, például Bluetooth jeladókhoz, fitnesz sávokhoz, közelséghez stb. Az ESP32 soros Bluetooth-ként is használható, mint például a HC-05 vagy HC-06 modulok egyszerű mikrokontroller projektekhez.
Mint tudjuk, a BLE kétféle módban működhet - Szerver és Kliens módban. Mindkét módot az előző ESP32 oktatóanyagok már tárgyalták:
- ESP32 BLE Server - GATT szolgáltatás az akkumulátor töltöttségi szintjének jelzéséhez
- ESP32 BLE kliens - Csatlakozás Fitness Band-hoz izzó kiváltásához
Ebben az oktatóanyagban felépítünk egy BLE iBeacon-t az ESP32 segítségével, ahol az ESP32 szerverként, az okostelefon pedig kliensként fog működni. Feltételezem, hogy Ön már ismeri az ESP32 kártya használatát az Arduino IDE-vel, ha nem tér vissza az ESP32 bemutatójának kezdő lépéseihez.
Ha a Raspberry Pi és a HM-10 BLE iBeacon használatával végigvezeti korábbi Bluetooth iBeacon projektjeinket, többet is megtudhat arról, hogy mi a Beacon / iBeacon technológia.
Szükséges alkatrészek
Hardver:
- ESP32 Fejlesztési Tanács
- Mikro USB kábel
Szoftver:
- Arduino IDE
- Android-alkalmazás: nRF Connect for Mobile (a Nordic Semiconductor által)
Számos BLE szkenner alkalmazás létezik, ezek közül egyet használtunk a HM-10 BLE modul Arduino-val történő használatának korábbi projektjében. Ez a BLE szkenner alkalmazás jó grafikus kezelőfelületet (GUI) biztosít, de további információk hiányoznak, ezért ebben a projektben az NRF Connect for Mobile alkalmazást használjuk.
Az nRF Connect Android App for ESP32 iBeacon használata
1. Töltse le az nRF Connect alkalmazást a Google Play Áruházból, és nyissa meg.
2. A képernyő az alábbiak szerint néz ki. A projekt hasznos beállításai a „Szkennelés”, a „Szkenner” és az „Info” lesznek, amikor az eszközök megtalálhatók.
A 'Beolvasás' opcióval az összes rendelkezésre álló iBeacon látható. Az iBeacon keresésének megkezdéséhez húzza le a képernyőt, vagy lépjen a képernyő jobb felső sarkában található „Beolvasás” lehetőségre. Ez elkezdi keresni az elérhető iBeaconokat.
3. Az iBeacon keresése után láthatja az iBeacon RSSI-t, UUID-t, Major-t és Minor-t. Az RSSI megváltozik, ha elveszik egymástól a mobil vagy az iBeacon készüléket. Itt ezen a képernyőn az RSSI (-37). Ezen kívül vannak olyan részletek, mint a Dummy Company neve, az eszköz típusa, a bájtok hossza, az ESP32 helyi neve. Itt ez az „ ESP32 mint iBeacon ”. Megváltoztathatja a helyi nevet a vázlatban.
4. Miután elvette az okostelefont az iBeacon-tól, az RSSI értéke -37-ről -58-ra változik. Ezek az értékek folyamatosan változnak, ha az egyik eszközt áthelyezi.
Az RSSI jel elfogadható értékei a következők:
Jelerősség | TL; DR | Szükséges valamihez | |
---|---|---|---|
-30 dBm | Elképesztő | Maximálisan elérhető jelerősség. Ennek eléréséhez az ügyfél csak néhány méterre van az AP-től. Nem jellemző vagy kívánatos a való világban. | N / A |
-67 dBm | Nagyon jó | Minimális jelerősség azoknál az alkalmazásoknál, amelyek nagyon megbízható, időben történő adatcsomagok kézbesítését igénylik. | VoIP / VoWiFi, video streaming |
-70 dBm | oké | Minimális jelerősség a megbízható csomagküldés érdekében. | E-mail, web |
-80 dBm | Nem jó | Minimális jelerősség az alapvető csatlakozáshoz. A csomagok kézbesítése megbízhatatlan lehet. | N / A |
-90 dBm | Használhatatlan | Közeledik vagy megfullad a zajpadlón. Bármilyen funkcionalitás valószínűtlen. | N / A |
Az ESP32 programozása BLE iBeacon néven történő működésre
Az ESP32 BLE iBeacon mintaprogramja elérhető, amikor telepíti az ESP32 kártyát az Arduino IDE-be. De kissé szerkesztettük ezt a vázlatot ebben az oktatóanyagban, a mintaprogram teljes szerkesztett verziója az oktatóanyag végén található.
Az ESP32 BLE_iBeacon mintaprogramjának megnyitásához kövesse az alábbi lépéseket.
- Nyissa meg az Arduino IDE alkalmazást, és válassza az „ESP32 Dev Module” lehetőséget. (Ha nem találja ezt a táblát, ellenőrizze, hogy telepítette-e az ESP32 alaplap csomagot)
- Válassza a Fájl > Példák > ESP32 BLE Arduino > BLE_iBeacon elemet
- Nyissa meg a „BLE_iBeacon” vázlatot.
Most van egy kis módosítás a kódban, amely ebben az oktatóanyagban történik. Az ESP32 név is frissül ebben a vázlatban. Tehát kezdje a szükséges könyvtárak beépítésével, amelyeket a BLE Server és az iBeacon létrehozásában fognak használni.
#include "sys / time.h"
Ez egy időkönyvtár az aktuális rendszeridő lekérésére. Ez olyan funkciókat tartalmaz, mint a tv_sec, gettimeofday () stb. További információkért látogasson el a ' sys / time.h' hivatalos UNIX kiadására.
Ezután bekerülnek az ESP32 BLE könyvtárak, amelyek számos olyan funkciót tartalmaznak, amelyeket az ESP32 előállításához használnak különböző konfigurációkban, mint például a BLE kliens vagy a BLE szerver.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
A program tartalmazza az iBeacon könyvtárat, amely az ESP32-t iBeacon-ként állítja be. Ezzel együtt a mély alvás könyvtár az ESP32-hez tartozik. A könyvtár segítségével az ESP32-t mély alvó üzemmódban lehet küldeni egy meghatározott ideig.
#include "BLEBeacon.h" #include "esp_sleep.h"
Adja meg az ESP32 alvási időtartamát. Itt az ESP32 mély alvásban lesz 10 másodpercig, és hirdetni fog, majd ismét mély alvásba megy 10 másodpercre.
#define GPIO_DEEP_SLEEP_DURATION 10
Itt az RTC_DATA_ATTR van megadva. Vegye figyelembe, hogy ha globális változót határoz meg az RTC_DATA_ATTR attribútummal, akkor a változó az RTC_SLOW_MEM memóriába kerül. Tehát az RTC_DATA_ATTR néven deklarált struktúra, és a dinamikus memória átmásolása erre a struktúrára a mély alvás előtt segít helyreállítani ezt a dinamikus memóriába ébredés után. Egyszerű szavakkal megtakarítjuk a statikus memória idejét a dinamikus memóriából, hogy mély alvás után újra helyreállítsuk. Itt határozható meg a két változó. Az „ utolsó ” arra szolgál, hogy utoljára megkapja az ESP32 mély alvó állapotát, és a rendszerindítási számot használja a visszaállítások számának.
RTC_DATA_ATTR static time_t last; RTC_DATA_ATTR statikus uint32_t indítószám;
Ezután adja meg a BLE hirdetési típust. A meghatározás a következőképpen történik.
BLEAdvertising * pAdvertising;
Az időtartam az aktuális idő eléréséhez szükséges struktúra.
strukturális időtartam most;
UUID is meg van határozva. Az UUID-k ezen a linken hozhatók létre .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Most hozzon létre egy olyan funkciót, amely az iBeacon attribútumokat tartalmazza, például UUID, Major, Minor stb. Ebben a funkcióban hozzon létre egy példányt a BLE-hez iBeacon néven, és állítson be hamis gyártói azonosítót, UUID-t, major és minor az ESP32-hez, mint iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((bootcount & 0xFFFF0000) >> 16); oBeacon.setMinor (indítószám & 0xFFFF);
Állítsa a jelzőt 0x04 értékre , hogy a BrEdrNotSupported programot adja ki a lapolvasóban.
oData.setFlags (0x04);
Hirdetési adatok beállítása a közzétételhez.
std:: string strServiceData = "";
Adja egymás után a karakterláncot a hirdetéshez.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Írja be az strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Indítsa el a hirdetést adatok közzétételével.
pReklám-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Kezdje a soros monitort 115200 baud sebességgel, és szerezze be az időt. Szintén megnövelni a bootcount tárolni száma Visszaállítja.
Serial.begin (115200); gettimeofday (& now, NULL); Serial.printf ("start ESP32% d \ n", bootcount ++);
Tárolja az aktuális időt a statikus memóriában.
utolsó = most.tv_sec;
Hozzon létre egy BLE eszközt, és nevezze el, ahogy akarja. Itt az ESP32-et „ ESP2-nek, mint iBeaconnak ” nevezik . Vegye figyelembe, hogy a, a nevek hosszúak lehetnek, de a kód ezen verziója elindította a hosszú nevek támogatását.
BLEDevice:: init ("ESP32 mint iBeacon");
Hozzon létre egy BLE szervert a hirdetésekhez és az indításhoz.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Ezután állítsa az ESP32-t iBeacon módba.
setBeacon ();
Kezdje el a reklámot, majd hagyja abba a hirdetést, és aludjon mélyen 10 másodpercig.
pReklám-> start (); pReklám-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Végül csatlakoztassa az ESP32 fejlesztõpanelt a laptopjához egy mikro USB-kábel segítségével, és töltse fel a kódot az ESP32-be az Arduino IDE használatával. Ezután nyissa meg az nRF Connect Android alkalmazást okostelefonján, és kezdje el a szkennelést. Az ESP32 iBeacon közvetítésként található, az alábbi képen látható módon:
Így használható az ESP32 BLE Beacon-ként az UUID, a Major és a Minor hirdetésekor. Ha többet szeretne megtudni az iBeaconról, kövesse az előző oktatóanyagunkat a HM10-en iBeacon néven. Akkor is, ha kétségei vannak, akkor tegye meg észrevételeit vagy tegyen fel kérdéseket a fórumokon.
A teljes kód egy működő videóval alább található.
/>