- Terminoloģijas, kas saistītas ar BLE (Bluetooth Low Energy)
- Aparatūras sagatavošana
- ESP32 programmēšana akumulatora līmeņa indikācijai, izmantojot GATT pakalpojumu
- Jūsu GATT pakalpojuma pārbaude vietnē ESP32 BLE
Bezvadu austiņas, fitnesa joslas, Bluetooth skaļruņi, austiņās ievietojamas austiņas, mobilie tālruņi, klēpjdatori… mums apkārt ir tik daudz Bluetooth ierīču, un lielākā daļa no šīm ierīcēm darbojas ar akumulatoru. Vai esat kādreiz domājis, ka, savienojot Bluetooth ierīci ar mobilo tālruni, kā tas automātiski saprot, ka pievienotā ierīce ir dators vai audio ierīce vai mobilais tālrunis? Dažām ierīcēm mūsu tālrunis paziņojumu joslā pat automātiski parāda pievienotās ierīces akumulatora daudzumu. Kā tas viss notiek pašiem? Starp tālruni un Bluetooth ierīci vajadzētu būt kopīgotam protokolam!
Esiet ziņkārīgs, un jūs saņemsit atbildes uz šiem jautājumiem, kad mēs ar populāro ESP32 moduli cenšamies saprast Bluetooth zemu enerģijas patēriņu (īsi - BLE). Atšķirībā no ESP32 klasiskā Bluetooth, BLE darbojas tikai tad, ja ir aktivizēta komunikācija un citādi paliek miega režīmā, tas padara to par pareizu izvēli lietošanai ar akumulatoru. BLE var arī veidot acu tīklus un darboties kā bākas. Parasti BLE moduļi darbojas vai nu kā serveris, vai kā klients, šeit mēs izmantosim ESP32 BLE kā serveri.
Šeit mēs esam sadalījuši visu ESP32 Bluetooth trīs segmentos, lai būtu vieglāk saprast.
1. Sērijas Bluetooth uz ESP32 ieslēdzot LED no mobilā tālruņa
2 . BLE serveris nosūta akumulatora līmeņa datus uz mobilo tālruni, izmantojot GATT pakalpojumu
3. BLE klients, lai meklētu BLE ierīces un darbotos kā bāka.
Mēs jau esam apskatījuši pirmo rakstu; Šajā rakstā mēs uzzināsim, kā panākt, lai ESP32 BLE darbotos kā serveris, un izmantojiet GATT pakalpojumu, lai nosūtītu informāciju par akumulatora līmeni. Pārbaudes nolūkos mēs nosūtīsim cietās kodēšanas vērtības no ESP32 kā akumulatora procentuālo daudzumu uz mūsu mobilo tālruni, izmantojot BLE GATT pakalpojumu, tādā veidā mūsu mobilais pieņems, ka ESP32 ir ar akumulatoru darbināta Bluetooth ierīce, kas mēģina nosūtīt uz savu akumulatora procentuālo daudzumu. Pirms detalizētākas izpētes mēs izprotam dažas terminoloģijas, kas saistītas ar Bluetooth zemu enerģijas patēriņu.
Terminoloģijas, kas saistītas ar BLE (Bluetooth Low Energy)
BLE serveris: Kā jau teicām iepriekš, BLE var ieprogrammēt darboties gan kā serveris, gan kā klients. Strādājot kā serveris, BLE var sniegt tikai datus, ar kuriem nevar izveidot savienojumu. Piemērs būtu fitnesa grupa. Serveris varēja nosūtīt informāciju tikai tad, ja klients to pieprasīja.
Visbiežāk ESP32 BLE tiek izmantots serveris. Katram serverim būs viens vai vairāki Pakalpojumi, un līdzīgi katram pakalpojumam būs viens vai vairāki ar to saistīti raksturlielumi. Raksturā var būt nulle, viens vai vairāki aprakstītāji. Katram pakalpojumam, raksturlielumam vai deskriptoram būs savs iepriekš noteikts unikāls ID ar nosaukumu UUID.
BLE klients: klients var skenēt savienojumu un klausīties citas Bluetooth ierīces. Piemērs varētu būt jūsu mobilais tālrunis. Ņemiet vērā, ka lielākā daļa BLE aparatūras ierīču var darboties kā serveris un kā klients, tā ir programmatūra, kas izlemj par ierīces lomu.
Perifērijas ierīce / centrālā ierīce: BLE tīklā varētu būt tikai viena centrālā ierīce, taču tai var būt tik daudz perifēro ierīču, cik nepieciešams. Centrālā ierīce var vienlaikus izveidot savienojumu ar visām perifērijas ierīcēm, bet perifērijas ierīce var izveidot savienojumu tikai ar centrālo ierīci, tādējādi divas perifērijas ierīces nevar koplietot datus savā starpā. Labākais piemērs centrālajai ierīcei būs mūsu viedtālruņi, bet perifērijas ierīcei - mūsu Bluetooth austiņas vai fitnesa joslas.
BLE Advertising: BLE Advertising ir nepārspējams termins, kas norāda, ka Bluetooth ierīce ir redzama visiem, lai tā varētu savienot pārī un izveidot savienojumu. To var uzskatīt par vienvirziena saziņu. Šeit serveris turpina reklamēt datus, gaidot, ka serveris tos saņems. BLE Beacon ir BLE veids.
UUID (universālais unikālais identifikators): katrai BLE Bluetooth ierīcei tiek piešķirts universāls unikālais identifikatora numurs, kad to ieprogrammējis programmētājs. Jūs varat domāt par šo identifikatoru kā skaitļu secību, kas attēlo BLE ierīces funkcionalitāti / lomu. Atkal ir divu veidu UUID. Viens ir pakalpojuma UUID, bet otrs - raksturīgais UUID.
GATT pakalpojums: GATT apzīmē vispārīgo atribūtu profilu; tas nosaka dažus standarta veidus, kā divām BLE ierīcēm vienmēr vajadzētu sazināties. Šis atribūtu (ATT) protokols ir iepriekš definēts un ir kopīgs visām BLE ierīcēm, tāpēc šādā veidā jebkuras divas BLE ierīces var identificēt viena otru. Tātad GATT bija atbilde uz mūsu iepriekšējo jautājumu.
Paņēmienu, kādā divām BLE ierīcēm jāsūta dati turp un atpakaļ, nosaka jēdziens, ko sauc par pakalpojumiem un īpašībām.
BLE pakalpojums / BLE raksturojums: Pakalpojuma UUID mums norāda, kāda veida pakalpojumu BLE ierīce veiks, un Raksturīgais UUID norāda, kādi ir parametri vai funkcijas, kuras veiks šis pakalpojums. Tātad katram Pakalpojumam būs viena vai vairākas pazīmes. Labi! No kurienes programmētājs iegūst šo UUID? Katru UUID jau ir definējis GATT (Generic Attribute Profile). Jūs varat apmeklēt viņu vietni un atlasīt UUID, kā nepieciešams projektam. Es zinu, ka tas ir mazliet atlecis virs mūsu galvas; mēģināsim to saprast ar piemēru.
Pieņemsim, ka audio atskaņotāja ierīce BLE. Sākotnēji, savienojot to pārī ar tālruni, tālrunis to identificē kā audio ierīci un statusa joslā parāda arī akumulatora uzlādes līmeni. Tātad, lai tas notiktu, audio atskaņotājam ir kaut kā jāpasaka tālrunim, ka tas ir gatavs dalīties ar akumulatora uzlādes līmeni un tā uzlādes procentu. Tas tiek darīts, izmantojot UUID, ir īpašs UUID, kas stāsta, ka BLE kauliņos tiks sniegta informācija par akumulatora uzlādes līmeni, kuru šis UUID, kurš stāsta, ka pakalpojuma veidu sauc par Service UUID, atkal varētu būt tik daudz parametru, kas piemēram, akumulatora vērtība ir šādam parametram, katram parametram būs savs UUID, un tos sauc par raksturīgo UUID.Kopējā funkcija, ko veic raksturlielums, ir lasīšana, rakstīšana, paziņošana un norādīšana.
BLE deskriptors: deskriptors ir izvēles atribūts, kas atrodas raksturojuma iekšpusē. Aprakstā parasti tiek norādīts, kā piekļūt raksturlielumam.
BLE bākugunis: Bluetooth bāks ir vairāk kā tuvuma slēdzis, kas veic iepriekš noteiktu darbību, kad lietotājs nokļūst diapazonā (tuvumā). Tas visu laiku reklamē savu identitāti un tādējādi ir gatavs vienmēr savienoties pārī.
BLE2902: Es joprojām esmu skeptisks par šo lietu, taču jūs to varat uzskatīt par programmatūras daļu klienta pusē, kas informē serveri ieslēgt vai izslēgt paziņojumu. Tas mums palīdzēs ietaupīt enerģiju
Ceru, ka jums ir aptuvena ideja, laba ir tā, ka mums nav daudz jāzina, jo viss roku darbs jau ir paveikts mūsu labā, kaut arī bibliotēkās.
Aparatūras sagatavošana
Projektam nav nepieciešama aparatūras iestatīšana, taču pārliecinieties, vai esat pievienojis ESP32 plāksnes informāciju savam Arduino IDE un esat izmēģinājis minimālo mirgošanas parauga paraugu, lai pārbaudītu, vai viss darbojas, kā paredzēts. Jūs esat skeptiski noskaņots, kā to izdarīt, lai to izdarītu, varat sekot Darba sākšana ar ESP32 ar Arduino apmācību.
Lai pārbaudītu BLE pakalpojumus, mēs savā mobilajā ierīcē izmantosim nRF android lietojumprogrammu, kuru var tieši lejupielādēt no PlayStore. Tas ir pieejams arī iTunes veikalā Iphone lietotājiem. Ja plānojat strādāt ar BLE ilgu laiku, šī lietojumprogramma patiešām noderēs atkļūdošanas nolūkos.
ESP32 programmēšana akumulatora līmeņa indikācijai, izmantojot GATT pakalpojumu
Pašlaik es pieņemu, ka jums ir taisnīga ideja par to, kāds GATT pakalpojums un kā tas tiek ieviests, izmantojot pakalpojumu un raksturīgos modeļus. Tagad ienirsim programmā, lai uzzinātu, kā tā tiek ieviesta ESP32, izmantojot Arduino IDE. Pirms mēs turpinām, es vēlos izmantot šo vietu, lai pateiktos Andreasam Spiessam par viņa video BLE, kas manā pusē padarīja lietas ļoti skaidras.
Mēs sākam programmu, importējot nepieciešamās bibliotēkas mūsu skicē. Lai cerams izmantot ESP32 BLE funkcionalitāti, ir jākonfigurē daudzas lietas, lai gan paldies Nilam Kolbanam, kurš jau ir paveicis smago darbu mūsu labā un nodrošinājis bibliotēkas. Ja vēlaties izprast bibliotēku funkcionalitāti, varat atsaukties uz viņa dokumentāciju github lapā.
# iekļaut
Tālāk mums ir jādefinē servera atzvanīšanas funkcija mūsu Bluetooth ierīcei. Pirms tam ļauj saprast, ka BLE ir atzvanīšanas funkcija.
Kas ir atzvanīšanas funkcija BLE?
Kad BLE darbojas kā serveris, ir svarīgi definēt servera atzvanīšanas funkciju. Ar BLE ir saistīti daudzi atzvanīšanas veidi, taču, vienkārši sakot, jūs tos uzskatāt par apstiprinājumu, kas tiek veikts, lai pārliecinātos, ka darbība ir pabeigta. Servera atzvanīšana tiek izmantota, lai nodrošinātu veiksmīgu savienojuma izveidi starp klientu un serveri.
Lai veiktu servera atzvanīšanu, mēs izmantojam šādas koda rindas.
bool _BLEClientConnected = nepatiesa; klase MyServerCallbacks : public BLEServerCallbacks { void onConnect (BLEServer * pServer) { _BLEClientConnected = true; }; void onDisconnect (BLEServer * pServer) { _BLEClientConnected = nepatiesa; } };
Tukšās iestatīšanas funkcijas iekšpusē mēs sākam sērijveida sakarus ar atkļūdošanu ar numuru 115200 un pēc tam inicializējam Bluetooth ierīci, izmantojot funkciju InitBLE .
void setup () { Serial.begin (115200); Serial.println ("Baterijas līmeņa indikators - BLE"); InitBLE (); }
InitBLE ir vieta, kur visi burvju notiek. Mums ir jāizveido Bluetooth serveris un jāizmanto šeit esošais akumulatora līmeņa pakalpojums. Bet pirms tam mums ir jādefinē UUID pakalpojumam, raksturojums un deskriptors akumulatora līmeņa nolasīšanai. Visu UUID var iegūt pakalpojuma Bluetooth GATT vietnē. Mūsu gadījumā mēs cenšamies izmantot akumulatora pakalpojumu, un UUID tas ir definēts kā 0X180F, kā parādīts zemāk.
Tālāk mums jāzina raksturojums, kas saistīts ar šo pakalpojumu. Lai uzzinātu, ka vienkārši noklikšķiniet uz Akumulatora serviss, jūs tiksiet novirzīts uz Pakalpojuma raksturojumu lapu, kur tiek minēts, ka akumulatora līmenis ir raksturlielumu nosaukums un tā vērtība ir no 0 līdz 100. Ņemiet vērā arī to, ka mēs varam veikt tikai divus darbības ar šo īpašību, viena ir Lasīt, kas ir obligāti jāveic, un otra ir Paziņot, kas nav obligāta. Tāpēc mums ir jānosūta klientam (tālrunis) akumulatora vērtība, kas ir obligāta, un, ja nepieciešams, mēs varam informēt tālruni par to, kas nav obligāts.
Bet pagaidiet, mēs joprojām neatradām raksturīgā akumulatora līmeņa UUID vērtību. Lai to izdarītu, nokļūstiet akumulatora raksturojuma lapā un meklējat akumulatora līmeņa nosaukumu, tā UUID atradīsit kā 0X2A19, tā paša momentuzņēmums ir parādīts zemāk.
Tagad, kad mums ir visas vērtības, ieliksim to programmā, kā parādīts zemāk. Nosaukums BatterySerivce , BatteryLevelCharacteristic un BatteryLevelDescriptor ir lietotāja definēti mainīgie, lai atsauktos uz Pakalpojumu, Raksturlielumu un Aprakstītāju, ko mēs izmantojam programmā. Apraksta 0X2901 vērtība tiek izmantota, ja vērtības lielums ir 8 biti. Plašāku informāciju varat atrast deskriptora apraksta lapā.
#define BatteryService BLEUUID ((uint16_t) 0x180F)
BLECharacteristic BatteryLevelCharacteristic (BLEUUID ((uint16_t) 0x2A19), BLECharacteristic :: PROPERTY_READ - BLECharacteristic :: PROPERTY_NOTIFY); BLEDescriptor BatteryLevelDescriptor (BLEUUID (((uint16_t) 0x2901));
Atgriešanās pie funkcijas initBLE . Vispirms mums jāuzsāk BLE serveris un jāliek tam reklamēties ar nosaukumu. Lai sāktu BLE kā serveri, tiek izmantotas šādas rindas. Vārds, ko esmu devis savam BLe serverim, ir “BLE Battery”, taču jūs varat izvēlēties savu.
BLEDevice:: init ("BLE akumulators"); // Izveidojiet BLE servera BLEServer * pServer = BLEDevice:: createServer (); pServer-> setCallbacks (jaunie MyServerCallbacks ());
Pēc tam mums ir jāsāk GATT pakalpojums, jo mēs jau esam definējuši UUID, mēs varam vienkārši sākt pakalpojumu, izmantojot zemāk esošo līniju.
// Izveidojiet BLE pakalpojumu BLEService * pBattery = pServer-> createService (BatteryService);
Pēc pakalpojuma palaišanas mēs varam saistīt deskriptoru ar raksturlielumiem un iestatīt vērtības. Šeit tiek pievienots arī pakalpojums BLE2902, kā parādīts zemāk.
pBattery-> addCharacteristic (& BatteryLevelCharacteristic); BatteryLevelDescriptor.setValue ("Procenti 0 - 100"); BatteryLevelCharacteristic.addDescriptor (& BatteryLevelDescriptor); BatteryLevelCharacteristic.addDescriptor (jauns BLE2902 ());
Visbeidzot, viss ir iestatīts, tagad atliek palūgt ESP32 reklamēties, lai citas ierīces, piemēram, mūsu tālrunis, varētu to atklāt un izveidot savienojumu ar to, un, kad ir izveidots savienojums ar klientu, tai jāuzsāk akumulatora pakalpojums, ko var veikt, šādas rindas.
pServer-> getAdvertising () -> addServiceUUID (BatteryService); pBattery-> start (); // Sākt reklamēt pServer-> getAdvertising () -> start ();
Tas ir līdz šim tik labi, pēdējais solis ir aprakstītājam pateikt, kāda ir akumulatora vērtība procentos, kas jānosūta klientam (tālrunis). Šī vērtība var būt no 0 līdz 100, kā mēs lasījām iepriekš, lai viss būtu vienkārši, man ir vienkārši grūti kodēts akumulatora lielums 57 un pēc tam ik pēc 5 sekundēm jāpalielina un jāsāk no 0, kad tas sasniedz 100. tas ir parādīts zemāk. Ņemiet vērā, ka nosūtītā vērtība ir formātā unit___t.
uint8_t līmenis = 57; void loop () { BatteryLevelCharacteristic.setValue (& līmenis, 1); BatteryLevelCharacteristic.notify (); kavēšanās (5000); līmenis ++; Seriālais.println (int (līmenis)); ja (int (līmenis) == 100) līmenis = 0; }
Jūsu GATT pakalpojuma pārbaude vietnē ESP32 BLE
Pilns iepriekš izskaidrotais kods ir norādīts lapas beigās. Augšupielādējiet kodu savā ESP32 dēlī. Kad esat augšupielādējis, tālrunim jāatrod Bluetooth ierīce ar nosaukumu “BLE Battery” un savienojiet to pārī.
Pēc tam instalējiet nRF android lietojumprogrammu, atveriet to un izveidojiet savienojumu ar BLE Battery BLE ierīci. Izvērsiet sadaļu Akumulatoru apkalpošana, un jums vajadzētu atrast šādu ekrānu.
Kā redzat, lietojumprogramma ir automātiski identificējusi, ka BLE nodrošina akumulatora apkalpošanu un tai ir akumulatora līmeņa īpašības UUID dēļ, kuru mēs izmantojām programmā. Varat arī redzēt, ka pašreizējā akumulatora vērtība, kas ir 67%, gaida 5 sekundes, un jūs varat arī pamanīt, ka tā palielinās.
Foršākā lieta par BLE lietošanu ir tā, ka tagad jebkura lietojumprogramma, kas darbojas ar BLE, domās, ka jūsu ESP32 ir BLE ierīce, kas paziņo par akumulatora uzlādes līmeni. Lai to izmēģinātu, es izmantoju lietojumprogrammu ar nosaukumu BatON, un lietojumprogramma identificēja ESP32 kā ar akumulatoru darbināmu Bluetooth ierīci un sniedza procentuālo paziņojumu manā tālrunī šādi
Forši !! Pa labi? Es arī parādīju pilnīgu darbu zemāk esošajā video. Tagad, kad esat iemācījies izmantot BLE akumulatoru pakalpojumus ar ESP32, varat izmēģināt arī citus GATT pakalpojumus, kas ir ļoti interesanti, piemēram, pulss, HID, sirdsdarbība utt. Izklaidējieties….