- Előfeltételek
- Szükséges anyagok
- Hardver
- Szerezze meg a szerver Bluetooth címét (a fitnesz sáv címe)
- A szerver szolgáltatásának és jellemző UUID-jének megszerzése
- Az ESP32 programozása kliensként működik a Proximity Switch alkalmazás számára
- Munka és tesztelés
Milyen klassz lehet a villanyt automatikusan bekapcsolni, amint belép otthonába, és távozásakor újra kikapcsolni! Igen, ezt egy egyszerű alkalmazás teheti meg az Ön számára. Ebben a projektben itt az ESP32-t fogjuk használni BLE kliensként és fitnesz sávot BLE szerverként, így amikor a fitnesz sávot viselő személy az ESP32 Bluetooth tartományába esik, az ESP32 észleli és bekapcsolja a fényt. Bármely BLE szerver képességgel rendelkező Bluetooth eszköz használható kiváltó eszközként bármely otthoni készülék vezérlésére az ESP32 segítségével.
Felfedeztük már az ESP32 modul BLE (Bluetooth Low Energy) funkcióit, és nagyon el vagyok ragadtatva tőle. Összefoglalásképpen elmondható, hogy ez a modul rendelkezik mind a klasszikus Bluetooth, mind a Bluetooth Low Energy (BLE) funkcióval, a klasszikus Bluetooth használható dalok vagy fájlok átvitelére, a BLE opció pedig akkumulátorral optimalizált alkalmazásokhoz használható, például Bluetooth jelzők, fitnesz sávok, közelség s stb. Soros Bluetooth-ként is használható, mint például a HC-05 vagy HC-06 modulok egyszerű mikrokontroller projektekhez.
Mint tudják, az ESP32 BLE két különböző módban működhet. Az egyik a szerver mód, amelyet már megvitattunk a GATT szolgáltatás felhasználásával az akkumulátorszint-jelző szolgáltatás utánzására. Ebben a gyakorlatban az ESP32 szerverként, mobiltelefonunk pedig kliensként működött. Most működtessük az ESP32-t kliensként, és próbáljuk meg összekapcsolni más BLE szerverekkel, például a fitnesz sávommal.
Az összes BLE szerver, beleértve a fitnesz sávomat is, állandó hirdetési módban van, vagyis mindig felfedezhetők, ha egy ügyfél átvizsgálja őket. Ennek a funkciónak a kihasználásával használhatjuk ezeket a fitnesz sávokat közelségi kapcsolóként, vagyis ezek a fitnesz sávok mindig a felhasználó kezéhez vannak kötve, és a sáv beolvasásával észlelhetjük, hogy a személy hatótávolságon belül van-e. Ebben a cikkben pontosan ezt fogjuk tenni. Programozni fogjuk az ESP32-t, hogy BLE kliensként működjön, és folyamatosan vizsgálja a BLE eszközöket; ha a fitnesz sávot megtaláljuk a tartományban, megpróbálunk csatlakozni hozzá, és ha a kapcsolat sikeres, akkor villanykörtét indíthatunk az ESP32 egyik GPIO-gombjának átkapcsolásával. A módszer megbízható, mert minden BLE szerver(fitness band) egyedi hardverazonosítóval rendelkezik, így két BLE szerver eszköz nem lesz azonos. Érdekes igaz? !!! Most építsünk
Előfeltételek
Ebben a cikkben feltételezem, hogy Ön már ismeri az ESP32 kártya használatát az Arduino IDE-vel, ha nem tér vissza az ESP32 bemutatóhoz.
A teljes ESP32 Bluetooth- ot három szegmensre osztottuk az érthetőség érdekében. Ezért ajánlatos végigmenni az első két oktatóanyagon, mielőtt ezzel kezdenénk.
- Soros Bluetooth az ESP32-n, a LED mobiltelefonról váltakozik
- A BLE szerver az akkumulátor töltöttségi szintjének adatait mobiltelefonra küldi a GATT szolgáltatás segítségével
- BLE kliens a BLE eszközök keresésére és jelzőként történő működésre.
Az első két oktatóanyagot már áttekintettük, itt folytatjuk az utolsót, hogy elmagyarázzuk az ESP32-t BLE kliensként.
Szükséges anyagok
- ESP32 Fejlesztési Tanács
- AC terhelés (lámpa)
- Relé modul
Hardver
Ennek az ESP32 BLE Client projektnek a hardvere meglehetősen egyszerű, mivel a varázslat nagy része a kódban történik. Az ESP32-nek váltania kell egy váltakozó áramú lámpát (töltés), amikor a Bluetooth jel felfedeződik vagy elveszik. Ennek a terhelésnek a váltásához egy relét fogunk használni, és mivel az ESP32 GPIO csapjai csak 3,3 V kompatibilisek, szükségünk van egy olyan Relay modulra, amely 3,3 V-mal működtethető. Csak ellenőrizze, hogy a relé modulban milyen tranzisztort használnak, ha ez BC548, akkor jó, ha másképp készíti el saját áramkört az alábbi kapcsolási rajz szerint.
Figyelem: Az áramkör 220 V váltakozó áramú hálózati feszültséggel foglalkozik. Vigyázzon a feszültség alatt álló vezetékekkel, és ügyeljen arra, hogy ne keletkezzen rövidzárlat. Figyelmeztetve lettél.
A BC548 használata a BC547 vagy a 2N2222 helyett az az oka, hogy alacsony az alap-emitter feszültségük, amelyet csak 3,3 V-mal lehet kiváltani. Az itt használt relé egy 5 V-os relé, ezért Vin tűvel tápláljuk, amely 5 V-ot kap a tápkábelből. A földelőcsap az áramkör földjéhez van csatlakoztatva. Az R1 1K ellenállást bázisáram-korlátozó ellenállásként használják. A fázisvezeték a relé NO tűjéhez, a relé közös csapja pedig a terheléshez, a terhelés másik vége pedig a semlegeshez van csatlakoztatva. Megváltoztathatja a fázis és a semleges pozícióját, de ügyeljen arra, hogy ne rövidítse le őket közvetlenül. Az áramnak mindig át kell haladnia a terhelésen (izzó).Relay modult használtam, hogy a dolgok egyszerűek legyenek, és a terhelés itt egy Focus LED lámpa. A beállításom az alábbiak szerint néz ki
Ha most szeretné kihagyni a hardvert, akkor a GPIO 2 tűt használhatja a GPIO 13 tű helyett a fedélzeti LED bekapcsolásához az ESP32-en. Ez a módszer kezdőknek ajánlott.
Szerezze meg a szerver Bluetooth címét (a fitnesz sáv címe)
Mint korábban elmondtuk, az ESP32-t úgy fogjuk programozni, hogy kliensként működjön (hasonlóan a telefonhoz), és csatlakozzon egy szerverhez, amely az én fitnesz sávom (Lenovo HW-01). Ahhoz, hogy az ügyfél csatlakozzon a szerverhez, tudnia kell a szerver Bluetooth címét. Minden Bluetooth szervernek, például az itteni fitnesz sávomnak, megvan a maga egyedi Bluetooth címe, amely állandó. Összekapcsolhatja ezt a laptop vagy a mobiltelefon MAC-címével.
Ennek a címnek a kiszolgálójához a nRF connect nevű alkalmazást használjuk a skandináv félvezetőktől, amelyeket már az előző oktatóanyagunkhoz használtunk. Ingyenesen elérhető mind az IOS, mind az Android felhasználók számára. Egyszerűen töltse le, indítsa el az alkalmazást, és keresse meg a közelben lévő Bluetooth-eszközöket. Az alkalmazás felsorolja az összes megtalált BLE eszközt. Az enyém neve HW-01 egyszerűen nézze meg a neve alatt, és megtalálja a szerver hardvercímét az alábbiak szerint.
Tehát a fitnesz sávom ESP32 BLE hardvercíme C7: F0: 69: F0: 68: 81, akkor más számkészlet lesz ugyanabban a formátumban. Csak jegyezze fel, mivel az ESP32 programozásakor szükségünk lesz rá.
A szerver szolgáltatásának és jellemző UUID-jének megszerzése
Oké, most azonosítottuk szerverünket a BLE cím használatával, de a kommunikációhoz beszélnünk kell a szolgáltatás nyelvét és a jellemzőket, amelyeket megértene, ha elolvasta az előző oktatóanyagot. Ebben az oktatóanyagban a szerverem (fitness band) írási karakterisztikáját használom a párosításhoz. Tehát az eszközzel való párosításhoz szükségünk van a Service ad Characteristic UUID-re, amelyet ismét ugyanazon alkalmazással szerezhetünk be.
Csak kattintson a csatlakozás gombra az alkalmazásban, és keressen néhány írási jellemzőt, ahol az alkalmazás megjeleníti a szolgáltatás UUID-t és a jellegzetes UUID-t. Az enyém az alábbiakban látható
Itt a Service UUID és a Characteristic UUID azonos, de nem feltétlenül azonos. Jegyezze fel a szerver UUID azonosítóját. Az enyémet feljegyezték
Szolgáltatás UUID: 0000fee7-0000-1000-8000-00805f9b34fb Jellemző UUID: 0000fee7-0000-1000-8000-00805f9b34fb
Az írási jellemzők használata nem kötelező; bármely érvényes szolgáltatást és a kiszolgáló jellegzetes UUID-jét használhatja, amely az alkalmazásban látható.
Az ESP32 programozása kliensként működik a Proximity Switch alkalmazás számára
A program ötlete az, hogy az ESP32 olyan kliensként működjön, amely folyamatosan keresi a Bluetooth-eszközöket, amikor megtalálja szerverünket (fitnesz-sávot), ellenőrzi a hardverazonosítót, és átkapcsolja a fényt a GPIO 13-as tűn. Nos, rendben! !, de ezzel egy probléma van. Az összes BLE szerver 10 méteres hatótávolsággal rendelkezik, ami kissé túl sok. Tehát ha megpróbáljuk a közelségi kapcsolót bekapcsolni a nyitott ajtó fényének bekapcsolására, akkor ez a tartomány nagyon magas.
A BLE szerver hatótávolságának csökkentése érdekében használhatjuk a párosítási opciót. A BLE szerver és az ügyfél csak akkor marad párosítva, ha mindkettő 3-4 méteres távolságon belül van. Ez tökéletes az alkalmazásunkhoz. Tehát az ESP32-t nemcsak a BLE kiszolgáló felfedezésére, hanem a csatlakozásra és a párosított állapot megőrzésére is megtesszük. Mindaddig, amíg párosítva vannak, a váltakozó áramú lámpa folyamatosan világít, ha a tartomány meghaladja a párosítást, akkor elvész és a lámpa kikapcsol. A teljes ESP32 BLE példaprogram ugyanerre az oldalra található. Az alábbiakban apró részletekre bontom a kódot, és megpróbálom elmagyarázni őket.
A fejlécfájl beillesztése után tájékoztatjuk az ESP32-t a BLE címről, a szolgáltatásról és a jellemző UUID-ről, amelyet az nRF connect alkalmazással szereztünk be, a fenti címsorokban leírtak szerint. A kód az alábbiak szerint néz ki
statikus BLEUUID serviceUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // Service UUID a fitnessband szerzett nRF Connect alkalmazás statikus BLEUUID charUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // Jellemző UUID a fitnessband szerzett nRF Connect alkalmazás karakterlánc My_BLE_Address = "c7: f0: 69: f0: 68: 81"; // Hardver Bluetooth MAC én fitnessband , változik minden sávban szerzett nRF Connect alkalmazás
Ezután a programban megvan a connectToserver és a MyAdvertisedDeviceCallback, amelyekre később visszatérünk. Ezután a beállítási funkción belül inicializáljuk a soros monitort, és elkészítjük a BLE-t az ESP-n az eszköz kereséséhez. A vizsgálat befejezése után minden felfedezett BLE-eszköz meghívja a MyAdvertisedDeviceCallbacks funkciót.
Azt is lehetővé teszi az aktív szkennelési mivel mi táplálja a ESP32 a hálózati, az akkumulátor alkalmazás ki van kapcsolva, hogy csökkentse az áramfogyasztást. A relé ravasztüskéje hardverünkben a GPIO 13-hoz van csatlakoztatva, ezért kijelentjük azt is, hogy a GPIO 13 tű kimenetként.
void setup () { Soros.kezdés (115200); // Indítsa el a Serial.println soros monitort ("ESP32 BLE Server program"); // Bevezető üzenet BLEDevice:: init (""); pBLEScan = BLEDevice:: getScan (); // új beolvasás létrehozása pBLEScan-> setAdvertisedDeviceCallbacks (új MyAdvertisedDeviceCallbacks ()); // Hívja meg a fenti osztályt: pBLEScan-> setActiveScan (true); // az aktív keresés több energiát fogyaszt, de gyorsabban eredményt ér el pinMode (13, OUTPUT); // Nyújtsa kimenetnek a beépített LED-csapot }
A MyAdvertisedDeviceCallbacks függvényen belül egy sort nyomtatunk , amely felsorolja a felfedezett BLE-eszközök nevét és egyéb információit. Szükségünk van a felfedezett BLE eszköz hardverazonosítójára, hogy össze tudjuk hasonlítani a kívánt készülékkel. Tehát a Server_BLE_Address változóval megkapjuk az eszköz címét, majd átalakítjuk azt a BLEAddress típusból karakterláncba.
class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult (BLEAdvertisedDevice advertisedDevice) { Serial.printf ("Szkennelési eredmény:% s \ n", advertisedDevice.toString (). c_str ()); Server_BLE_Address = új BLEAddress (advertisedDevice.getAddress ()); Scaned_BLE_Address = Szerver_BLE_Cím-> toString (). C_str (); } };
A ciklus funkción belül 3 másodpercig szkennelünk, és az eredményt a foundDevices-be tesszük, amely a BLEScanResults objektuma. Ha szkenneléssel egy vagy több eszközt találunk, elkezdjük ellenőrizni, hogy a felfedezett BLE cím megegyezik-e azzal, amelyet a programba beírtunk. Ha az egyezés pozitív, és az eszköz nincs korábban párosítva, akkor megpróbáljuk párosítani vele a connectToserver funkciót. Néhány megfogalmazást is használtunk megértési célokra.
while (foundDevices.getCount ()> = 1) { if (Beolvasott_BLE_cím == Saját_BLE_cím && páros == hamis) { Serial.println ("Talált eszköz: -)… csatlakozás a kiszolgálóhoz kliensként"); if (connectToserver (* Szerver_BLE_cím)) {
A connectToserver funkción belül az UUID-t használjuk a BLE szerverrel (fitnesz sáv) való párosításhoz. A kiszolgálóhoz való kapcsolódáshoz az ESP32-nek kliensként kell működnie, ezért a createClient () függvény segítségével létrehozunk egy klienst, majd csatlakozunk a BLE szerver címéhez. Ezután megkeressük a szolgáltatást és a jellemzőt az UUID értékek felhasználásával, és megpróbálunk csatlakozni hozzá. Amikor a kapcsolat sikeres, a függvény igaz, ha nem, akkor hamis értéket ad vissza. Ne feledje, hogy a szerverrel való párosításhoz nem kötelező a szolgáltatás és a jellemző UUID megléte, ez csak az Ön megértése érdekében történik.
bool connectToserver (BLEAddress pAddress) { BLEClient * pClient = BLEDevice:: createClient (); Serial.println ("- Létrehozott kliens"); // Csatlakozás a BLE szerverhez. pClient-> connect (pAddress); Serial.println ("- csatlakoztatva a fitnesz sávhoz"); // A távoli BLE-kiszolgálón szerezzen hivatkozást arra a szolgáltatásra, amely után vagyunk. BLERemoteService * pRemoteService = pClient-> getService (serviceUUID); if (pRemoteService! = nullptr) { Serial.println ("- Megtalálta szolgáltatásunkat"); return true; } else return false; // Szerezzen hivatkozást a karakterisztikára a távoli BLE szerver szolgáltatásában. pRemoteCharacteristic = pRemoteService->getCharacteristic (charUUID); if (pRemoteCharacteristic! = nullptr) Serial.println ("- Megtalálta a jellemzőnket"); return true; }
Ha a kapcsolat sikeres, a GPIO 13 tű magasra válik, és a vezérlés a hurokon kívülre kerül a break utasítás használatával. A párosított logikai változó szintén igazra van állítva.
if (connectToserver (* Szerver_BLE_cím)) { páros = igaz; Serial.println ("********************* LED bekapcsolt *********************** ** "); digitalWrite (13, HIGH); szünet; }
Miután a párosítás sikeres volt és a GPIO pin be van kapcsolva, ellenőriznünk kell, hogy az eszköz még mindig hatótávolságon belül van-e. Mivel most az eszköz párosítva van, a BLE szkennelési szolgáltatás már nem fogja tudni látni. Csak akkor találjuk meg újra, ha a felhasználó elhagyja a területet. Tehát egyszerűen ki kell keresnünk a BLE szervert, és ha felfedezzük, akkor alacsonyra kell állítanunk a GPIO pin-t, ahogy az alább látható
ha (Beolvasott_BLE_cím == Saját_BLE_cím && páros == igaz) { Soros. println ("Az eszközünk kívül esett a hatótávolságon"); páros = hamis; Sorozatszám. println ("********************* LED OOOFFFFF *************************"); digitalWrite (13, LOW); ESP. restart (); szünet; }
Munka és tesztelés
Miután elkészült a program és a hardver beállításával, egyszerűen töltse fel a kódot az ESP32-be, és rendezze a teljes beállítást az alábbiak szerint.
Észre kell vennie, hogy a lámpa bekapcsol, amint a fitnesz sáv (szerver) párosul az ESP32-vel. Ezt ellenőrizheti úgy is, hogy észreveszi a Bluetooth-kapcsolat szimbólumát a fitnesz sávon. A párosítás után próbáljon meg elsétálni az ESP32-től, és amikor átlép 3-4 métert, észreveszi, hogy az óra Bluetooth szimbóluma eltűnik, és a kapcsolat megszakad. Ha megnézi a lámpát, akkor kikapcsol. Amikor visszasétál, a készülék újra párosul, és a lámpa kigyullad. A projekt teljes kidolgozása az alábbi videóban található.
Remélem, hogy tetszett a projekt, és útközben valami újat tanult. Ha bármilyen problémával szembesültél a működésében, tedd fel nyugodtan a fórumon vagy akár az alábbi megjegyzés részben.