- Priekšnoteikumi
- Nepieciešamie materiāli
- Aparatūra
- Iegūstiet savu servera Bluetooth adresi (fitnesa joslas adresi)
- Servera pakalpojuma un raksturīgā UUID iegūšana
- ESP32 programmēšana darbam kā Proximity Switch lietojumprogrammas klientam
- Darbs un testēšana
Cik forši ir automātiski ieslēgt apgaismojumu, tiklīdz jūs ienākat savās mājās, un to atkal izslēgt, kad dodaties prom! Jā, vienkārša lietojumprogramma to var izdarīt jūsu vietā. Šajā projektā mēs izmantosim ESP32 kā BLE klientu un fitnesa joslu kā BLE serveri, tāpēc ikreiz, kad persona, kas valkā fitnesa joslu, nonāk ESP32 Bluetooth diapazonā, ESP32 to atklāj un ieslēdz Gaismu. Jebkuras Bluetooth ierīces, kurām ir BLE servera iespējas, var izmantot kā palaišanas ierīci, lai vadītu jebkuru mājas ierīci, izmantojot ESP32.
Mēs jau esam izpētījuši ESP32 moduļa BLE (Bluetooth Low Energy) funkcijas, un es par to esmu diezgan saviļņots. Atgādināšanai šajā modulī ir gan klasiskais Bluetooth, gan Bluetooth Low Energy (BLE), klasisko Bluetooth var izmantot dziesmu vai failu pārsūtīšanai, un opciju BLE var izmantot akumulatoram optimizētām lietojumprogrammām, piemēram, Bluetooth bākugunīm, fitnesa joslām, tuvuma utt. To ir iespējams arī izmantot kā sērijveida Bluetooth, piemēram, HC-05 vai HC-06 moduļus vienkāršiem mikrokontrolleru projektiem.
Kā jūs zināt, ESP32 BLE var darboties divos dažādos režīmos. Viens ir servera režīms, par kuru mēs jau esam runājuši, izmantojot GATT pakalpojumu, lai atdarinātu akumulatora līmeņa indikatora pakalpojumu. Šajā uzdevumā ESP32 darbojās kā serveris, un mūsu mobilais tālrunis darbojās kā klients. Tagad izmantosim ESP32 kā klientu un mēģiniet to savienot ar citiem BLE serveriem, piemēram, manu fitnesa joslu.
Visi BLE serveri, ieskaitot manu fitnesa joslu, pastāvīgi darbojas reklāmas režīmā, tas ir, tos vienmēr var atklāt, kad tos skenē klients. Izmantojot šo funkciju, mēs varam izmantot šīs fitnesa joslas kā tuvuma slēdzi, kas nozīmē, ka šīs fitnesa joslas vienmēr ir piesaistītas lietotāja rokai, un, meklējot joslu, mēs varam noteikt, vai persona atrodas diapazonā. Tas ir tieši tas, ko mēs darīsim šajā rakstā. Mēs ieprogrammēsim ESP32 darboties kā BLE klientam un pastāvīgi turpināsim meklēt BLE ierīces; ja atrodam fitnesa joslu diapazonā, mēģināsim tai pieslēgties un, ja savienojums būs veiksmīgs, mēs varēsim iedarbināt spuldzi, pārslēdzot vienu no ESP32 GPIO tapām. Metode ir uzticama, jo katrs BLE serveris(fitnesa joslai) būs unikāls aparatūras ID, tāpēc divas BLE servera ierīces nebūs identiskas. Interesanti vai ne? !!! Tagad sāksim celtniecību
Priekšnoteikumi
Šajā rakstā es pieņemu, ka jūs jau esat iepazinies ar to, kā izmantot ESP32 plāksni ar Arduino IDE, ja neatgriežaties pie darba sākšanas ar ESP32 apmācību.
Mēs esam sadalījuši visu ESP32 Bluetooth trīs segmentos, lai būtu vieglāk saprast. Tāpēc pirms sākat ar šo, ieteicams iziet pirmās divas apmācības.
- Sērijas Bluetooth uz ESP32 ieslēdzot LED no mobilā tālruņa
- BLE serveris nosūta akumulatora līmeņa datus uz mobilo tālruni, izmantojot GATT pakalpojumu
- BLE klientam, lai meklētu BLE ierīces un darbotos kā bāka.
Mēs jau esam apskatījuši pirmās divas apmācības, šeit mēs turpinām pēdējo, lai izskaidrotu ESP32 kā BLE klientu.
Nepieciešamie materiāli
- ESP32 attīstības padome
- Maiņstrāvas slodze (lampa)
- Releja modulis
Aparatūra
Šī ESP32 BLE klienta projekta aparatūra ir diezgan vienkārša, jo lielākā daļa burvju notiek kodā. Kad Bluetooth signāls tiek atklāts vai pazudis, ESP32 ir jāpārslēdz maiņstrāvas spuldze (slodze). Lai pārslēgtu šo slodzi, mēs izmantosim releju, un tā kā ESP32 GPIO tapas ir saderīgas tikai ar 3,3 V, mums ir nepieciešams releja modulis, kuru var darbināt ar 3,3 V. Vienkārši pārbaudiet, kāds tranzistors tiek izmantots releja modulī, ja tas ir BC548, jums ir labi pāriet uz citu, izveidojot savu ķēdi, ievērojot zemāk esošo shēmu.
Brīdinājums: ķēde attiecas uz tiešo 220 V maiņstrāvas tīkla spriegumu. Esiet piesardzīgs ar strāvas vadiem un pārliecinieties, ka neizveidojat īssavienojumu. Tu esi ticis brīdināts.
BC548 izmantošanas iemesls pār BC547 vai 2N2222 ir tāds, ka tiem ir zems bāzes izstarotāja spriegums, kuru var iedarbināt tikai ar 3,3 V. Šeit izmantotais relejs ir 5 V relejs, tāpēc mēs to darbinām ar Vin tapu, kas saņem 5 V no strāvas kabeļa. Zemējuma tapa ir savienota ar ķēdes zemi. Resistor R1 1K tiek izmantots kā bāzes strāvas ierobežotāju rezistors. Fāzes vads ir savienots ar releja NO kontaktu, bet releja kopējais tapa ir pievienots slodzei, un otrais kravas gals ir savienots ar neitrālu. Jūs varat apmainīt fāzes un neitrālās pozīcijas, taču uzmanieties, lai tās tieši nesaīsinātu. Strāvai vienmēr jāiet cauri slodzei (spuldzei).Esmu izmantojis Relay moduli, lai viss būtu vienkārši, un slodze šeit ir Focus LED lampa. Mana iestatīšana izskatās apmēram šādi
Ja vēlaties pagaidām izlaist aparatūru, varat izmantot GPIO 2 tapu, nevis GPIO 13 kontaktu, lai pārslēgtu iebūvēto LED uz ESP32. Šī metode ir ieteicama iesācējiem.
Iegūstiet savu servera Bluetooth adresi (fitnesa joslas adresi)
Kā teicām iepriekš, mēs ieprogrammēsim ESP32 darboties kā klientam (līdzīgi kā tālrunī) un izveidosim savienojumu ar serveri, kas ir mana fitnesa josla (Lenovo HW-01). Lai klients izveidotu savienojumu ar serveri, viņam jāzina servera Bluetooth adrese. Katram Bluetooth serverim, piemēram, manai fitnesa joslai, ir sava unikālā Bluetooth adrese, kas ir pastāvīga. To var saistīt ar klēpjdatora vai mobilā tālruņa MAC adresi.
Lai iegūtu šo adreses veidlapu, serveris mēs izmantojam lietojumprogrammu ar nosaukumu nRF connect no ziemeļvalstu pusvadītājiem, kurus mēs jau izmantojām iepriekšējā apmācībā. Tas ir pieejams bez maksas gan IOS, gan Android lietotājiem. Vienkārši lejupielādējiet, palaidiet programmu un meklējiet tuvumā esošās Bluetooth ierīces. Lietojumprogramma uzskaitīs visas atrastās BLE ierīces. Mine ir nosaukta HW-01, vienkārši meklējiet zem tā nosaukuma, un jūs atradīsit servera aparatūras adresi, kā parādīts zemāk.
Tātad manas fitnesa joslas aparatūras adrese ESP32 BLE ir C7: F0: 69: F0: 68: 81, jums būs atšķirīgs numuru kopums tajā pašā formātā. Vienkārši atzīmējiet to, jo tas mums būs vajadzīgs, kad programmēsim ESP32.
Servera pakalpojuma un raksturīgā UUID iegūšana
Labi, tagad mēs esam identificējuši mūsu serveri, izmantojot BLE adresi, taču, lai sazinātos ar to, mums ir jārunā pakalpojumu valodā un īpašībās, kuras jūs saprastu, ja būtu izlasījis iepriekšējo apmācību. Šajā apmācībā es izmantoju sava servera (fitnesa joslas) rakstīšanas raksturojumu, lai to savienotu pārī. Tāpēc, lai izveidotu savienojumu pārī ar ierīci, mums ir nepieciešams pakalpojuma reklāmas raksturojums UUID, ko mēs atkal varam iegūt ar to pašu lietojumprogrammu.
Vienkārši noklikšķiniet uz savienojuma pogas savā lietojumprogrammā un meklējiet dažus rakstīšanas parametrus, kur lietojumprogramma parādīs pakalpojuma UUID un raksturīgo UUID. Manējais ir parādīts zemāk
Šeit mans pakalpojuma UUID un raksturīgais UUID ir vienāds, taču tam nav jābūt vienādam. Pierakstiet sava servera UUID. Manējais tika atzīmēts kā
Pakalpojuma UUID: 0000fee7-0000-1000-8000-00805f9b34fb Raksturīgs UUID: 0000fee7-0000-1000-8000-00805f9b34fb
Rakstīšanas īpašības nav obligāti jāizmanto; jūs varat izmantot jebkuru derīgu servera un servera raksturīgo UUID, kas parādīts lietojumprogrammā.
ESP32 programmēšana darbam kā Proximity Switch lietojumprogrammas klientam
Programmas ideja ir panākt, lai ESP32 darbotos kā klients, kurš, meklējot mūsu serveri (fitnesa joslu), turpina meklēt Bluetooth ierīces, pārbauda aparatūras ID un pārslēdz gaismu caur GPIO tapu 13. Nu labi! !, bet ar to ir viena problēma. Visu BLE serveru darbības rādiuss būs 10 metri, kas ir mazliet par daudz. Tātad, ja mēs cenšamies padarīt tuvuma slēdzi, lai ieslēgtu atvērtu durvju gaismu, šis diapazons ir ļoti augsts.
Lai samazinātu BLE servera diapazonu, mēs varam izmantot savienošanas opciju. BLE serveris un klients paliks savienoti pārī tikai tad, ja abi atrodas 3-4 metru attālumā. Tas ir lieliski piemērots mūsu lietošanai. Tātad, mēs liekam ESP32 ne tikai atklāt BLE serveri, bet arī izveidot savienojumu ar to un pārliecināties, vai tas paliek pārī. Kamēr tie ir savienoti pārī, maiņstrāvas lampa paliks ieslēgta, kad diapazons pārsniedz pārī savienojumu, tiks zaudēts un lampa tiks izslēgta. Pilnīga ESP32 BLE piemēru programma, lai to izdarītu, ir dota šīs lapas beigās. Šeit zemāk es sadalīšu kodu mazos fragmentos un mēģināšu tos izskaidrot.
Pēc galvenes faila iekļaušanas mēs informējam ESP32 par BLE adresi, pakalpojumu un raksturīgo UUID, ko ieguvām, izmantojot nRF connect lietojumprogrammu, kā paskaidrots iepriekšējos virsrakstos. Kods izskatās šādi
statiskais BLEUUID serviceUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // fitnesa joslas pakalpojuma UUID, kas iegūts, izmantojot nRF connect lietojumprogrammas statisko BLEUUID charUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // Raksturīgais fitnesa joslas UUID, kas iegūts, izmantojot nRF connect lietojumprogrammu String My_BLE_Address = "c7: f0: 69: f0: 68: 81"; // Manas fitnesa joslas aparatūras Bluetooth MAC mainīsies katrai joslai, kas iegūta, izmantojot nRF connect programmu
Pēc tam programmā mums ir connectToserver un MyAdvertisedDeviceCallback, pie kuriem mēs atgriezīsimies vēlāk. Pēc tam iestatīšanas funkcijas iekšpusē mēs inicializējam sērijveida monitoru un izveidojam BLE ESP, lai meklētu ierīci. Pēc katras atklātās BLE ierīces skenēšanas tiek izsaukta funkcija MyAdvertisedDeviceCallbacks .
Mēs iespējojam arī aktīvo skenēšanu, jo ESP32 darbinām ar tīkla barošanu, lai samazinātu strāvas patēriņu, akumulatora lietošanai tā tiek izslēgta. Releja sprūda tapa ir pievienota GPIO 13 mūsu aparatūrā, tāpēc mēs arī paziņojam, ka GPIO tapa 13 ir izeja.
void setup () { Serial.begin (115200); // Sākt seriālo monitoru Serial.println ("ESP32 BLE Server programma"); // ievadziņa BLEDevice:: init (""); pBLEScan = BLEDevice:: getScan (); // izveidot jaunu skenēšanu pBLEScan-> setAdvertisedDeviceCallbacks (new MyAdvertisedDeviceCallbacks ()); // Izsauciet klasi, kas ir definēta iepriekš pBLEScan-> setActiveScan (true); // aktīvā skenēšana izmanto vairāk enerģijas, bet ātrāk iegūst rezultātus pinMode (13, OUTPUT); // Paziņot par izvadi iebūvēto LED tapu }
Funkcijas MyAdvertisedDeviceCallbacks iekšpusē mēs izdrukājam līniju, kurā būs norādīts atklāto BLE ierīču nosaukums un cita informācija. Mums ir nepieciešams atklātās BLE ierīces aparatūras ID, lai mēs varētu to salīdzināt ar vēlamo. Tāpēc mēs izmantojam mainīgo Server_BLE_Address, lai iegūtu ierīces adresi un pēc tam arī pārveidotu to no tipa BLEAddress uz virkni.
klase MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult (BLEAdvertisedDevice AdvertisedDevice) { Serial.printf ("Skenēšanas rezultāts:% s \ n", AdvertisedDevice.toString (). c_str ()); Server_BLE_Address = jauna BLEAddress (reklamētāDevice.getAddress ()); Scaned_BLE_Address = Server_BLE_Address-> toString (). C_str (); } };
Cilpas funkcijas iekšpusē mēs skenējam 3 sekundes un rezultātu ievietojam foundDevices iekšpusē, kas ir objekts no BLEScanResults. Ja skenējot atrodam vienu vai vairākas ierīces, mēs sākam pārbaudīt, vai atklātā BLE adrese atbilst tai, kuru ievadījām programmā. Ja atbilstība ir pozitīva un ierīce nav savienota pārī agrāk, mēs mēģinām to savienot, izmantojot funkciju connectToserver. Mēs arī esam izmantojuši dažus sērijas paziņojumus izpratnes nolūkos.
while (foundDevices.getCount ()> = 1) { if (Scaned_BLE_Address == My_BLE_Address && paired == false) { Serial.println ("Atrasta ierīce: -)… savienojums ar serveri kā klients"); ja (connectToserver (* Server_BLE_adrese)) {
Funkcijas connectToserver iekšpusē mēs izmantojam UUID, lai savienotu pārī ar BLE serveri (fitnesa joslu). Lai izveidotu savienojumu ar serveri, ESP32 ir jārīkojas kā klientam, tāpēc mēs izveidojam klientu, izmantojot funkciju createClient (), un pēc tam izveidojam savienojumu ar BLE servera adresi. Pēc tam mēs meklējam pakalpojumu un raksturlielumu, izmantojot UUID vērtības, un mēģinām tam izveidot savienojumu. Kad savienojums ir veiksmīgs, funkcija atgriež patiesu un, ja nē, atgriež nepatiesu. Ņemiet vērā, ka pārī ar serveri nav obligāti jābūt pakalpojumam un raksturīgajam UUID, tas tiek darīts tikai jūsu izpratnes labad.
bool connectToserver (BLEAddress pAddress) { BLEClient * pClient = BLEDevice:: createClient (); Serial.println ("- izveidots klients"); // Savienojuma izveide ar BLE serveri. pClient-> savienot (pAddress); Serial.println ("- savienots ar fitnesa joslu"); // Iegūstiet atsauci uz pakalpojumu, kuru meklējam attālajā BLE serverī. BLERemoteService * pRemoteService = pClient-> getService (serviceUUID); if (pRemoteService! = nullptr) { Serial.println ("- Atrasts mūsu pakalpojums"); atgriezties taisnība; } else return false; // Iegūstiet atsauci uz raksturojumu attālā BLE servera pakalpojumā. pRemoteCharacteristic = pRemoteService->getCharacteristic (charUUID); if (pRemoteCharacteristic! = nullptr) Serial.println ("- Atrasts mūsu raksturojums"); atgriezties taisnība; }
Ja savienojums ir veiksmīgs, GPIO 13. kontakts ir izveidots augsts un vadība tiek nosūtīta ārpus cilpas, izmantojot pārtraukuma paziņojumu. Pārī savienotais Būla mainīgais ir iestatīts arī kā patiess.
if (connectToserver (* Server_BLE_adrese)) { pārī = patiess; Serial.println ("********************* LED ir ieslēgts *********************** ** "); digitalWrite (13, HIGH); pārtraukums; }
Pēc tam, kad savienošana pārī ir veiksmīga un GPIO tapa ir ieslēgta, mums jāpārbauda, vai ierīce joprojām ir diapazonā. Tā kā tagad ierīce ir savienota pārī, BLE skenēšanas pakalpojums to vairs nevarēs redzēt. Mēs to atkal atradīsim tikai tad, kad lietotājs atstās teritoriju. Tāpēc mums vienkārši ir jāmeklē BLE serveris, un, ja mēs atklājam, mums GPIO tapa ir jānosaka uz zemu, kā parādīts zemāk
ja (Scaned_BLE_Address == My_BLE_Address && paired == true) { Seriāls. println ("Mūsu ierīce izgāja ārpus diapazona"); pārī = nepatiesa; Seriāls. println ("********************* LED OOOFFFFF *************************"); digitalWrite (13, LOW); ESP. Restart (); pārtraukums; }
Darbs un testēšana
Kad esat gatavs izmantot programmu un aparatūras iestatījumus, vienkārši augšupielādējiet kodu ESP32 un sakārtojiet visu iestatīšanu, kā parādīts zemāk.
Jums vajadzētu pamanīt, ka lampa tiek ieslēgta, tiklīdz fitnesa josla (serveris) savienojas pārī ar ESP32. To var arī pārbaudīt, fitnesa joslā pamanot savienojuma Bluetooth simbolu. Kad esat savienots pārī, mēģiniet iet prom no ESP32 un, šķērsojot 3-4 metrus, pamanīsit, ka pulkstenī pazūd Bluetooth simbols un savienojums tiek zaudēts. Tagad, ja paskatās uz lampu, tā tiks izslēgta. Kad atgriezīsities atpakaļ, ierīce atkal tiks savienota pārī un iedegsies gaisma. Pilnīga projekta darbība ir atrodama zemāk esošajā video.
Ceru, ka jums patika projekts un ceļā uzzinājāt kaut ko jaunu. Ja esat saskāries ar kādu problēmu, lai tas darbotos, droši publicējiet problēmu forumos vai pat zemāk esošajā komentāru sadaļā