- Předpoklady
- Potřebné materiály
- Hardware
- Získejte adresu Bluetooth serveru (adresa fitness pásma)
- Získání služby a charakteristického UUID serveru
- Programování ESP32 tak, aby fungoval jako klient aplikace Proximity Switch
- Práce a testování
Jak skvělé je automaticky rozsvítit světla, jakmile vstoupíte do své domácnosti, a znovu je vypnout, když odcházíte! Ano, jednoduchá aplikace to dokáže za vás. Zde v tomto projektu použijeme ESP32 jako klienta BLE a fitness pásmo jako server BLE, takže kdykoli osoba, která nosí fitness pás, přijde v dosahu ESP32 Bluetooth, ESP32 jej detekuje a rozsvítí světlo. Jakákoli zařízení Bluetooth, která mají schopnosti serveru BLE, lze použít jako spouštěcí zařízení k ovládání jakéhokoli domácího zařízení pomocí ESP32.
Už jsme prozkoumali funkce modulu BLE (Bluetooth Low Energy) modulu ESP32 a jsem z toho docela nadšený. Stručně řečeno, tento modul má klasický Bluetooth i Bluetooth Low Energy (BLE), klasický Bluetooth lze použít k přenosu skladeb nebo souborů a možnost BLE lze použít pro aplikace optimalizované na baterii, jako jsou Bluetooth majáky, fitness pásy, bezdotykové atd. Je také možné jej použít jako sériové Bluetooth, jako jsou moduly HC-05 nebo HC-06, pro jednoduché projekty mikrokontrolérů.
Jak víte, ESP32 BLE může pracovat ve dvou různých režimech. Jedním z nich je režim serveru, o kterém jsme již hovořili pomocí služby GATT k napodobování služby indikátoru stavu baterie. V tomto cvičení fungoval ESP32 jako server a náš mobilní telefon jako klient. Nyní pracujme s ESP32 jako klient a zkusme jej připojit k dalším serverům BLE, jako je moje fitness pásmo.
Všechny servery BLE, včetně mého fitness pásma, jsou v neustálém reklamním režimu, což znamená, že je lze vždy zjistit při skenování klientem. Využitím této funkce můžeme tyto fitness pásy použít jako spínač přiblížení, což znamená, že tyto fitness pásy jsou vždy vázány na ruku uživatele a skenováním pásma můžeme zjistit, zda je osoba v dosahu. To je přesně to, co v tomto článku uděláme. Budeme programovat ESP32 působit jako BLE klienta a neustále udržovat nehledáte BLE zařízení; pokud najdeme fitness pásmo v dosahu, zkusíme se k němu připojit a pokud je připojení úspěšné, můžeme spustit žárovku přepnutím jednoho z pinů GPIO na ESP32. Metoda je spolehlivá, protože každý server BLE(fitness band) bude mít jedinečné ID hardwaru, takže žádná dvě serverová zařízení BLE nebudou identická. Zajímavé, že? !!! Nyní pojďme stavět
Předpoklady
V tomto článku předpokládám, že jste již obeznámeni s používáním desky ESP32 s Arduino IDE, pokud ne zpět na začátek výuky ESP32.
Kompletní Bluetooth ESP32 jsme rozdělili do tří segmentů pro snazší pochopení. Před zahájením tohoto se proto doporučuje projít si první dva výukové programy.
- Sériové Bluetooth na přepínání LED z ESP32 z mobilního telefonu
- Server BLE k odesílání dat o úrovni baterie do mobilního telefonu pomocí služby GATT
- Klient BLE vyhledá zařízení BLE a bude fungovat jako maják.
První dva tutoriály jsme již probrali, zde pokračujeme v posledním, abychom vysvětlili ESP32 jako klienta BLE.
Potřebné materiály
- Vývojová deska ESP32
- AC zátěž (lampa)
- Reléový modul
Hardware
Hardware pro tento projekt klienta ESP32 BLE je docela prostý, protože většina kouzel se děje uvnitř kódu. ESP32 musí přepínat kontrolku střídavého proudu (zátěž), když je nalezen nebo ztracen signál Bluetooth. K přepnutí této zátěže použijeme relé, a protože GPIO piny ESP32 jsou kompatibilní pouze s 3.3V, potřebujeme modul relé, který může být poháněn 3.3V. Stačí zkontrolovat, jaký tranzistor se používá v reléovém modulu, pokud je BC548, je dobré jít jinak, vytvořit si vlastní obvod podle níže uvedeného schématu zapojení.
Varování: Obvod pracuje s přímým síťovým napětím 220V AC. S vodiči pod napětím buďte opatrní a zajistěte, aby nedošlo ke zkratu. Byl jsi varován.
Důvodem použití BC548 přes BC547 nebo 2N2222 je, že mají nízké napětí základny a emitoru, které lze spustit pouze s 3,3V. Zde použité relé je 5V relé, takže ho napájíme Vin pinem, který získá 5V z napájecího kabelu. Zemnící kolík je připojen k zemi obvodu. Rezistor R1 1K se používá jako základní omezovače proudu odporem. Fázový vodič je připojen k NO kolíku relé a společný kolík relé je připojen k zátěži a druhý konec zátěže je připojen k neutrálu. Můžete si vyměnit pozici Fáze a Neutrál, ale dávejte pozor, abyste je nezkratovali přímo. Proud by měl vždy procházet zátěží (žárovkou).Pro zjednodušení jsem použil modul relé a zátěží je zde lampa Focus LED. Moje nastavení vypadá asi takto níže
Chcete-li nyní přeskočit hardware, můžete k přepnutí palubní LED na ESP32 použít pin GPIO 2 místo GPIO 13. Tato metoda je doporučena pro začátečníky.
Získejte adresu Bluetooth serveru (adresa fitness pásma)
Jak již bylo řečeno, naprogramujeme ESP32 tak, aby fungoval jako klient (podobně jako telefon) a připojil se k serveru, který je mým fitness pásmem (Lenovo HW-01). Aby se klient mohl připojit k serveru, musí znát adresu Bluetooth serveru. Každý server Bluetooth, jako je moje fitness pásmo, má svou vlastní jedinečnou adresu Bluetooth, která je trvalá. Můžete to spojit s MAC adresou vašeho notebooku nebo mobilního telefonu.
K získání této adresy z serveru používáme aplikaci nazvanou nRF connect od severských polovodičů, kterou jsme již použili pro náš předchozí tutoriál. Je k dispozici zdarma pro uživatele IOS i Android. Jednoduše stáhněte, spusťte aplikaci a vyhledejte zařízení Bluetooth v okolí. Aplikace zobrazí seznam všech zařízení BLE, která najde. Důl se jmenuje HW-01, jednoduše se podívejte pod jeho název a najdete hardwarovou adresu serveru, jak je uvedeno níže.
Takže hardwarová adresa ESP32 BLE mého fitness pásma je C7: F0: 69: F0: 68: 81, budete mít jinou sadu čísel ve stejném formátu. Jen si to poznamenejte, protože to budeme potřebovat při programování našeho ESP32.
Získání služby a charakteristického UUID serveru
Dobře, nyní jsme identifikovali náš server pomocí adresy BLE, ale abychom s ním mohli komunikovat, musíme mluvit jazykem služby a charakteristikami, kterým byste porozuměli, kdybyste si přečetli předchozí výukový program. V tomto tutoriálu používám k zápisu charakteristiku mého serveru (fitness band). Pro spárování se zařízením tedy potřebujeme Service ad Characteristic UUID, který můžeme znovu získat se stejnou aplikací.
Stačí kliknout na tlačítko připojení ve vaší aplikaci a hledat některé charakteristiky zápisu, kde aplikace zobrazí UUID služby a charakteristický UUID. Důl je zobrazen níže
Zde je můj UUID služby a charakteristický UUID stejný, ale nemusí to být stejné. Poznamenejte si UUID vašeho serveru. Můj byl zaznamenán jako
UUID služby: 0000fee7-0000-1000-8000-00805f9b34fb Charakteristické UUID: 0000fee7-0000-1000-8000-00805f9b34fb
Používání charakteristik zápisu není povinné; můžete použít jakoukoli platnou službu a charakteristické UUID serveru, které se zobrazují v aplikaci.
Programování ESP32 tak, aby fungoval jako klient aplikace Proximity Switch
Myšlenkou programu je přimět ESP32, aby fungoval jako klient, který neustále vyhledává zařízení Bluetooth, když najde náš server (fitness pásmo), ověří ID hardwaru a přepne světlo přes pin GPIO 13. No dobře! !, ale s tím je jeden problém. Všechny servery BLE budou mít dosah 10 metrů, což je trochu příliš. Takže pokud se snažíme, aby spínač přiblížení zapnul světlo otevřených dveří, je tento rozsah velmi vysoký.
Pro zmenšení dosahu serveru BLE můžeme použít možnost párování. Server BLE a klient zůstanou spárovaní, pouze pokud jsou oba ve vzdálenosti 3-4 metrů. To je ideální pro naši aplikaci. Takže ESP32 děláme nejen pro objevování BLE serveru, ale také pro připojení k němu a ujistěte se, že zůstane spárovaný. Pokud jsou spárovány, kontrolka střídavého proudu zůstane rozsvícená, pokud dojde k překročení dosahu, dojde ke ztrátě spárování a kontrolka zhasne. Kompletní ukázkový program ESP32 BLE, který dělá totéž, je uveden na konci této stránky. Níže rozdělím kód na malé úryvky a pokusím se je vysvětlit.
Po zahrnutí souboru záhlaví informujeme ESP32 o adrese BLE, službě a charakteristickém UUID, které jsme získali prostřednictvím aplikace nRF connect, jak je vysvětleno v nadpisech výše. Kód vypadá níže
statický BLEUUID serviceUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // UUID služby fitnessband získaného prostřednictvím aplikace nRF connect static BLEUUID charUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // Charakteristické UUID fitnessband získané prostřednictvím aplikace nRF connect String My_BLE_Address = "c7: f0: 69: f0: 68: 81"; // Hardware Bluetooth MAC mého fitnessband , se bude lišit pro každé pásmo získané prostřednictvím aplikace nRF connect
Následně v programu máme connectToserver a MyAdvertisedDeviceCallback, ke kterým se vrátíme později. Potom uvnitř funkce nastavení inicializujeme sériový monitor a necháme BLE na ESP vyhledat zařízení. Po dokončení skenování pro každé objevené zařízení BLE se volá funkce MyAdvertisedDeviceCallbacks .
Povolujeme také aktivní skenování, protože ESP32 napájíme ze sítě, pro bateriové použití je vypnutý, aby se snížila spotřeba proudu. Pin spouštěcího relé je připojen k GPIO 13 v našem hardwaru, takže také deklarujeme, že GPIO pin 13 jako výstup.
void setup () { Serial.begin (115200); // Spustit sériový monitor Serial.println ("program serveru ESP32 BLE"); // Úvodní zpráva BLEDevice:: init (""); pBLEScan = BLEDevice:: getScan (); // vytvoření nového skenování pBLEScan-> setAdvertisedDeviceCallbacks (nový MyAdvertisedDeviceCallbacks ()); // Volání třídy definované výše pBLEScan-> setActiveScan (true); // aktivní skenování spotřebovává více energie, ale výsledky jsou rychlejší pinMode (13, OUTPUT); // Deklarujte vestavěný kolík LED jako výstup }
Uvnitř funkce MyAdvertisedDeviceCallbacks vytiskneme řádek, ve kterém bude uveden název a další informace o zařízeních BLE, která byla objevena. Potřebujeme hardwarové ID zařízení BLE, které bylo objeveno, abychom jej mohli porovnat s požadovaným. Proměnnou Server_BLE_Address tedy používáme k získání adresy zařízení a také k jejímu převodu z typu BLEAddress na řetězec.
třída MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult (BLEAdvertisedDevice AdvertisedDevice) { Serial.printf ("Výsledek skenování:% s \ n", AdvertisedDevice.toString (). c_str ()); Server_BLE_Address = nová BLEAddress (AdvertisedDevice.getAddress ()); Scaned_BLE_Address = Server_BLE_Address-> toString (). C_str (); } };
Uvnitř funkce smyčky skenujeme po dobu 3 sekund a výsledek vložíme dovnitř foundDevices, což je objekt z BLEScanResults. Pokud skenováním najdeme jedno nebo více než jedno zařízení, začneme kontrolovat, zda se nalezená adresa BLE shoduje s adresou, kterou jsme zadali v programu. Pokud je shoda kladná a zařízení není spárováno dříve, zkusíme to spárovat pomocí funkce connectToserver. Pro pochopení účelu jsme také použili několik sériových prohlášení.
while (foundDevices.getCount ()> = 1) { if (Scaned_BLE_Address == My_BLE_Address && paired == false) { Serial.println ("Found Device: -)… připojení k serveru jako klient"); if (connectToserver (* Server_BLE_Address)) {
Uvnitř funkce connectToserver využíváme UUID k párování se serverem BLE (fitness pásmo). Pro připojení k serveru musí ESP32 fungovat jako klient, takže vytvoříme klienta pomocí funkce createClient () a poté se připojíme k adrese serveru BLE. Poté vyhledáme službu a charakteristiku pomocí hodnot UUID a zkusíme se k ní připojit. Když je připojení úspěšné, funkce vrátí true a pokud ne, vrátí false. Všimněte si, že není nutné mít servisní a charakteristické UUID pro spárování se serverem, provádí se to pouze pro vaše pochopení.
bool connectToserver (BLEAddress pAddress) { BLEClient * pClient = BLEDevice:: createClient (); Serial.println ("- Vytvořený klient"); // Připojte se k BLE serveru. pClient-> connect (pAddress); Serial.println ("- Připojeno k fitnessband"); // Získejte odkaz na službu, kterou sledujeme na vzdáleném serveru BLE. BLERemoteService * pRemoteService = pClient-> getService (serviceUUID); if (pRemoteService! = nullptr) { Serial.println ("- Found our service"); návrat true; } else return false; // Získejte odkaz na charakteristiku ve službě vzdáleného serveru BLE. pRemoteCharacteristic = pRemoteService->getCharacteristic (charUUID); if (pRemoteCharacteristic! = nullptr) Serial.println ("- Nalezli jsme naši charakteristiku"); návrat true; }
Pokud je připojení úspěšné, pin 13 GPIO je nastaven vysoko a ovládací prvek je odeslán mimo smyčku pomocí příkazu break. Boolovská proměnná spárovaná je také nastavena na hodnotu true.
if (connectToserver (* Server_BLE_Address)) { paired = true; Serial.println („******************** ** "); digitalWrite (13, HIGH); přestávka; }
Po úspěšném spárování a zapnutí pin GPIO musíme zkontrolovat, zda je zařízení stále v dosahu. Protože nyní je zařízení spárováno, služba skenování BLE ji již nebude moci zobrazit. Najdeme jej znovu, až když uživatel opustí oblast. Musíme tedy jednoduše vyhledat server BLE a pokud zjistíme, že musíme nastavit pin GPIO na nízkou hodnotu, jak je znázorněno níže
if (Scaned_BLE_Address == My_BLE_Address && paired == true) { Serial. println ("Naše zařízení vyšlo z rozsahu"); paired = false; Seriál. println ("********************* LED OOOFFFFF *************************"); digitalWrite (13, LOW); ESP.restart (); přestávka; }
Práce a testování
Jakmile jste připraveni na program a nastavení hardwaru, jednoduše nahrajte kód na ESP32 a uspořádejte celé nastavení, jak je znázorněno níže.
Měli byste si všimnout, že se lampa zapne, jakmile se fitness pásmo (server) spáruje s ESP32. Můžete to také zkontrolovat tak, že si všimnete symbolu Bluetooth připojení na fitness pásmu. Po spárování zkuste odejít z ESP32 a při překročení 3 až 4 metrů si všimnete, že symbol Bluetooth na hodinkách zmizí a připojení je ztraceno. Když se nyní podíváte na lampu, vypne se. Když se vrátíte zpět, zařízení se znovu spáruje a rozsvítí se světlo. Kompletní fungování projektu najdete ve videu níže.
Doufám, že se vám projekt líbil a naučili se něco nového. Pokud jste při uvedení do provozu čelili jakémukoli problému, můžete problém zveřejnit na fórech nebo dokonce v sekci komentářů níže