- A BLE-hez (Bluetooth Low Energy) kapcsolódó terminológiák
- A hardver előkészítése
- Az ESP32 programozása az akkumulátorszint-jelzéshez a GATT szolgáltatás használatával
- GATT-szolgáltatásának tesztelése az ESP32 BLE-n
Vezeték nélküli fejhallgatók, fitneszszalagok, Bluetooth-hangszórók, fülbe helyezhető fejhallgatók, mobiltelefonok, laptopok… olyan sok Bluetooth-eszköz van körülöttünk, és ezek többsége akkumulátorral működik. Gondolkodott már azon, hogy amikor egy Bluetooth-eszközt csatlakoztat a mobiltelefonjához, az hogyan érti automatikusan, hogy a csatlakoztatott eszköz számítógép vagy audioeszköz vagy mobiltelefon? Bizonyos eszközök esetében a telefon akár az értesítési sávon automatikusan megjeleníti a csatlakoztatott eszköz töltöttségi szintjét. Hogyan történik mindez önmagában? A telefon és a Bluetooth-eszköz között meg kell osztani néhány közös protokollt!
Legyen kíváncsi, választ kap ezekre a kérdésekre, amikor megpróbáljuk megérteni a Bluetooth Low Energy (röviden BLE) funkciót a népszerű ESP32 modullal. Az ESP32 klasszikus Bluetooth-jával ellentétben a BLE csak akkor működik, ha a kommunikáció aktiválva van, és alvó üzemmódban marad, ellenkező esetben ez a megfelelő választás az akkumulátoros alkalmazások számára. A BLE hálós hálózatokat is képezhet, és Beaconként működhet. Normális esetben egy BLE modul szerverként vagy kliensként működik, itt az ESP32 BLE-t fogjuk kiszolgálóként használni.
Itt a teljes ESP32 Bluetooth- ot három szegmensre osztottuk az érthetőség érdekében.
1. Soros Bluetooth az ESP32-n, a LED mobiltelefonról váltakozik
2 . A BLE szerver az akkumulátor töltöttségi szintjének adatait mobiltelefonra küldi a GATT szolgáltatás segítségével
3. A BLE kliens a BLE eszközök keresésére és jelzőként működik.
Az első cikket már ismertettük; Ebben a cikkben megtudhatjuk, hogyan lehet az ESP32 BLE-t szerverként működni, és a GATT szolgáltatás használatával küldhetünk információkat az akkumulátor töltöttségéről. Tesztelés céljából a BLE GATT szolgáltatáson keresztül elküldjük a hardveresen kódolt értékeket az ESP32-ről akkumulátor százalékként a mobiltelefonunkra, így a mobilunk feltételezi, hogy az ESP32 egy akkumulátorral működtetett Bluetooth-eszköz, amely megpróbálja elküldeni az akkumulátor százalékát. Mielőtt a részletekbe bocsátanánk, a Bluetooth Low Energy-hez kapcsolódó néhány terminológiát megértünk.
A BLE-hez (Bluetooth Low Energy) kapcsolódó terminológiák
BLE szerver: Amint azt korábban elmondtuk, a BLE programozható úgy, hogy akár szerverként, akár kliensként működjön. Amikor szerverként dolgozik, a BLE csak olyan adatokat tud szolgáltatni, amelyek nem tudnak kapcsolatot létrehozni. Ilyen lehet például egy fitnesz zenekar. A szerver csak akkor küldhet információkat, ha az ügyfél azt kéri.
Az ESP32 BLE-je leggyakrabban szervert használ. Minden Szervernek egy vagy több Szolgáltatása lesz, hasonlóan mindegyik szolgáltatáshoz tartozik egy vagy több jellemző. A karakterisztikán belül lehet nulla, egy vagy több leíró. Minden szolgáltatásnak, jellemzőnek vagy leírónak saját, előre meghatározott egyedi azonosítója lesz, amelyet UUID-nek hívnak.
BLE kliens: Az ügyfél képes beolvasni a kapcsolatot és meghallgatni más Bluetooth-eszközöket. Ilyen például a mobiltelefon. Ne feledje, hogy a legtöbb BLE hardvereszköz szerverként és kliensként működhet, ez pedig az a szoftver, amely eldönti az eszköz szerepét.
Periféria / központi eszköz: Egy BLE hálózatban csak egy központi eszköz lehet, de annyi perifériás eszköz lehet, amennyi szükséges. A központi eszköz egyszerre csatlakozhat az összes perifériás eszközhöz, de a perifériás eszköz csak a központi eszközhöz tud csatlakozni, így két perifériás eszköz nem oszthat meg adatokat egymás között. A központi eszközre a legjobb példa az okos telefonjaink, a perifériás eszközre pedig a Bluetooth fülhallgatónk vagy a fitnesz sávunk lesz.
BLE Advertising: A BLE Advertising az a gúnyos kifejezés, amely arra utasítja a Bluetooth-eszközt, hogy mindenki számára látható legyen, hogy párosíthassa és kapcsolatot létesítsen. Ez egyirányú kommunikációnak tekinthető. Itt a szerver folyamatosan hirdeti az adatokat, elvárva, hogy egy szerver megkapja azokat. A BLE Beacon egyfajta BLE.
UUID (univerzális egyedi azonosító): Minden BLE Bluetooth-eszköz egyetemes egyedi azonosító számot kap, amikor a programozó programozza. Gondolhat erre az azonosítóra, mint olyan számsorozatra, amely a BLE eszköz funkcionalitását / szerepét képviseli. Ismét kétféle UUID létezik. Az egyik a Service UUID, a másik pedig a Characteristic UUID.
GATT szolgáltatás: A GATT az Általános tulajdonság profil; ez meghatároz néhány szokásos módot, amelyekkel két BLE eszköznek mindig kommunikálnia kell. Ez az attribútum (ATT) protokoll előre definiált és minden BLE eszközön közös, így így bármely két BLE eszköz azonosítani tudja egymást. Tehát a GATT volt a válasz az előző kérdésünkre.
A technikát, amellyel két BLE eszköznek kell adatokat továbbítania oda-vissza, a szolgáltatások és jellemzők fogalom határozza meg.
BLE szolgáltatás / BLE jellemző: A szolgáltatás UUID megmondja, hogy a BLE eszköz milyen típusú szolgáltatást fog végrehajtani, a Karakterisztikus UUID pedig azt, hogy milyen paramétereket vagy funkciókat fog végrehajtani az adott szolgáltatás. Tehát minden Szolgáltatásnak egy vagy több jellemzője lesz. Oké! Honnan veszi a programozó ezt az UUID-t? Minden UUID-t már a GATT (Generic Attribute Profile) definiált. Látogasson el a weboldalukra, és válassza ki az UUID-t a projektnek megfelelően. Tudom, hogy kicsit a fejünkre pattant; próbáljuk megérteni egy példával.
Tegyük fel, hogy egy audio lejátszó BLE eszköze van. Kezdetben, amikor párosítja a telefonjával, a telefon audio eszközként azonosítja, és az akkumulátor töltöttségi szintjét is megjeleníti az állapotsoron. Tehát, hogy ez megtörténjen, az audiolejátszónak valahogy el kell mondania a telefonnak, hogy hajlandó megosztani az akkumulátor töltöttségi szintjét és az abban lévő töltöttség százalékát. Ez az UUID használatával történik, van egy speciális UUID, amely elmondja, hogy a BLE kocka részleteket fog szolgáltatni az akkumulátor töltöttségi szintjéről, amely ezt az UUID-t, amely megmondja, hogy a szolgáltatás típusát Service UUID- nek hívják , megint olyan sok paraméter lehet, amelyet cserélni kell egy olyan szolgáltatás elvégzésére, mint az akkumulátor értéke egy ilyen paraméteren, mindegyik paraméter saját UUID-vel rendelkezik, és ezeket Karakterisztikus UUID-nek hívják .A jellemző által végrehajtott közös funkció az Olvasás, Írás, Értesítés és Jelzés.
BLE-leíró: A Leíró egy választható attribútum, amely a Jellemzőn belül található. A Leíró általában meghatározza, hogy miként lehet elérni a Karaktert.
BLE Beacon: A Bluetooth Beacon sokkal inkább egy közelségi kapcsoló, amely előre meghatározott műveletet hajt végre, amikor a felhasználó egy tartományba kerül (közvetlen közelség). Állandóan hirdeti identitását, és ezért mindig készen áll a párosításra.
BLE2902: Még mindig szkeptikus vagyok ebben a dologban, de úgy gondolhatja, hogy az ügyféloldali szoftverrész, amely tájékoztatja a szervert az értesítés be- vagy kikapcsolásáról, ez segít az energiatakarékosságban
Remélem, van egy durva ötlete, a jó az, hogy nem kell sokat tudnunk, mivel az összes kézimunka már megtörtént értünk a könyvtárak ellenére.
A hardver előkészítése
A projekt nem igényel hardverbeállítást, de győződjön meg arról, hogy hozzáadta az ESP32 kártya részleteit az Arduino IDE-hez, és megpróbálta a minimális pislogási programot annak ellenőrzésére, hogy minden a várt módon működik-e. Ön szkeptikus, hogyan kell csinálni, kövesse az ESP32 első lépéseit az Arduino oktatóanyaggal, hogy ugyanezt tegye.
A BLE szolgáltatások teszteléséhez az nRF android alkalmazást fogjuk használni mobilunkon, amely közvetlenül letölthető a PlayStore-ból. Az Itunes Store-ban is elérhető az iPhone felhasználók számára. Ha hosszú ideig tervezi a BLE-vel való együttműködést, akkor ez az alkalmazás valóban hasznos lesz hibakeresési célokra.
Az ESP32 programozása az akkumulátorszint-jelzéshez a GATT szolgáltatás használatával
Ekkor feltételezem, hogy van egy jó elképzelése arról, hogy milyen GATT szolgáltatás és hogyan valósul meg a Szolgáltatás és a jellegzetes modellek segítségével. Most merüljünk el a programban, hogy megtudjuk, hogyan hajtják végre az ESP32-ben az Arduino IDE segítségével. Mielőtt folytatnám, ezt a helyet szeretném megköszönni Andreas Spiess-nek a BLE című videójáért, ami nagyon világossá tette a dolgokat az oldalamon.
A programot a szükséges könyvtárak importálásával kezdjük a vázlatunkba. Sok dolgot kell konfigurálni ahhoz, hogy remélhetőleg használhassuk az ESP32 BLE funkcionalitását, annak köszönhető azonban Neil Kolban, aki már elvégezte a kemény munkát értünk és ellátta a könyvtárakat. Ha meg szeretné érteni a könyvtárak működését, olvassa el a dokumentációját a github oldalon.
#include
Ezután meg kell határoznunk a Bluetooth visszahívás funkciót a Bluetooth eszközünkhöz. Előtte megértjük, hogy mi a visszahívási funkció a BLE-ben.
Mi a visszahívási funkció a BLE-ben?
Amikor a BLE szerverként működik, fontos meghatározni a szerver visszahívási funkcióját. A BLE-hez sokféle visszahívás kapcsolódik, de leegyszerűsítve ezeket Ön nyugtázónak tekinti, hogy megbizonyosodjon a művelet végrehajtásáról. A szerver visszahívása arra szolgál, hogy az ügyfél és a kiszolgáló közötti kapcsolat sikeresen létrejöjjön.
A következő kódsorokat használjuk a szerver visszahívásához.
bool _BLEClientConnected = hamis; osztály MyServerCallbacks : nyilvános BLEServerCallbacks { void onConnect (BLEServer * PServer) { _BLEClientConnected = true; }; void onDisconnect (BLEServer * pServer) { _BLEClientConnected = hamis; } };
A void beállítási funkción belül soros kommunikációt kezdeményezünk az 115200-as hibakeresés céljából, majd inicializáljuk a Bluetooth-eszközt az InitBLE funkción keresztül.
void setup () { Soros.kezdés (115200); Serial.println ("Akkumulátorszint-jelző - BLE"); InitBLE (); }
Az initBLE az a hely, ahol minden varázslat megtörténik. Létre kell hoznunk egy Bluetooth szervert, és az itt található Battery Level szolgáltatást kell használnunk. De előtte meg kell határoznunk az UUID szolgáltatást, karakterisztikát és leíró elemet az akkumulátor töltöttségi szintjének leolvasásához. Az összes UUID a Bluetooth GATT szolgáltatás weboldaláról szerezhető be. Esetünkben megpróbáljuk használni az akkumulátor szolgáltatást, és az UUID-t 0X180F-nek definiáljuk, az alábbiak szerint.
Ezután meg kell ismernünk a szolgáltatáshoz kapcsolódó Jellemzőket. Ha tudni szeretné, hogy egyszerűen kattintson az Akkumulátorszolgáltatás elemre, akkor a Szervizjellemzők oldalra kerül, ahol megemlítik, hogy az akkumulátorszint a jellemzők neve, és 0 és 100 közötti értéket vesz fel. Vegye figyelembe azt is, hogy csak kettőt tudunk végrehajtani ezzel a jellemzővel rendelkező műveletek, az egyik az, hogy el kell olvasni, amit kötelezően meg kell tenni, a másik pedig az Értesítés, amely opcionális. Tehát el kell küldenünk az akkumulátor értékét az ügyfélnek (Telefon), amely kötelező, és ha szükséges, értesíthetjük a telefont arról, hogy melyik opcionális.
De várjon, még mindig nem találtuk meg a jellemző akkumulátorszint UUID értékét. Ehhez keresse meg az Akkumulátor jellemzői oldalt, és keresse meg az Akkumulátor szint nevét, amelynek UUID-jét 0X2A19 néven találja meg, ennek a pillanatképe az alábbiakban látható.
Most, hogy minden érték megvan, tegyük be a programot az alábbiak szerint. Az BatterySerivce , BatteryLevelCharacteristic és BatteryLevelDescriptor név a felhasználó által definiált változók, amelyek utalnak a Szolgáltatásra, Jellemzőre és Leíróra , amelyet a programban használunk. A 0X2901 leíró értékét akkor használjuk, amikor az érték mérete 8 bites, további információ található a Leíró leírás oldalon.
#define BatteryService BLEUUID ((uint16_t) 0x180F)
BLECarakterisztikus BatteryLevelCharacteristic (BLEUUID ((uint16_t) 0x2A19), BLECharacteristic :: PROPERTY_READ - BLECharacteristic :: PROPERTY_NOTIFY); BLEDescriptor BatteryLevelDescriptor (BLEUUID (((uint16_t) 0x2901));
Visszatérés az initBLE funkcióhoz. Először el kell indítanunk a BLE szervert, és egy névvel kell azt hirdetnünk. A következő sorokat használjuk a BLE szerverként történő elindításához. A BLe szerveremnek elnevezett „BLE Battery” név, de kiválaszthatja sajátját.
BLEDevice:: init ("BLE akkumulátor"); // A BLE kiszolgáló BLEServer létrehozása * pServer = BLEDevice:: createServer (); pServer-> setCallbacks (új MyServerCallbacks ());
Ezután el kell indítanunk a GATT szolgáltatást, mivel már meghatároztuk az UUID-t, egyszerűen elindíthatjuk a szolgáltatást az alábbi sor segítségével.
// Hozza létre a BLE szolgáltatást BLEService * pBattery = pServer-> createService (BatteryService);
A szolgáltatás elindítása után összekapcsolhatjuk a leírót a jellemzőkkel, és beállíthatjuk az értékeket. A BLE2902 szolgáltatás szintén ide kerül, ahogy az alább látható.
pBattery-> addCharacteristic (& BatteryLevelCharacteristic); BatteryLevelDescriptor.setValue ("Százalék 0 - 100"); BatteryLevelCharacteristic.addDescriptor (& BatteryLevelDescriptor); BatteryLevelCharacteristic.addDescriptor (új BLE2902 ());
Végül minden be van állítva, most már csak arra van szükség, hogy felkérje az ESP32-t a reklámozásra, hogy más eszközök, például a telefonunk felfedezhessék és csatlakozhassanak hozzá, és amikor egy ügyfélhez csatlakozik, kezdeményeznie kell az Akkumulátor-szolgáltatást, amely a a következő sorokat.
pServer-> getAdvertising () -> addServiceUUID (BatteryService); pBattery-> start (); // Reklámozás indítása pServer-> getAdvertising () -> start ();
Ez eddig olyan jó, az utolsó lépés az, hogy elmondja a leírónak, hogy mekkora az akkumulátor értéke százalékban, amelyet el kell küldeni az ügyfélnek (telefon). Ez az érték 0 és 100 között lehet, amint azt korábban olvastuk, hogy a dolgok egyszerűek legyenek, egyszerűen keményen kódoltam az akkumulátor értékét 57-re, majd 5 másodpercenként növekszem, és 0-ról indulok, ha eléri a 100-at. hogy az alább látható. Ne feledje, hogy az elküldött érték a formátum unit___t.
uint8_t szint = 57; void loop () { BatteryLevelCharacteristic.setValue (& level, 1); BatteryLevelCharacteristic.notify (); késés (5000); szint ++; Soros.println (int (szint)); if (int (szint) == 100) szint = 0; }
GATT-szolgáltatásának tesztelése az ESP32 BLE-n
A fent ismertetett teljes kódot az oldal végén adjuk meg. Töltse fel a kódot az ESP32 táblára. A feltöltés után a telefonnak felfedeznie kell egy „BLE akkumulátor” nevű Bluetooth-eszközt, amely párosítható vele.
Ezután telepítse az nRF android alkalmazást, nyissa meg és csatlakozzon a BLE Battery BLE eszközhöz. Bontsa ki az Akkumulátorszolgáltatás szakaszt, és meg kell találnia a következő képernyőt.
Mint látható, az alkalmazás automatikusan azonosította, hogy a BLE akkumulátor-szolgáltatást nyújt, és rendelkezik az akkumulátor töltöttségi jellemzőivel a programban használt UUID miatt. Láthatja azt is, hogy a jelenlegi 67% -os akkumulátor-érték 5 másodpercet vár, és azt is észreveheti, hogy nő.
A BLE használatakor az a jó, hogy most minden olyan alkalmazás, amely a BLE-vel működik, úgy gondolja, hogy az ESP32 egy BLE eszköz, amely értesíti az akkumulátor töltöttségi szintjét. A kipróbáláshoz a BatON nevű alkalmazást használtam, és az alkalmazás az ESP32-t akkumulátoros Bluetooth-eszközként azonosította, és a telefonomon így adta meg a százalékos értesítést
Menő!! Jobb? A teljes munkát az alábbi videóban is bemutattam. Most, hogy megtanulta, hogyan kell használni a BLE akkumulátor szolgáltatásokat az ESP32 használatával, kipróbálhat más GATT szolgáltatásokat is, amelyek nagyon érdekesek, például pulzus, HID, pulzus stb. Jó szórakozást….