Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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.
Súčiastky osadíme takto:
Schéma zapojenia - Internet vecí s ESP32 - Internet vecí s ESP32

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:

Pripojenie k ESP-32 - Internet vecí s ESP32 - Internet vecí s ESP32

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

Výber zariadenia - Internet vecí s ESP32 - Internet vecí s ESP32

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

Typy údajov - Internet vecí s ESP32 - Internet vecí s ESP32

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

Výber typu a kódovania - Internet vecí s ESP32 - Internet vecí s ESP32

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:

Odoslanie hodnoty na server - Internet vecí s ESP32 - Internet vecí s ESP32

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é 13x (1.5 kB)
Aplikácia je vrátane zdrojových kódov v jazyku C++

 

Predchádzajúci článok
Bluetooth Low Energy na module ESP-32 - Úvod
Všetky články v sekcii
Internet vecí s ESP32
Preskočiť článok
(neodporúčame)
BLE na ESP-32 - komunikácia servera s klientom - Server
Článok pre vás napísal Adam Hudeczek
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
Autor se věnuje zejména programování mikrokontrolerů a tvorbou a provozem webových stránek a webových aplikací.
Aktivity