11. diel - Bluetooth Low Energy na module ESP-32 - praktický príklad
V predchádzajúcej lekcii, Bluetooth Low Energy na module ESP-32 - Úvod , sme sa zoznámili s teoretickým základom služby Bluetooth Low Energy.
V tomto tutoriále Internetu vecí s ESP-32 zužitkujeme vedomosti o technológii Bluetooth Low Energy, skrátene BLE. Spoločne si ukážeme, ako pomocou tejto služby ovládať prvky pripojené k mikrokontroléru. Pripravíme si zapojenie, ktoré budeme ovládať mobilným telefónom.
Ovládanie LED diód pomocou BLE
Našou úlohou bude vytvoriť zapojenie, kedy na ESP-32 pripojíme dve diódy, červenú a zelenú. Program ESP-32 potom pomocou BLE nadviaže spojenie s aplikáciou v mobilnom telefóne. Posielaním príkazov z mobilu potom rozsvietime červenú alebo zelenú diódu.
Potrebné súčiastky a schéma zapojenia
Keďže budeme pomocou BLE ovládať LED diódy, poďme si zostaviť jednoduchý obvod. Budeme potrebovať:
- 2x LED dióda (červená, zelená),
- ESP-32,
- 2x rezistor 220Ω,
- nepájivé pole,
- prepojovacie vodiče.

Program pre ESP-32
Poďme si teraz postupne zostaviť a popísať jednotlivé časti programu. Začneme opäť hlavičkou.
Hlavička programu
Všetky použité knižnice sú obsiahnuté v základnej konfigurácii prostredia a nie je nutné ich preto inštalovať:
Kód si popíšeme. Knižnica
BLEDevice.h nám poskytuje základné triedy a funkcie pre prácu s
BLE zariadením. Knižnica BLEUtils.h potom obsahuje funkcie pre
prácu s dátami posielané cez BLE a knižnica BLEServer.h nám
umožní vytvorenie BLE servera pre obsluhu pripojených zariadení. Konštanty
ledPin a ledPin2 obsahujú číslo pinu, ku ktorým
máme pripojené LED diódy. Makrá SERVICE_UUID a
CHARACTERISTIC_UUID obsahujú jedinečné
identifikátory pre služby a charakteristiku čítania údajov z
klienta. Vytvorené premenné *pServer a *pChar budú
neskôr slúžiť na inicializáciu servera a charakteristiky. Taktiež
vytvoríme premennú pre informácie, či je nejaké zariadenie pripojené a
taktiež pre uchovanie informácie o poslednom pripojenom zariadení v prípade
zmeny zariadenia.
V tomto programe budeme vyžadovať aj základné znalosti OOP a to hlavne vytváranie tried a inštancií tried. Tejto problematike sa venuje lekcia OOP v C++, v tejto lekcii nebude o princípoch OOP reč.
Trieda MojeCallbacky
Poďme si teraz teda vytvoriť triedu, ktorá bude obsahovať callback funkcie. Tie budú overovať, či je akékoľvek zariadenie pripojené alebo odpojené:
Táto trieda vychádza z
triedy BLEServerCallbacks obsiahnutej v knižnici
BLEServer.h. V triede MojeCallbacky vytvoríme metódy
pre zmenu booleovskej hodnoty v premennej zarizeniPripojeno hneď
pri pripojení resp. odpojenie zariadenia. Tieto metódy bude volať ESP-32
automaticky práve pri pripojení alebo odpojení
zariadenia.
Funkcia setup()
Teraz poďme postupne vytvoriť telo funkcie setup():
Najprv nastavíme počet
baudov sériového monitora opäť na hodnotu 115200. Tiež
nastavíme ako výstupné tie piny, na ktoré sme pripojili LED diódy.
Inštancia BLEDevice bola vytvorená v knižnici
BLEDevice.h, preto k nej môžeme pristupovať staticky cez
štvorbodku. Funkciou init() nastavujeme názov servera, ku
ktorému sa budeme pripájať. Do premennej pServer vložíme
inštanciu servera a funkciou setCallbacks() vytvoríme serveru
callback funkcie. Ako parameter tejto funkcie bude novo vytvorený
objekt našej triedy MojeCallbacky. Tým zaistíme, že
pri pripojení a odpojení zariadenia použije mikrokontrolér metódy v tele
tejto triedy. Ďalej vytvoríme potrebné vlastnosti BLE komunikácie a to je
BLE služba a BLE charakteristika:
Teraz použijeme skôr
vytvorenú premennú server, ktorá (keďže je inštanciou triedy)
obsahuje okrem iného metódu createService(). Do nej pošleme ako
parameter vygenerovaný SERVICE_UUID. Do premennej
pChar vytvoríme charakteristiku BLE služby pomocou metódy
createCharacteristic(). Metóde poskytneme vygenerované
CHARACTERISTIC_UUID a vlastnosti, ktoré chceme, aby služba
obsahovala. V našom prípade využijeme vlastností PROPERTY_READ
a PROPERTY_WRITE. Po nastavení charakteristiky službu spustíme
pomocou funkcie start(). Teraz už stačí iba nastaviť
viditeľnosť zariadenia pre ostatné zariadenia v dosahu. Do
premennej *pViditelnost uložíme údaje potrebné na začatie
viditeľnosti servera pomocou metódy getAdvertising() objektu
pServer. Potom pomocou funkcie start() zviditeľníme
server zariadením v okolí.
Funkcia loop()
V tejto chvíli sme dokončili nastavenie BLE servera a všetkých jeho
dôležitých súčastí. Vrhneme sa teda na vyhodnocovanie podnetov od klienta
vo funkcii loop(). V tejto časti programu budeme na základe
obdržaných dát vyhodnocovať, ktorá LED dióda sa má rozsvietiť resp.
zhasnúť:
Najskôr vyhodnotíme, či je
vôbec nejaké zariadenie pripojené. Ak áno, uložíme prijaté údaje do
reťazca value pomocou funkcie getValue(). Ak
odošleme z telefónu správu cervena, mikrokontrolér ju
vyhodnotí tak, že privedie signál na konkrétny pin, kde je pripojená
červená LED dióda, čím ju rozsvieti. Ak potom pošleme správu
zelena, červená dióda zhasne a rozsvieti sa iba zelená
dióda.
Nakoniec ešte vyhodnotíme zmenu pripojeného zariadenia a vypíšeme túto zmenu do sériového monitora. Táto časť kódu je vhodným pomocníkom pri ladení kódu. Nie je síce nevyhnutná, ale je vhodné ju do programu zakomponovať:
Spustenie projektu
Tým sme úspešne dokončili celý program pre mikrokontrolér. Poďme si teraz ukázať, ako celý projekt funguje. Na pripojenie k BLE serveru využijeme mobilný telefón. Optimálna bude aplikácia nRF Connect, ktorá je dostupná ako na Google Play, tak aj na App Store.
Pre pripojenie k Bluetooth rozhraniu existuje mnoho podobných aplikácií, záleží čisto na našej preferencii.
Po spustení aplikácie začne telefón vyhľadávať zariadenie v okolí,
kliknutím na Connect pri názve nášho BLE servera sa
pripojíme:

Po pripojení k serveru vyberieme možnosť Unknown Service a potom na ikonku so šípkou hore (upload):

Tým sa otvorí tabuľka pre odosielanie hodnôt na serveri, kde rozklikneme zoznam s možnými typmi odosielaných dát:

A vyberieme možnosť TEXT (UTF-8):

Teraz do textového poľa New value napíšeme buď
cervena alebo zelena a kliknutím na tlačidlo
SEND v pravom dolnom rohu odošleme hodnotu na server:

Po odoslaní hodnoty sa rozsvieti príslušná LED dióda.
Zdrojový kód projektu je k dispozícii v archíve pod lekciou.
V budúcej lekcii, BLE na ESP-32 - komunikácia servera s klientom - Server , nakonfigurujeme BLE server pre vzájomnú komunikáciu medzi serverom a klientom, vďaka ktorej budeme ovládať LED diódu.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 17x (1.5 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C++
