- BLE: hen (Bluetooth Low Energy) liittyvät termit
- Laitteiston valmistelu
- ESP32: n ohjelmointi akun varaustason ilmaisua varten GATT-palvelun avulla
- GATT-palvelun testaaminen ESP32 BLE: llä
Langattomat kuulokkeet, kuntokaistat, Bluetooth-kaiuttimet, korvakuulokkeet, matkapuhelimet, kannettavat tietokoneet… ympärillämme on niin paljon Bluetooth-laitteita ja suurin osa näistä laitteista on akkukäyttöisiä. Oletko koskaan miettinyt, kuinka kun yhdistät Bluetooth-laitteen matkapuhelimeesi, kuinka se ymmärtää automaattisesti, että liitetty laite on tietokone tai äänilaite tai matkapuhelin? Joillekin laitteille puhelimemme saattaa jopa näyttää liitetyn laitteen akun prosenttiosuuden ilmoituspalkissa. Kuinka kaikki tämä tapahtuu yksin? Puhelimen ja Bluetooth-laitteen välillä pitäisi olla jokin yhteinen protokolla, oikea!
Pysy utelias, saat vastauksia näihin kysymyksiin, kun yritämme ymmärtää Bluetooth Low Energy (BLE lyhyesti), suositulla ESP32-moduulilla. Toisin kuin ESP32: n klassinen Bluetooth, BLE toimii vain, kun tiedonsiirto on aktivoitu ja pysyy muuten lepotilassa, mikä tekee siitä oikean valinnan akkukäyttöisille sovelluksille. BLE voi myös muodostaa verkkoverkkoja ja toimia majakoina. Normaalisti BLE-moduulit toimivat joko palvelimena tai asiakkaana, tässä käytämme ESP32 BLE: tä palvelimena.
Täällä olemme jakaneet täydellisen ESP32 Bluetoothin kolmeen segmenttiin ymmärtämisen helpottamiseksi.
1. Sarja Bluetooth ESP32: ssä, joka vaihtaa LEDiä matkapuhelimesta
2 . BLE-palvelin lähettää akun varaustiedot matkapuhelimeen GATT-palvelun avulla
3. BLE-asiakas etsii BLE-laitteita ja toimii majakkana.
Olemme jo käsittäneet ensimmäisen artikkelin; Tässä artikkelissa opitaan, miten ESP32 BLE saadaan toimimaan palvelimena ja lähetetään GATT-palvelua lähettämään akkutiedot. Testausta varten lähetämme kovakoodatut arvot ESP32: sta akkuprosenttina matkapuhelimeemme BLE GATT -palvelun kautta, tällä tavalla matkapuhelimemme olettaa, että ESP32 on akkukäyttöinen Bluetooth-laite, joka yrittää lähettää sen prosenttiosuuteen. Ennen kuin menemme yksityiskohtiin, ymmärrämme muutaman Bluetooth Low Energy -tekniikan terminologian.
BLE: hen (Bluetooth Low Energy) liittyvät termit
BLE-palvelin: Kuten aiemmin kerrottiin, BLE voidaan ohjelmoida toimimaan joko palvelimena tai asiakkaana. Palvelimena työskennellessään BLE voi toimittaa vain tietoja, joita se ei voi muodostaa. Esimerkki olisi kuntosali. Palvelin voi lähettää tietoja vain, jos asiakas pyytää niitä.
Yleisimmin ESP32: n BLE: ssä käytetään palvelinta. Jokaisella palvelimella on yksi tai useampi palvelu, ja samalla tavoin kullakin palvelulla on yksi tai useampi siihen liittyvä ominaisuus. Ominaisuudessa voi olla nolla, yksi tai useampi kuin yksi kuvaaja. Jokaisella palvelulla, ominaisuudella tai kuvaajalla on oma ennalta määritelty yksilöllinen tunnus nimeltä UUID.
BLE Client: Asiakas voi skannata yhteyden ja kuunnella muita Bluetooth-laitteita. Esimerkiksi matkapuhelimesi. Huomaa, että useimmat BLE-laitteistot voivat toimia palvelimena ja asiakkaana ohjelmisto, joka päättää laitteen roolista.
Oheislaite / keskuslaite: BLE-verkossa voi olla vain yksi keskuslaite, mutta sillä voi olla niin monta oheislaitetta kuin tarvitaan. Keskuslaite voi muodostaa yhteyden kaikkiin oheislaitteisiin samanaikaisesti, mutta oheislaite voi muodostaa yhteyden vain keskuslaitteeseen, jolloin kaksi oheislaitetta ei voi jakaa tietoja keskenään. Paras esimerkki keskuslaitteista on älypuhelimet ja oheislaitteista Bluetooth-kuulokkeet tai kuntokaistat.
BLE-mainonta: BLE-mainonta on nörtti termi, joka opettaa Bluetooth-laitteen olemaan kaikkien nähtävissä, jotta se voi muodostaa pariliitoksen ja muodostaa yhteyden. Sitä voidaan pitää yksisuuntaisena viestintänä. Täällä palvelin mainostaa jatkuvasti tietoja odottaen palvelimen vastaanottavan ne. BLE Beacon on eräänlainen BLE.
UUID (Universal Unique Identifier): Jokaiselle BLE Bluetooth -laitteelle annetaan Universal Unique Identifier Number, kun ohjelmoija on ohjelmoinut sen. Voit ajatella tätä tunnistetta numerosarjana, joka edustaa BLE-laitteen toiminnallisuutta / roolia. Jälleen on olemassa kahden tyyppisiä UUID-tunnuksia. Yksi on Service UUID ja toinen Characteristic UUID.
GATT-palvelu: GATT on lyhenne sanoista Generic Attribute Profile; tämä määrittelee joitain tavallisia tapoja, joilla kahden BLE-laitteen tulisi aina kommunikoida. Tämä attribuutti (ATT) -protokolla on ennalta määritelty ja se on yhteinen kaikille BLE-laitteille, joten tällä tavoin kaikki kaksi BLE-laitetta voivat tunnistaa toisensa. Joten GATT oli vastaus edelliseen kysymykseemme.
Tekniikka, jolla kahden BLE-laitteen tulisi lähettää dataa edestakaisin, määritellään käsitteellä nimeltä palvelut ja ominaisuudet.
BLE-palvelu / BLE-ominaisuus: Palvelun UUID kertoo meille, minkä tyyppistä palvelua BLE-laite aikoo suorittaa, ja ominaisuus-UUID kertoo, mitkä parametrit tai toiminnot kyseinen palvelu suorittaa. Joten jokaisella palvelulla on yksi tai useampi ominaisuus niiden alla. Okei! Mistä ohjelmoija saa tämän UUID: n? Jokainen UUID on jo määritelty GATT: ssä (Generic Attribute Profile). Voit vierailla heidän verkkosivustollaan ja valita UUID: n projektille tarpeen mukaan. Tiedän, että se on pudonnut hieman pään yli; Yritetään ymmärtää se esimerkillä.
Oletetaan, että audiosoittimen BLE-laite on. Aluksi, kun pariliität sen puhelimeesi, puhelin tunnistaa sen äänilaitteeksi ja näyttää myös akun varauksen tilarivillä. Joten, jotta tämä tapahtuisi, soittimen on jotenkin sanottava puhelimellesi, että se on halukas jakamaan akun varaustason ja sen akun latausprosentin. Tämä tapahtuu käyttämällä UUID: ää, on olemassa erityinen UUID, joka kertoo, että BLE-noppaa antaa tietoja akun varaustasosta, jota tämä UUID, joka kertoo palvelun tyypille, kutsutaan Service UUID: ksi, parametreja saattaa jälleen olla vaihdetaan palvelun suorittamiseksi, kuten akun arvo on sellaisessa parametrissa, jokaisella parametrilla on oma UUID-tunnuksensa, jota kutsutaan ominaisuus-UUID: ksi.Ominaisuuden yleinen toiminto on Lue, kirjoita, ilmoita ja osoita.
BLE-kuvaaja: Kuvaaja on valinnainen attribuutti, joka esiintyy ominaisuuden sisällä. Kuvaaja määrittää normaalisti, kuinka ominaisuuteen pääsee.
BLE-majakka: Bluetooth-majakka on enemmän kuin lähestymiskytkin, joka suorittaa jonkin ennalta määritellyn toiminnon, kun käyttäjä pääsee alueelle (lähellä). Se mainostaa identiteettinsä koko ajan ja on siten valmis muodostamaan parin aina.
BLE2902: Olen edelleen epäilevä tästä asiasta, mutta voit ajatella sitä asiakassivun ohjelmistona, joka ilmoittaa palvelimelle ilmoituksen kytkemisen päälle tai pois päältä. Tämä auttaa meitä säästämään virtaa
Toivottavasti sinulla on karkea idea, hyvä on, että meidän ei tarvitse tietää paljon, koska kaikki käsityöt on jo tehty meille kirjastojen kautta.
Laitteiston valmistelu
Projekti ei vaadi laitteistoasetuksia, mutta varmista, että olet lisännyt ESP32-kortin tiedot Arduino IDE -laitteeseesi ja kokeillut vähimmäisnäytön vilkkumisohjelmaa tarkistaaksesi, toimiiko kaikki odotetusti. Skeptinen siitä, miten se tehdään, voit seurata ESP32: n käytön aloittamista Arduino-opetusohjelmalla.
Myös BLE-palveluiden testaamiseksi käytämme matkapuhelimellamme olevaa nRF android -sovellusta, joka voidaan ladata suoraan PlayStore-kaupasta. Se on saatavana myös iTunes-kaupassa iPhone-käyttäjille. Jos aiot työskennellä BLE: n kanssa pitkään, tämä sovellus on todella kätevä virheenkorjaustarkoituksiin.
ESP32: n ohjelmointi akun varaustason ilmaisua varten GATT-palvelun avulla
Oletan tähän mennessä, että sinulla on oikea käsitys siitä, mikä GATT-palvelu ja miten se toteutetaan palvelun ja ominaismallien avulla. Sukelletaan nyt ohjelmaan ja opitaan, miten se toteutetaan ESP32: ssa Arduino IDE: n avulla. Ennen kuin jatkamme, haluaisin käyttää tätä tilaa kiittääksesi Andreas Spiessiä hänen videostaan BLE, joka teki asioista paljon selvää puolellani.
Aloitamme ohjelman tuomalla tarvittavat kirjastot luonnokseemme. ESP32: n BLE-toiminnon käyttämiseksi toivottavasti on paljon asioita konfiguroitava Neil Kolbanin ansiosta, joka on jo tehnyt kovan työn puolestamme ja toimittanut kirjastot. Jos haluat ymmärtää kirjastojen toimivuutta, voit tutustua hänen dokumentaatioonsa github-sivulla.
#sisältää
Seuraavaksi meidän on määritettävä palvelimen takaisinsoittotoiminto Bluetooth-laitteellemme. Ennen sitä ymmärretään, mikä on takaisinkutsutoiminto BLE: ssä.
Mikä on takaisinkutsufunktio BLE: ssä?
Kun BLE toimii palvelimena, on tärkeää määritellä palvelimen takaisinsoittotoiminto. BLE: hen liittyy monenlaisia soittopyyntöjä, mutta yksinkertaistettuna pidät näitä kuittauksena suoritettavaksi varmistaaksesi, että toiminto on suoritettu loppuun. Palvelimen takaisinsoittoa käytetään varmistamaan, että yhteys asiakkaan ja palvelimen välille onnistuu.
Käytämme seuraavia koodirivejä palvelimen soittamiseksi takaisin.
bool _BLEClientConnected = epätosi; class MyServerCallbacks : public BLEServerCallbacks { void onConnect (BLEServer * pServer) { _BLEClientConnected = true; }; void onDisconnect (BLEServer * pServer) { _BLEClientConnected = epätosi; } };
Sisällä void setup toiminto, me aloittaa Serial viestinnän 115200 virheenkorjausta ja sitten alustaa Bluetooth Device kautta InitBLE toiminto.
void setup () { Sarja.alku (115200); Serial.println ("Akun varauksen ilmaisin - BLE"); InitBLE (); }
InitBLE on paikka, jossa kaikki taika tapahtuu. Meidän on luotava Bluetooth-palvelin ja käytettävä Battery Level -palvelua täällä. Mutta ennen sitä meidän on määritettävä UUID palvelulle, ominaisuudelle ja kuvaajalle akun varaustason lukemista varten. Koko UUID voidaan hankkia Bluetooth GATT -palvelun verkkosivustolta. Meidän tapauksessamme yritämme käyttää akkupalvelua ja UUID on määritelty 0X180F: ksi alla esitetyllä tavalla.
Seuraavaksi meidän on tiedettävä tähän palveluun liittyvät ominaisuudet. Jos haluat tietää, että napsautat vain akkuhuoltoa, pääset Palvelun ominaisuudet -sivulle, jossa mainitaan, että akun varaustaso on ominaisuuksien nimi ja se vie arvon 0-100. toiminnot, joilla on tämä ominaisuus, yksi on lukea, mikä on pakollinen, ja toinen on Ilmoita, joka on valinnainen. Joten meidän on lähetettävä akun arvo asiakkaalle (puhelin), joka on pakollinen, ja tarvittaessa voimme ilmoittaa puhelimelle, mikä on valinnainen.
Mutta odota, emme vieläkään löytäneet UUID-arvoa tyypilliselle akkutasolle. Tätä varten pääset Akun ominaisuus -sivulle ja etsit akkutason nimeä, löydät sen UUID-tunnuksen nimellä 0X2A19, saman tilannekuva näkyy alla.
Nyt kun meillä on kaikki arvot, laitetaan se ohjelma alla olevan kuvan mukaisesti. Nimi BatterySerivce , BatteryLevelCharacteristic ja BatteryLevelDescriptor ovat käyttäjän määrittämiä muuttujia viitata yksikön ominaisuus ja kuvaaja, jolla käytämme ohjelmassa. Kuvaajan 0X2901 arvoa käytetään, kun arvon koko on 8-bittinen, lisätietoja löytyy Kuvaajan kuvaus -sivulta.
#define BatteryService BLEUUID ((uint16_t) 0x180F)
BLECharacteristic BatteryLevelCharacteristic (BLEUUID ((uint16_t) 0x2A19), BLECharacteristic :: PROPERTY_READ - BLECharacteristic :: PROPERTY_NOTIFY); BLEDescriptor BatteryLevelDescriptor (BLEUUID ((uint16_t) 0x2901));
Paluu initBLE- toimintoon. Meidän on ensin käynnistettävä BLE-palvelin ja saatettava se mainostamaan nimellä. Seuraavat rivit käytetään aloittamaan BLE palvelimena. BLe-palvelimelleni antamasi nimi on “BLE Battery”, mutta voit valita oman.
BLEDevice:: init ("BLE-akku"); // Luo BLE-palvelin BLEServer * pServer = BLEDevice:: createServer (); pServer-> setCallbacks (uudet MyServerCallbacks ());
Seuraavaksi meidän on aloitettava GATT-palvelu, koska olemme jo määrittäneet UUID: n, voimme yksinkertaisesti aloittaa palvelun alla olevan rivin avulla.
// Luo BLE-palvelu BLEService * pBattery = pServer-> createService (BatteryService);
Kun palvelu on käynnistetty, voimme linkittää kuvaimen ominaisuuksiin ja asettaa arvot. Myös BLE2902-palvelu lisätään tähän alla olevan kuvan mukaisesti.
pBattery-> addCharacteristic (& BatteryLevelCharacteristic); BatteryLevelDescriptor.setValue ("Prosenttiosuus 0-100"); BatteryLevelCharacteristic.addDescriptor (& BatteryLevelDescriptor); BatteryLevelCharacteristic.addDescriptor (uusi BLE2902 ());
Lopuksi kaikki on asetettu, nyt on jäljellä vain pyytää ESP32: ta mainostamaan, jotta muut puhelimemme kaltaiset laitteet voivat löytää sen ja muodostaa yhteyden siihen, ja kun se on kytketty asiakkaaseen, sen tulisi käynnistää Akkupalvelu, joka voidaan tehdä vaikka seuraavia rivejä.
pServer-> getAdvertising () -> addServiceUUID (BatteryService); pBattery-> start (); // Aloita mainostaminen pServer-> getAdvertising () -> start ();
Se on niin toistaiseksi niin hyvä, viimeinen vaihe on kertoa kuvaajalle, mikä on akun arvo prosentteina, joka tulisi lähettää asiakkaalle (puhelin). Tämä arvo voi olla välillä 0 - 100, kuten aiemmin luimme, pitääkseen asiat yksinkertaisina, olen yksinkertaisesti kova koodannut akun arvon 57: ksi ja kasvattanut sitä sitten 5 sekunnin välein ja aloitan 0: sta, kun se saavuttaa 100: n. joka on esitetty alla. Huomaa, että lähetettävä arvo on muodossa unit8_t.
uint8_t-taso = 57; void loop () { BatteryLevelCharacteristic.setValue (& taso, 1); BatteryLevelCharacteristic.notify (); viive (5000); taso ++; Sarja.println (int (taso)); jos (int (taso) == 100) taso = 0; }
GATT-palvelun testaaminen ESP32 BLE: llä
Koko koodi edellä selvitettiin annetaan lopussa sivun. Lataa koodi ESP32-kortillesi. Kun olet ladannut puhelimesi, sen pitäisi löytää Bluetooth-laite nimeltä BLE Battery ja pariliitä sen kanssa.
Asenna sitten nRF android -sovellus, avaa se ja muodosta yhteys BLE Battery BLE -laitteeseen. Laajenna Akkuhuolto-osio ja löydät seuraavan näytön.
Kuten näette, sovellus on automaattisesti tunnistanut, että BLE tarjoaa akkuhuoltoa ja sillä on akun varaustason ominaisuudet ohjelmassa käytetyn UUID: n vuoksi. Voit myös nähdä, että nykyinen akun arvo, joka on 67%, odottaa 5 sekuntia ja voit myös huomata sen kasvavan.
Hienoa BLE: n käytössä on, että nyt kaikki BLE: n kanssa toimivat sovellukset ajattelevat, että ESP32 on BLE-laite, joka ilmoittaa akun varaustasosta. Kokeilemiseen käytin sovellusta nimeltä BatON ja sovellus tunnisti ESP32: n akkukäyttöisenä Bluetooth-laitteena ja ilmoitin prosenttiosuuden puhelimellani näin
Viileä!! Eikö? Olen myös osoittanut täydellisen työskentelyn alla olevassa videossa. Nyt, kun olet oppinut käyttämään BLE-akkupalveluja ESP32: n kanssa, voit kokeilla myös muita GATT-palveluita, jotka ovat erittäin mielenkiintoisia, kuten syke, HID, syke jne. Pidä hauskaa….