Populárny mikrokontróler ESP32 okrem WiFi podporuje aj Bluetooth s ktorým zdieľa 2,4 GHz anténu, ktorú má čip integrovanú na PCB, alebo externú zapojenú na u.FL konektor, ak ním verzia modulu ESP32 disponuje. Verzia Bluetooth, ktorú ESP32 podporuje sa líši na jej verziách. Najpopulárnejší modul ESP32-WROOM-32 podporuje Bluetooth vo verzii 4.2 s BLE (Bluetooth Low Energy). ESP32-S3 podporuje Bluetooth 5 vrátane BLE. Zároveň je tento Bluetooth spätne kompatibilný aj s verziami 4, teda aj tieto mikrokontroléri je možné využívať súčasne v jednom projekte a komunikovať. BLE zariadenia nemusia byť viditeľné v prípade skenovania okolitých Bluetooth zariadení napr. pre párovanie.
BLE má využitie najmä v projektoch prevádzkovaných na batériu s ESP32 fungujúcim ako Beacon. Beacon funguje ako vysielač a nepríjma správy, nakoľko vysiela iba raz za určitú dobu krátku správu a následne je neaktívny, v prípade ESP32 je v režime hlbokého spánku. Všetky BLE zariadenia v dosahu môžu túto informáciu prijať. Pre BLE Beacon nie je potrebné párovanie. BLE Beacon má nespočetne veľa použití. Môže fungovať ako tzv. rádiomaják, kedy môže slúžiť ako referenčný bod napríklad pre lokáciu v priestore, alebo aj ako tag, ktorý vysiela informáciu pre brány (Anchors) v dosahu, ktoré môžu určiť jeho polohu najmä pre vnútornú (indoor) lokáciu najmä na spôsob RSSI, či s posielaním payloadu GPS (GNSS) súradníc. Výhodou je najmä ultra nízka spotreba elektrickej energie a keďže zariadenie vysiela iba niekoľko milisekúnd, je spotreba zariadenia minimálna a menšia ako pri WiFi, nakoľko sa zariadenie nemusí pripájať na WiFi sieť a získavať IP adresu z DHCP služby.
Pri použití rôznych predvolených profilov BLE Beaconu je možné použiť príklady z BLE knižnice pre ESP32, ktoré umožnia spustiť BLE profil iBeacon, prípadne aj Eddystone s možnosťou zdieľania URL adresy (napr. otváracie hodiny pre podnik, kde sú v dosahu BLE zariadenia, najmä smartfóny). Eddystone má predvolený profil aj pre telemetriu - TLM, čo umožňuje prenášať predvolené údaje, napr. stav batérie, počítadlo vysielaní, okolitá teplota a podobne. Nakoľko má profil predvolených len niekoľko parametrov, existuje aj možnosť vytvoriť si vlastný profil a vysielať dáta vlastné, čo si dnes ukážeme.
Vytvoril som ESP32 a vlastný BLE Beacon s "custom" profilom, ktorý vysiela vzorové dáta každých 30 sekúnd. Ako môžeme vidieť v serial monitore, je tam celkovo 6 hodnôt oddelených čiarkou. Custom profil mi umožňuje vysielať naraz až 31 bajtov RAW payloadu v Manufacturer-specific data (formátovaný reťazec znakov reprezentujúci payload), ktorý môže prečítať akékoľvek BLE zariadenie v dosahu. Bežnému používateľovi sa môže zdať enkódovaný payload do HEX formátu nečitateľný, avšak prijímač, ktorý má vhodne nastavené dekódovanie je schopný data vyjadriť v reprezentácii, ktorej porozumie aj laik. Použil som aplikáciu nRF connect, ktorá umožňuje skenovať BLE zariadenia v dosahu smartfónu. Aplikácia je dostupná zdarma pre Android, aj iOS zariadenia. Na danom výpise môžeme vidieť meno zariadenia, jeho MAC adresu, ale taktiež aj výrobcu - Espressif Incorporated definovaný cez manufacturer code 0x02E5, následuje reťazec manufacturer-specific data s našimi dátami.
Predstavme si RAW data, ktoré sú enkódované do HEX (16-tkovej sústavy) 0x1709646561646177702E626C6F672E736563746F722E736B1BFFE50232352E372C31392E342C3936392C3139332C323433322C30. Po dekódovaní získame viacero dát, medzi nimi dĺžku payloadu, lokálne meno pod ktorým BLE Beacon vystupuje, ale hlavne aj samotné dáta (v podstate všetko to, čo je spomenuté vyššie). V našom prípade je to časť pôvodného reťazca 0x32352E372C31392E342C3936392C3139332C323433322C30. Po jeho dekódovaní získame 25.7,19.4,969,193,2432,0, čo bude zhodné ako na strane BLE Beaconu, tak i na strane BLE prijímača.
Po vyparsovaní týchto čísel podľa terminátora (znaku ,) získame jednotlivé čísla. 25.7 môže reprezentovať napríklad teplotu v miestnosti, 19.7 vonkajšiu teplotu, 969 koncentráciu látok v ovzduší a 193 hodnotu ADC prevodníka a 2432 hodnotu CO2. Nula môže reprezentovať príznak - flag pre podmienené spustenie, napr. relé, či inú akciu. Aby sme ušetrili množstvo bajtov, ktoré chceme prenášať, je nutné vynechať medzery, čo umožní integrovať aj väčšie množstvo dát. V prípade potreby extrémneho využitia celého payloadu je možné zasielať aj priamo text, čo enkóduje jeden znak na 1 bajt.
Teda s vhodne nastaveným prijímačom, ktorý vie tieto dáta dekódovať, vyparsovať ich, je možné použiť tieto dáta aj pre logiku jeho systému, či riadenie vyššieho systému a automatizácie. Využitie systému BLE Beaconu je prakticky nekonečné, dnes máme Beacony všade okolo nás. Existujú najmä ako fit náramky, Airpods, vyhľadávače kľúčov, či ako detekcia domácich miláčikov v dosahu domu, alebo automatického dopĺňača misky, keď je BLE Beacon umiestnený do obojku.
Príklad BLE prijímača s dekódovaním dát - ESP32 UART output:
Viem si predstaviť využitie projektu aj v mojich predchádzajúcich projektov ako vhodnú alternatívu, kedy napríklad pre projekt hladinomer je možné vykonávať diaľkový odpočet aj na desiatky metrov s dobrou externou anténou na ESP32 pripojenú na u.FL konektor, kedy je prijímač vo vnútri domu pripojený do aktívneho USB portu počítača a sekundárne ESP32 vykonávajúce periodické merania s implementovaným režimom spánku a batériou. Prijímač pripojený do USB portu počítača aktívny po celý deň zareaguje na každú prichádzajúcu BLE správu od Beaconu, ktorý ju bezprostredne po meraní odošle a následne môže cez WiFi / PHY Ethernet, či LoRaWAN zapísať dáta do databázy projektu vo webaplikácii.
Tento prijímač však musí po odoslaní dát cez WiFi okamžite prepnúť na BLE scanner, aby dokázalo prijať aj ďalšie meranie, keďže anténa je zdieľaná pre obe technológie a nie je možné používať obe súčasne. Nakoľko však senzorový uzol meria v 5 až 15 minútových intervaloch, nie je to problémom, nakoľko sa po rutine je WiFi schopné prepnúť na Bluetooth v ráde milisekúnd.
Projekt hladinomer na Github pages: https://martinius96.github.io/hladinomer-studna-scripty/