- Edellytykset
- Tarvittavat materiaalit
- Laitteisto
- Hanki palvelimesi Bluetooth-osoite (kuntokaistan osoite)
- Palvelimen palvelun ja ominaisuuden UUID hankinta
- ESP32: n ohjelmointi toimimaan asiakkaana Proximity Switch -sovelluksessa
- Työskentely ja testaus
Kuinka hienoa onkin sytyttää valot automaattisesti heti, kun astut sisään kotiisi, ja sammuttaa se uudelleen, kun lähdet! Kyllä, yksinkertainen sovellus voi tehdä tämän puolestasi. Tässä projektissa käytämme ESP32: ta BLE-asiakkaana ja kuntokaistaa BLE-palvelimena, joten aina kun kuntokaistaa käyttävä henkilö tulee ESP32 Bluetoothin alueelle, ESP32 havaitsee sen ja sytyttää valon. Kaikkia Bluetooth-laitteita, joilla on BLE-palvelinominaisuuksia, voidaan käyttää laukaisulaitteena minkä tahansa kodinkoneen ohjaamiseen ESP32: n avulla.
Olemme jo tutkineet ESP32-moduulin BLE (Bluetooth Low Energy) -toiminnot ja olen siitä todella innostunut. Yhteenvetona voidaan todeta, että tässä moduulissa on sekä klassinen Bluetooth että Bluetooth Low Energy (BLE), klassista Bluetoothia voidaan käyttää kappaleiden tai tiedostojen siirtämiseen ja BLE-vaihtoehtoa voidaan käyttää akulle optimoituihin sovelluksiin, kuten Bluetooth-majakat, kuntokaistat, läheisyys s jne. On myös mahdollista käyttää sitä sarjaliitäntänä Bluetoothina, kuten HC-05 tai HC-06 moduuleina, yksinkertaisissa mikrokontrolleriprojekteissa.
Kuten tiedät, ESP32 BLE voi toimia kahdessa eri tilassa. Yksi on palvelintila, josta olemme jo keskustelleet käyttämällä GATT-palvelua jäljittelemään akun varaustason osoitinpalvelua. Tässä harjoituksessa ESP32 toimi palvelimena ja matkapuhelimemme toimi asiakkaana. Anna nyt käyttää ESP32: tä asiakkaana ja yrittää yhdistää se muihin BLE-palvelimiin, kuten kuntobändini.
Kaikki BLE-palvelimet, myös kuntobändini, ovat jatkuvassa mainostilassa, eli ne voidaan aina löytää, kun asiakas skannaa ne. Hyödyntämällä tätä ominaisuutta voimme käyttää näitä kuntokaistoja lähestymiskytkimenä, mikä tarkoittaa, että nämä kuntokaistat on aina sidottu käyttäjän käteen ja etsimällä taajuusaluetta voimme havaita, onko henkilö kantaman sisällä. Juuri tämän aiomme tehdä tässä artikkelissa. Tulemme ohjelmoida ESP32 toimimaan BLE asiakkaan ja jatkuvasti pitää varpaillaan BLE laitteiden jos löydämme kuntokaistan alueelta, yritämme muodostaa yhteyden siihen ja jos yhteys onnistuu, voimme laukaista hehkulampun vaihtamalla yhtä ESP32: n GPIO-nastoista. Menetelmä on luotettava, koska kukin BLE-palvelin(kuntokaistalla) on yksilöllinen laitteistotunnus, joten kahta BLE-palvelinlaitetta ei ole identtinen. Mielenkiintoista, eikö? !!! Rakennetaan nyt
Edellytykset
Oletan tässä artikkelissa, että olet jo perehtynyt ESP32-kortin käyttämiseen Arduino IDE: n kanssa, ellei palata aloittaa ESP32-opetusohjelman kanssa.
Olemme jakaneet täydellisen ESP32 Bluetoothin kolmeen osaan ymmärtämisen helpottamiseksi. Joten on suositeltavaa käydä läpi kaksi ensimmäistä opetusohjelmaa ennen kuin aloitat tämän.
- Sarja-Bluetooth ESP32: ssä, joka vaihtaa LEDiä matkapuhelimesta
- BLE-palvelin lähettää akun varaustiedot matkapuhelimeen GATT-palvelun avulla
- BLE-asiakas etsii BLE-laitteita ja toimii majakkana.
Olemme jo käsitelleet kaksi ensimmäistä opetusohjelmaa, tässä jatkamme viimeistä selittämään ESP32: ta BLE-asiakkaana.
Tarvittavat materiaalit
- ESP32-kehitystoimikunta
- AC-kuorma (lamppu)
- Releyksikkö
Laitteisto
Tämän ESP32 BLE Client -projektin laitteisto on melko yksinkertainen, koska suurin osa taikuudesta tapahtuu koodin sisällä. ESP32: n on vaihdettava vaihtovirtalamppu (lataus), kun Bluetooth-signaali havaitaan tai katoaa. Tämän kuorman vaihtamiseksi käytämme relettä, ja koska ESP32: n GPIO-nastat ovat vain 3,3 V: n yhteensopivia, tarvitsemme relemoduulin, jota voidaan ohjata 3,3 V: lla. Tarkista vain mitä transistoria käytetään relemoduulissa, jos se on BC548, joten voit itse rakentaa oman piirisi seuraamalla alla olevaa piirikaaviota.
Varoitus: Piiri käsittelee suoraa 220 V AC-verkkojännitettä. Ole varovainen jännitteisten johtojen kanssa ja varmista, että et aiheuta oikosulkua. Sinua on varoitettu.
Syy BC548: n käyttöön BC547: n tai 2N2222: n takana on, että niillä on pieni emitterijännite, joka voidaan laukaista vain 3,3 V: lla. Tässä käytetty rele on 5 V: n rele, joten virtalähteenä on Vin-nasta, joka saa 5 V: n virtakaapelista. Maadoitustappi on kytketty piirin maahan. Vastusta R1 1K käytetään perusvirranrajoittimen vastuksena. Vaihejohto on kytketty releen NO-napaan ja releen yhteinen tappi on kytketty kuormaan ja kuorman toinen pää on kytketty neutraaliin. Voit vaihtaa vaiheen ja neutraalin sijainnin, mutta varo, ettet lyhennä niitä suoraan. Virran tulee aina kulkea kuorman (polttimo) läpi.Olen käyttänyt Relay-moduulia pitämään asiat yksinkertaisina ja kuormitus on Focus LED-lamppu. Oma kokoonpano näyttää tältä alla
Jos haluat ohittaa laitteiston toistaiseksi, voit vaihtaa ESP32: n sisäisen LEDin GPIO 2-nastalla GPIO 13-nastan sijaan. Tätä menetelmää suositellaan aloittelijoille.
Hanki palvelimesi Bluetooth-osoite (kuntokaistan osoite)
Kuten aiemmin kerrottiin, aiomme ohjelmoida ESP32: n toimimaan asiakkaana (samanlainen kuin puhelin) ja muodostamaan yhteyden palvelimeen, joka on kuntokaistani (Lenovo HW-01). Jotta asiakas voi muodostaa yhteyden palvelimeen, sen on tiedettävä palvelimen Bluetooth-osoite. Jokaisella Bluetooth-palvelimella, kuten täällä olevalla kuntobändilläni, on oma ainutlaatuinen pysyvä Bluetooth-osoite. Voit liittää tämän kannettavan tietokoneen tai matkapuhelimesi MAC-osoitteeseen.
Tämän osoitemuodon saamiseksi palvelimelle käytämme nRF connect -sovellusta pohjoismaisista puolijohteista, joita käytimme jo edellisessä opetusohjelmassa. Se on saatavilla ilmaiseksi sekä IOS- että Android-käyttäjille. Lataa vain, käynnistä sovellus ja etsi lähellä olevat Bluetooth-laitteet. Sovellus luetteloi kaikki löytämänsä BLE-laitteet. Kaivos on nimeltään HW-01, katso yksinkertaisesti sen nimen alapuolelta ja löydät palvelimen laitteisto-osoitteen alla olevan kuvan mukaisesti.
Joten kuntoalueen ESP32 BLE -laitteisto-osoite on C7: F0: 69: F0: 68: 81, sinulla on eri joukko numeroita samassa muodossa. Tee vain muistiinpano siitä, koska tarvitsemme, kun ohjelmoimme ESP32: n.
Palvelimen palvelun ja ominaisuuden UUID hankinta
Okei, nyt olemme tunnistaneet palvelimemme käyttämällä BLE-osoitetta, mutta kommunikoida sen kanssa meidän on puhuttava palvelun kieltä ja ominaisuuksia, jotka ymmärrät, jos olisit lukenut edellisen opetusohjelman. Tässä opetusohjelmassa käytän palvelimen (kuntokaistan) kirjoitusominaisuuksia pariksi sen kanssa. Joten laiteparin muodostamiseen tarvitaan palvelumainoksen ominaisuus UUID, jonka voimme jälleen saada samalla sovelluksella.
Napsauta vain sovelluksen Yhdistä-painiketta ja etsi joitain kirjoitusominaisuuksia, joissa sovellus näyttää palvelun UUID ja ominaisuus UUID. Kaivos on esitetty alla
Tässä palvelun UUID ja ominaisuus UUID ovat samat, mutta sen ei tarvitse olla sama. Merkitse muistiin palvelimesi UUID. Minun huomattiin olevan
Palvelu UUID: 0000fee7-0000-1000-8000-00805f9b34fb Ominaisuus UUID: 0000fee7-0000-1000-8000-00805f9b34fb
Kirjoitusominaisuuksien käyttö ei ole pakollista; voit käyttää mitä tahansa sovelluksessa näkyvää kelvollista palvelua ja palvelimen ominaisuus UUID: tä.
ESP32: n ohjelmointi toimimaan asiakkaana Proximity Switch -sovelluksessa
Ohjelman idea on saada ESP32 toimimaan asiakkaana, joka etsii jatkuvasti Bluetooth-laitteita, kun se löytää palvelimemme (kuntokaistan), se tarkistaa laitteistotunnuksen ja vaihtaa valoa GPIO-nastan 13 kautta. No ok! !, mutta siinä on yksi ongelma. Kaikkien BLE-palvelimien kantama on 10 metriä, mikä on vähän liikaa. Joten jos yritämme tehdä lähestymiskytkimen sytyttääksesi oven avaamisen, tämä alue on erittäin korkea.
BLE-palvelimen kantaman pienentämiseksi voimme käyttää pariliitosvaihtoehtoa. BLE-palvelin ja asiakas pysyvät pariksi vain, jos molemmat ovat 3-4 metrin etäisyydellä. Se on täydellinen sovelluksemme. Joten teemme ESP32: n paitsi BLE-palvelimen löytämiseksi myös yhteyden muodostamiseksi siihen ja varmistaaksemme, että se pysyy pariksi. Niin kauan kuin pariliitos on kytketty, AC-merkkivalo palaa, kun etäisyys ylittää pariliitoksen, menetetään ja lamppu sammutetaan. Täydellinen ESP32 BLE esimerkkiohjelma tekemään samoin annetaan lopussa tämän sivun. Tämän alla jaon koodin pieniksi katkelmiksi ja yritän selittää ne.
Kun olet lisännyt otsikkotiedoston, ilmoitamme ESP32: lle BLE-osoitteen, palvelun ja ominaisuuden UUID, jonka saimme nRF connect -sovelluksella, kuten yllä olevissa otsikoissa selitetään. Koodi näyttää alla olevalta
staattinen BLEUUID serviceUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // Service UUID fitnessband saatu NRF Connect -sovelluksen staattinen BLEUUID charUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // Tyypillinen UUID fitnessband saatu Nrf connect hakemus String My_BLE_Address = "C7: f0: 69: f0: 68: 81"; // Laitteisto Bluetooth MAC minun fitnessband , vaihtelevat jokaisen kaistan saadaan NRF Connect -sovelluksen
Sen jälkeen ohjelmassa meillä on connectToserver ja MyAdvertisedDeviceCallback, joihin palataan myöhemmin. Sitten sisälle asennuksen toiminto, me alustaa Serial Monitor ja tehdä BLE ESP skannata laitteelle. Kun tarkistus on suoritettu jokaiselle löydetylle BLE-laitteelle, kutsutaan toimintoa MyAdvertisedDeviceCallbacks .
Otamme myös käyttöön aktiivisen tarkistuksen, koska virtalähteenä ESP32 on verkkovirta. Akkusovellukselle se on pois päältä virrankulutuksen vähentämiseksi. Relay-liipaisintappi on kytketty laitteistomme GPIO 13: een, joten ilmoitamme myös, että GPIO-nasta 13 on lähtö.
void setup () { Sarja.alku (115200); // Käynnistä sarjamonitori Serial.println ("ESP32 BLE Server -ohjelma"); // Johdanto BLEDevice:: init (""); pBLEScan = BLEDevice:: getScan (); // luo uusi tarkistus pBLEScan-> setAdvertisedDeviceCallbacks (uusi MyAdvertisedDeviceCallbacks ()); // Kutsu edellä määritelty luokka pBLEScan-> setActiveScan (true); // aktiivinen tarkistus käyttää enemmän virtaa, mutta saa tuloksia nopeammin pinMode (13, OUTPUT); // Ilmoita sisäänrakennettu LED-tappi lähdöksi }
Tulostamme MyAdvertisedDeviceCallbacks- toiminnon sisällä rivin, jossa luetellaan löydettyjen BLE-laitteiden nimet ja muut tiedot. Tarvitsemme löydetyn BLE-laitteen laitteistotunnuksen, jotta voimme verrata sitä haluttuun laitteeseen. Joten käytämme muuttujaa Server_BLE_Address saadaksesi laitteen osoitteen ja sitten myös muuntaa sen tyypistä BLEAddress merkkijonoksi.
luokka MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult (BLEAdvertisedDevice AdvertisedDevice) { Serial.printf ("Skannaustulos:% s \ n", advertisedDevice.toString (). c_str ()); Server_BLE_Address = uusi BLEAddress (advertisedDevice.getAddress ()); Scaned_BLE_Address = Palvelimen_BLE_Address-> toString (). C_str (); } };
Silmukkafunktion sisällä skannataan 3 sekunnin ajan ja laitamme tuloksen löydettyjen laitteiden sisälle, joka on BLEScanResults-objekti. Jos löydämme yhden tai useamman laitteen skannaamalla, alamme tarkistaa, vastaako löydetty BLE-osoite ohjelmassa kirjoittamaamme osoitetta. Jos ottelu on positiivinen ja laitetta ei ole paritettu aikaisemmin, yritämme parittaa sen kanssa connectToserver-toiminnolla. Olemme myös käyttäneet muutamia sarjalausekkeita ymmärryksen tarkoitukseen.
while (foundDevices.getCount ()> = 1) { if (Skannattu_BLE_osoite == Oma_BLE_osoite && pariksi == väärä) { Serial.println ("Löydetty laite: -)… yhdistetään palvelimeen asiakasohjelmana"); if (connectToserver (* Palvelimen_BLE_osoite)) {
Sisällä connectToserver toiminnoksi käyttää UUID parin BLE palvelimen (harjoitusnauha). Yhteyden muodostamiseksi palvelimeen ESP32: n on toimittava asiakkaana, joten luomme asiakkaan käyttämällä createClient () -toimintoa ja muodostamme sitten yhteyden BLE-palvelimen osoitteeseen. Sitten etsimme palvelua ja ominaisuutta UUID-arvojen avulla ja yritämme muodostaa yhteyden siihen. Kun yhteys on onnistunut, funktio palauttaa tosi ja jos ei, se palauttaa epätosi. Huomaa, että palvelun ja ominaisuus-UUID: n ei ole pakollista muodostaa laiteparia palvelimen kanssa, se tehdään vain ymmärryksesi vuoksi.
bool connectToserver (BLEAddress pAddress) { BLEClient * pClient = BLEDevice:: createClient (); Serial.println ("- Luotu asiakas"); // Yhdistä BLE-palvelimeen. pClient-> connect (pAddress); Serial.println ("- Yhdistetty kuntokeskukseen"); // Hanki viittaus palveluun, jota seuraamme BLE-etäpalvelimessa. BLERemoteService * pRemoteService = pClient-> getService (serviceUUID); if (pRemoteService! = nullptr) { Serial.println ("- Löysimme palvelumme"); palaa tosi; } else return false; // Hanki viite BLE-etäpalvelimen palvelun ominaisuuteen. pRemoteCharacteristic = pRemoteService->getCharacteristic (charUUID); if (pRemoteCharacteristic! = nullptr) Serial.println ("- Löysimme ominaisuutemme"); palaa tosi; }
Jos yhteys onnistuu, GPIO-nasta 13 tehdään korkeaksi ja ohjaus lähetetään silmukan ulkopuolelle katkoslausekkeen avulla. Pariliitetty Boolen-muuttuja asetetaan myös totta.
if (connectToserver (* Palvelimen_BLE_osoite)) { pariksi = tosi; Serial.println ("********************* LED palaa ** "); digitalWrite (13, HIGH); tauko; }
Kun pariliitos on onnistunut ja GPIO-nasta on kytketty päälle, meidän on tarkistettava, onko laite edelleen kantama-alueella. Koska nyt laite on pariliitetty, BLE-skannauspalvelu ei enää näe sitä. Löydämme sen uudelleen vasta, kun käyttäjä lähtee alueelta. Joten meidän on yksinkertaisesti etsittävä ulos BLE-palvelin ja jos havaitsemme, meidän on asetettava GPIO-nasta matalalle, kuten alla on esitetty
jos (Skannattu_BLE_osoite == Oma_BLE_osoite && pariksi == tosi) { Sarja. println ("Laitteemme meni kantaman ulkopuolelle"); pariksi = väärä; Sarja. println ("********************* LED OOOFFFFF *************************"); digitalWrite (13, LOW); ESP. Uudelleenkäynnistys (); tauko; }
Työskentely ja testaus
Kun olet valmis ohjelman ja laitteistokokoonpanon kanssa, lataa koodi ESP32: een ja järjestä koko kokoonpano alla olevan kuvan mukaisesti.
Huomaa, että lamppu syttyy heti kun kuntokaista (palvelin) muodostaa parin ESP32: n kanssa. Voit myös tarkistaa tämän huomaamalla Bluetooth-yhteyden symbolin kuntokaistalla. Kun olet muodostanut pariliitoksen, yritä kävellä pois ESP32: sta ja ylittäessäsi 3-4 metriä huomaat, että kellon Bluetooth-symboli katoaa ja yhteys katkeaa. Jos katsot lamppua, se sammuu. Kun kävelet takaisin sisään, laite muodostaa pariliitoksen uudelleen ja valo syttyy. Projektin täydellinen toiminta löytyy alla olevasta videosta.
Toivottavasti pidit projektista ja opit jotain uutta matkalla. Jos sinulla on ollut ongelmia saada se toimimaan, voit lähettää ongelman foorumeille tai jopa alla olevaan kommenttiosioon