- Podmienky
- Potrebné materiály
- Hardware
- Získajte adresu Bluetooth servera (adresa fitnes pásma)
- Získanie služby a charakteristický UUID servera
- Programovanie ESP32 tak, aby fungoval ako klient pre aplikáciu Proximity Switch
- Pracovné a testovacie
Aké cool je zapnúť svetlá automaticky, hneď ako vstúpite do svojej domácnosti, a znova ich vypnúť, keď odídete! Áno, jednoduchá aplikácia to dokáže za vás. V tomto projekte použijeme ESP32 ako klienta BLE a fitnes pásmo ako server BLE, takže kedykoľvek osoba nosiaca fitnes pásmo príde v dosahu ESP32 Bluetooth, ESP32 ho detekuje a rozsvieti svetlo. Akékoľvek zariadenie Bluetooth, ktoré má možnosti servera BLE, možno použiť ako spúšťacie zariadenie na ovládanie ľubovoľného domáceho zariadenia pomocou protokolu ESP32.
Funkcionalitu modulu ESP32 BLE (Bluetooth Low Energy) sme už preskúmali a som z neho dosť nadšený. Stručne povedané, tento modul má klasické Bluetooth aj Bluetooth Low Energy (BLE), klasické Bluetooth je možné použiť na prenos skladieb alebo súborov a možnosť BLE sa dá použiť pre aplikácie optimalizované na batériu, ako sú Bluetooth majáky, fitness pásma, proximity s Je možné ho tiež použiť ako sériové rozhranie Bluetooth, ako sú moduly HC-05 alebo HC-06, pre jednoduché projekty mikrokontrolérov.
Ako viete, ESP32 BLE môže pracovať v dvoch rôznych režimoch. Jedným z nich je režim servera, o ktorom sme už hovorili pomocou služby GATT na napodobnenie služby indikátora úrovne nabitia batérie. V tomto cvičení ESP32 fungoval ako server a náš mobilný telefón ako klient. Teraz používajme ESP32 ako klienta a skúsme ho pripojiť k iným serverom BLE, ako je moje fitnes pásmo.
Všetky servery BLE, vrátane môjho fitnes pásma, sú v režime neustálej reklamy, čo znamená, že ich kedykoľvek dokáže klient zistiť. Využitím tejto funkcie môžeme tieto fitnes pásy použiť ako spínač priblíženia, čo znamená, že tieto fitnes pásy sú vždy viazané na ruku používateľa a skenovaním pásma zistíme, či je osoba v dosahu. Presne to sa chystáme urobiť v tomto článku. Budeme programovať ESP32 pôsobiť ako BLE klienta a neustále udržiavať nehľadáte BLE zariadení; ak nájdeme fitnes pásmo v dosahu, pokúsime sa ho pripojiť a ak je pripojenie úspešné, môžeme spustiť žiarovku prepnutím jedného z pinov GPIO na ESP32. Metóda je spoľahlivá, pretože každý server BLE(fitnes pásmo) bude mať jedinečné hardvérové ID, takže žiadne dve zariadenia servera BLE nebudú identické. Zaujimave nie? !!! Teraz poďme stavať
Podmienky
V tomto článku predpokladám, že už viete, ako používať dosku ESP32 s Arduino IDE, ak sa teda nevrátite k začiatku s výukovým programom ESP32.
Pre jednoduchšie pochopenie sme kompletný Bluetooth ESP32 rozdelili do troch segmentov. Pred začatím tohto sa preto odporúča absolvovať prvé dva výukové programy.
- Sériové Bluetooth na prepínaní LED diód ESP32 z mobilného telefónu
- Server BLE na odosielanie údajov o úrovni batérie do mobilného telefónu pomocou služby GATT
- Klient BLE vyhľadá zariadenia BLE a bude slúžiť ako maják.
Prvé dva návody sme už prebrali, tu pokračujeme posledným, ktorý vysvetľuje ESP32 ako klienta BLE.
Potrebné materiály
- Vývojová rada ESP32
- AC záťaž (lampa)
- Reléový modul
Hardware
Hardvér pre tento projekt klienta ESP32 BLE je celkom jasný, pretože väčšina mágie sa odohráva vo vnútri kódu. Keď sa zistí alebo stratí signál Bluetooth, musí ESP32 prepínať kontrolku AC (záťaž). Na prepnutie tejto záťaže použijeme relé, a pretože piny GPIO ESP32 sú kompatibilné iba s 3,3 V, potrebujeme reléový modul, ktorý je možné napájať 3,3 V. Stačí skontrolovať, aký tranzistor sa používa v reléovom module, ak je to BC548, je dobré ísť inam vytvoriť si vlastný obvod podľa schémy zapojenia uvedenej nižšie.
Varovanie: Obvod pracuje s priamym sieťovým napätím 220V AC. Pri živých vodičoch buďte opatrní a dbajte na to, aby nedošlo ku skratu. Bol si varovaný.
Dôvodom použitia BC548 nad BC547 alebo 2N2222 je, že majú nízke napätie základne-emitor, ktoré je možné spustiť iba pri 3,3V. Relé tu použitá, je 5V relé, takže sme ho napájať pomocou Vin kolíkom, ktorý dostane 5V tvorí napájací kábel. Uzemňovací kolík je pripojený k zemi obvodu. Rezistor R1 1K sa používa ako základná obmedzovače prúdu odporom. Fázový vodič je pripojený k NO kolíku relé a spoločný kolík relé je pripojený k záťaži a druhý koniec záťaže je pripojený k neutrálu. Môžete zmeniť pozíciu Fáza a Neutrál, ale dávajte pozor, aby ste ich neskrátili priamo. Prúd by mal vždy prechádzať cez záťaž (žiarovku).Na uľahčenie práce som použil modul relé a záťažou je tu lampa Focus LED. Moje nastavenie vyzerá asi takto nižšie
Ak chcete hardvér zatiaľ preskočiť, môžete na prepínanie integrovanej LED diódy na ESP32 použiť namiesto pinov GPIO 13 pin GPIO. Táto metóda sa odporúča začiatočníkom.
Získajte adresu Bluetooth servera (adresa fitnes pásma)
Ako už bolo povedané, naprogramujeme ESP32 tak, aby fungoval ako klient (podobne ako telefón) a pripojil sa k serveru, ktorý je mojím fitnes pásmom (Lenovo HW-01). Aby sa klient mohol pripojiť k serveru, musí poznať adresu Bluetooth servera. Každý server Bluetooth, ako je moje fitnes pásmo, má svoju vlastnú jedinečnú adresu Bluetooth, ktorá je trvalá. Môžete to spojiť s MAC adresou vášho laptopu alebo mobilného telefónu.
Na získanie tejto adresy zo servera používame aplikáciu s názvom nRF connect od severských polovodičov, ktorú sme už použili pre náš predchádzajúci tutoriál. Je k dispozícii zadarmo pre používateľov IOS aj Android. Jednoducho si stiahnite, spustite aplikáciu a vyhľadajte Bluetooth zariadenia v okolí. Aplikácia zobrazí zoznam všetkých zariadení BLE, ktoré nájde. Môj názov je HW-01. Stačí sa pozrieť pod jeho názov a nájdete hardvérovú adresu servera, ako je uvedené nižšie.
Takže hardvérová adresa ESP32 BLE môjho fitness pásma je C7: F0: 69: F0: 68: 81, budete mať inú sadu čísel v rovnakom formáte. Stačí si to poznamenať, pretože to budeme potrebovať pri programovaní nášho ESP32.
Získanie služby a charakteristický UUID servera
Dobre, teraz sme identifikovali náš server pomocou adresy BLE, ale aby sme s ním mohli komunikovať, musíme hovoriť jazykom služby a charakteristikami, ktorým by ste rozumeli, keby ste si prečítali predchádzajúci návod. V tomto tutoriáli používam na spárovanie charakteristiku zápisu môjho servera (fitnes pásmo). Pre spárovanie so zariadením teda potrebujeme Servisný inzerát Charakteristické UUID, ktorý môžeme opäť získať s rovnakou aplikáciou.
Stačí kliknúť na tlačidlo pripojenia vo vašej aplikácii a vyhľadať niektoré charakteristiky zápisu, kde aplikácia zobrazí UUID služby a charakteristický UUID. Moja je uvedená nižšie
Tu je môj UUID služby a charakteristický UUID rovnaký, ale nemusí to byť rovnaké. Poznačte si UUID vášho servera. Moja bola zaznamenaná ako
UUID služby: 0000fee7-0000-1000-8000-00805f9b34fb Charakteristické UUID: 0000fee7-0000-1000-8000-00805f9b34fb
Používanie charakteristík zápisu nie je povinné; môžete použiť akúkoľvek platnú službu a charakteristické UUID servera, ktoré sa zobrazujú v aplikácii.
Programovanie ESP32 tak, aby fungoval ako klient pre aplikáciu Proximity Switch
Myšlienkou programu je umožniť ESP32, aby fungoval ako klient, ktorý neustále vyhľadáva zariadenia Bluetooth, keď nájde náš server (fitnes pásmo), overí ID hardvéru a prepne svetlo cez pin GPIO 13. No, dobre! !, ale je s tým jeden problém. Všetky servery BLE budú mať dosah 10 metrov, čo je trochu príliš. Takže ak sa snažíme zapnúť spínač priblíženia, aby sa rozsvietilo svetlo pri otvorení dverí, je tento rozsah veľmi vysoký.
Na zmenšenie dosahu servera BLE môžeme použiť možnosť párovania. Server BLE a klient zostanú spárované, iba ak sú obaja vo vzdialenosti 3-4 metrov. To je ideálne pre našu aplikáciu. Takže nevyrábame ESP32 nielen na to, aby sme našli server BLE, ale aby sme sa k nemu aj pripojili a uistili sa, či zostáva spárovaný. Pokiaľ sú spárované, kontrolka striedavého prúdu zostane svietiť, keď dôjde k prekročeniu dosahu, dôjde k strate párovania a žiarovka sa vypne. Kompletný ukážkový program ESP32 BLE, ktorý robí to isté, je uvedený na konci tejto stránky. Ďalej tu rozdelím kód na malé úryvky a pokúsim sa ich vysvetliť.
Po zahrnutí hlavičkového súboru informujeme ESP32 o adrese BLE, službe a charakteristickom UUID, ktoré sme získali prostredníctvom aplikácie nRF connect, ako je vysvetlené v nadpisoch vyššie. Kód vyzerá takto
statický BLEUUID serviceUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // UUID služby fitnessband získaného prostredníctvom aplikácie nRF connect static BLEUUID charUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // Charakteristické UUID fitnessband získané prostredníctvom aplikácie nRF connect String My_BLE_Address = "c7: f0: 69: f0: 68: 81"; // Hardvérové Bluetooth MAC môjho fitnessbandu sa bude líšiť pre každé pásmo získané pomocou aplikácie nRF connect
Nasleduje program, ktorý obsahuje connectToserver a MyAdvertisedDeviceCallback, ku ktorým sa vrátime neskôr. Potom dovnútra nastavenie funkcie, sme inicializácii sériové monitora a robiť BLE na ESP na vyhľadanie zariadení. Po dokončení skenovania pre každé objavené zariadenie BLE sa volá funkcia MyAdvertisedDeviceCallbacks .
Tiež povoľujeme aktívne skenovanie, pretože napájame ESP32 zo siete, pre napájanie z batérie je vypnutý, aby sa znížila spotreba prúdu. Spúšťací pin relé je pripojený k GPIO 13 v našom hardvéri, takže tiež deklarujeme, že GPIO pin 13 je výstup.
void setup () { Serial.begin (115200); // Spustiť sériový monitor Serial.println ("program servera ESP32 BLE"); // Úvodná správa BLEDevice:: init (""); pBLEScan = BLEDevice:: getScan (); // vytvorenie nového skenovania pBLEScan-> setAdvertisedDeviceCallbacks (nový MyAdvertisedDeviceCallbacks ()); // Zavolajte triedu, ktorá je definovaná vyššie pBLEScan-> setActiveScan (true); // aktívne skenovanie spotrebuje viac energie, ale výsledky budú rýchlejšie pinMode (13, OUTPUT); // Deklarujte zabudovaný kolík LED ako výstupný }
Vo vnútri funkcie MyAdvertisedDeviceCallbacks vytlačíme riadok, ktorý bude obsahovať zoznam a ďalšie informácie o zariadeniach BLE, ktoré boli objavené. Potrebujeme hardvérové ID zariadenia BLE, ktoré sme objavili, aby sme ho mohli porovnať s požadovaným. Takže používame premennú Server_BLE_Address na získanie adresy zariadenia a potom ju tiež prevedieme z typu BLEAddress na string.
trieda MyAdvertisedDeviceCallbacks: verejné BLEAdvertisedDeviceCallbacks { void onResult (BLEAdvertisedDevice AdvertisedDevice) { Serial.printf ("Výsledok skenovania:% s \ n", AdvertisedDevice.toString (). c_str ()); Server_BLE_Address = nová BLEAddress (AdvertisedDevice.getAddress ()); Scaned_BLE_Address = Server_BLE_Address-> toString (). C_str (); } };
Vo vnútri funkcie slučky skenujeme 3 sekundy a výsledok vložíme do foundDevices, čo je objekt z BLEScanResults. Ak skenovaním nájdeme jedno alebo viac zariadení, začneme kontrolovať, či sa zistená adresa BLE zhoduje s adresou, ktorú sme zadali do programu. Ak je zhoda pozitívna a zariadenie nie je spárované skôr, pokúsime sa ho spárovať pomocou funkcie connectToserver. Na pochopenie účelu sme tiež použili niekoľko sériových vyhlásení.
while (foundDevices.getCount ()> = 1) { if (Scaned_BLE_Address == My_BLE_Address && paired == false) { Serial.println ("Found Device: -)… pripojenie k serveru ako klient"); if (connectToserver (* Server_BLE_Address)) {
Vo vnútri funkcie connectToserver využívame UUID na spárovanie so serverom BLE (fitnes pásmo). Aby sme sa mohli spojiť so serverom, musí ESP32 fungovať ako klient, takže klienta vytvoríme pomocou funkcie createClient () a potom sa pripojíme na adresu servera BLE. Potom pomocou hodnôt UUID vyhľadáme službu a charakteristiku a pokúsime sa k nej pripojiť. Ak je pripojenie úspešné, funkcia vráti hodnotu true a ak nie, vráti hodnotu false. Upozorňujeme, že na spárovanie so serverom nie je povinné mať službu a charakteristické UUID. Robí sa to len pre vaše pochopenie.
bool connectToserver (BLEAddress pAddress) { BLEClient * pClient = BLEDevice:: createClient (); Serial.println ("- Vytvorený klient"); // Pripojte sa k serveru BLE. pClient-> connect (pAddress); Serial.println ("- Pripojené k fitnessbandu"); // Získajte odkaz na službu, po ktorej ideme, na vzdialenom serveri BLE. BLERemoteService * pRemoteService = pClient-> getService (serviceUUID); if (pRemoteService! = nullptr) { Serial.println ("- Našla sa naša služba"); návrat pravdivý; } else return false; // Získať odkaz na charakteristiku v službe vzdialeného servera BLE. pRemoteCharacteristic = pRemoteService->getCharacteristic (charUUID); if (pRemoteCharacteristic! = nullptr) Serial.println ("- Našla sa naša charakteristika"); návrat pravdivý; }
Ak je pripojenie úspešné, pin 13 GPIO sa nastaví vysoko a riadenie sa odošle mimo slučku pomocou príkazu break. Boolovská premenná spárovaná je tiež nastavená na hodnotu true.
if (connectToserver (* Server_BLE_Address)) { paired = true; Serial.println ("********************* LED svieti *********************** ** "); digitalWrite (13, HIGH); prestávka; }
Po úspešnom spárovaní a zapnutí kolíka GPIO musíme skontrolovať, či je zariadenie stále v dosahu. Pretože je teraz zariadenie spárované, služba skenovania BLE ho už nebude môcť vidieť. Nájdeme ho znova, až keď používateľ opustí oblasť. Takže musíme jednoducho vyhľadať server BLE a ak zistíme, že musíme nastaviť pin GPIO na nízku úroveň, ako je to znázornené nižšie
if (Scaned_BLE_Address == My_BLE_Address && paired == true) { Sériové číslo. println ("Naše zariadenie vyšlo z rozsahu"); paired = false; Sériové. println ("********************* LED OOOFFFFF *************************"); digitalWrite (13, LOW); ESP.restart (); prestávka; }
Pracovné a testovacie
Keď ste pripravení na program a nastavenie hardvéru, jednoducho nahrajte kód na ESP32 a usporiadajte celé nastavenie, ako je uvedené nižšie.
Mali by ste si všimnúť, že sa lampa zapína, akonáhle sa fitnes pásmo (server) spáruje s ESP32. Môžete to skontrolovať aj tak, že si všimnete symbol pripojenia Bluetooth na fitnes páse. Po spárovaní skúste odísť z ESP32 a keď prejdete 3 - 4 metre, všimnete si, že symbol Bluetooth na hodinkách zmizne a pripojenie sa stratí. Teraz, keď sa pozriete na lampu, bude vypnutá. Keď sa vrátite späť, zariadenie sa znova spáruje a rozsvieti sa svetlo. Kompletné fungovanie projektu nájdete vo videu nižšie.
Dúfam, že sa vám projekt páčil a cestou ste sa dozvedeli niečo nové. Ak ste pri uvedení do práce čelili problémom, neváhajte ich uverejniť na fórach alebo dokonca v sekcii komentárov nižšie.