- Tarvittavat komponentit
- NRF Connect Android -sovelluksen käyttö ESP32 iBeaconille
- ESP32: n ohjelmointi toimimaan BLE iBeaconina
ESP32 on todella tehokas IoT-laite, jolla on sisäänrakennettu Bluetooth- ja WiFi-tuki. ESP32 on edeltäjänsä ESP8266 edistyksellinen versio, jossa on lisäominaisuuksia, kuten RAM, ROM, GPIO-nastat jne. ESP32-moduuli tukee sekä klassista Bluetoothia että Bluetooth Low Energy (BLE) -tekniikkaa, klassista Bluetoothia voidaan käyttää kappaleiden tai tiedostojen siirtämiseen ja BLE vaihtoehtoa voidaan käyttää akulle optimoituihin sovelluksiin, kuten Bluetooth-majakat, kuntokaistat, läheisyydet jne. On myös mahdollista käyttää ESP32: ta sarjaliitäntänä Bluetoothina, kuten HC-05 tai HC-06 -moduuleina yksinkertaisissa mikro-ohjainprojekteissa.
Kuten tiedämme, BLE voi toimia kahdessa eri tilassa - palvelintilassa ja asiakastilassa. Molemmista tiloista on keskusteltu edellisissä ESP32-oppaissa:
- ESP32 BLE -palvelin - GATT-palvelu akun varaustason osoittamiseen
- ESP32 BLE Client - Yhdistäminen Fitness Bandiin polttimon laukaisemiseksi
Tässä opetusohjelmassa rakennamme BLE iBeaconin käyttämällä ESP32: ta, jossa ESP32 toimii palvelimena ja älypuhelin toimii asiakkaana. Oletan, että olet jo perehtynyt ESP32-kortin käyttämiseen Arduino IDE: n kanssa, ellei palaa takaisin ESP32-opetusohjelman aloittamiseen.
Voit myös tietää enemmän siitä, mikä on Beacon / iBeacon Technology, käymällä läpi aiemmat Bluetooth iBeacon -projektimme Raspberry Pi- ja HM-10 BLE iBeacon -tekniikoilla.
Tarvittavat komponentit
Laitteisto:
- ESP32-kehitystoimikunta
- Mikro-USB-kaapeli
Ohjelmisto:
- Arduino IDE
- Android-sovellus: nRF Connect for Mobile (By Nordic Semiconductor)
BLE-skannerisovelluksia on monia, joista yhtä olemme käyttäneet edellisessä projektissamme How to HM-10 BLE Module with Arduino. Tämä BLE-skannerisovellus tarjoaa hyvän graafisen käyttöliittymän (GUI), mutta siitä puuttuu lisätietoja, joten tässä projektissa käytämme NRF Connect for Mobile -sovellusta.
NRF Connect Android -sovelluksen käyttö ESP32 iBeaconille
1. Lataa nRF Connect -sovellus Google Play Kaupasta ja avaa se.
2. Näyttö näyttää alla olevalta. Hyödyllisiä vaihtoehtoja tälle projektille ovat 'Skannaus', 'Skanneri' ja 'Info', kun laitteet löydetään.
'Scan' vaihtoehto on totuttu näkemään kaikki saatavilla iBeacons. Aloita iBeaconin etsiminen joko vetämällä näyttö alas tai siirtymällä näytön oikeassa yläkulmassa olevaan 'Skannaus' -vaihtoehtoon. Tämä alkaa etsiä käytettävissä olevia iBeaconeja.
3. Kun olet etsinyt iBeaconia, näet iBeaconin RSSI: n, UUID: n, Majorin ja Minoriin. RSSI muuttuu, jos otat matkapuhelimen tai iBeaconin pois toisiltaan. Tässä tässä näytössä RSSI on (-37). Tämän lisäksi on joitain yksityiskohtia, kuten Dummy-yrityksen nimi, laitetyyppi, tavujen pituus, ESP32: n paikallinen nimi. Tässä se on “ ESP32 as iBeacon ”. Voit muuttaa paikallista nimeä luonnoksessa.
4. Kun älypuhelin on otettu pois iBeaconilta, RSSI-arvo muuttuu arvosta -37 arvoon -58. Nämä arvot muuttuvat jatkuvasti, jos siirrät yhtä laitetta.
RSSI-signaalin hyväksyttävät arvot ovat seuraavat:
Signaalin voimakkuus | TL; DR | Vaaditaan | |
---|---|---|---|
-30 dBm | Hämmästyttävä | Suurin saavutettavissa oleva signaalin voimakkuus. Tämän saavuttamiseksi asiakas voi olla vain muutaman metrin päässä tukiasemasta. Ei tyypillistä tai toivottavaa todellisessa maailmassa. | N / A |
-67 dBm | Oikein hyvä | Pienin signaalinvoimakkuus sovelluksille, jotka edellyttävät erittäin luotettavaa, oikea-aikaista datapakettien toimitusta. | VoIP / VoWiFi, suoratoistovideo |
-70 dBm | Okei | Pienin signaalinvoimakkuus luotettavaan pakettien toimitukseen. | Sähköposti, verkko |
-80 dBm | Ei hyvä | Pienin signaalin voimakkuus perusyhteyttä varten. Pakettien toimitus voi olla epäluotettavaa. | N / A |
-90 dBm | Ei käytettävissä | Lähestyminen tai hukkuminen melulattiaan. Kaikki toiminnot ovat erittäin epätodennäköisiä. | N / A |
ESP32: n ohjelmointi toimimaan BLE iBeaconina
ESP32 BLE iBeacon -ohjelmaohjelma on käytettävissä, kun asennat ESP32-kortin Arduino IDE -ohjelmaan. Mutta olemme hieman muokanneet tätä luonnosta tässä opetusohjelmassa, esimerkkiohjelman täydellinen muokattu versio on tämän opetusohjelman lopussa.
Avaa ESP32 BLE_iBeacon -esimerkkiohjelma noudattamalla alla olevia vaiheita.
- Avaa Arduino IDE ja valitse “ESP32 Dev Module”. (Jos et löydä tätä korttia, tarkista, oletko asentanut ESP32-korttipaketin)
- Valitse Tiedosto > Esimerkit > ESP32 BLE Arduino > BLE_iBeacon
- Avaa BLE_iBeacon-luonnos.
Nyt tässä opetusohjelmassa tehdyssä koodissa on pieni muutos. ESP32-nimi päivitetään myös tässä luonnoksessa. Joten aloita sisällyttämällä tarvittavat kirjastot, joita käytetään luomaan BLE-palvelinta ja iBeaconia.
#include "sys / time.h"
Tämä on aikakirjasto nykyisen järjestelmäajan saamiseksi. Tämä sisältää toimintoja, kuten tv_sec, gettimeofday () jne. Lisätietoja saat käymällä virallisessa UNIX-julkaisussa ' sys / time.h'.
Sitten sisällytetään ESP32 BLE -kirjastot, jotka sisältävät monia toimintoja, joita käytetään ESP32: n valmistamiseen eri kokoonpanoissa, kuten BLE Client tai BLE Server.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
Mukana on iBeacon-kirjasto, joka asettaa ESP32: n iBeaconiksi. Tämän lisäksi syvän unen kirjasto sisältyy ESP32: een. Kirjastoa käytetään lähettämään ESP32 syvä lepotilassa määritetyn ajan.
#include "BLEBeacon.h" #include "esp_sleep.h"
Määritä ESP32: n unen kesto. Täällä ESP32 on syväunessa 10 sekunnin ajan, ja se mainostaa ja menee sitten taas syväuneen 10 sekunniksi.
#define GPIO_DEEP_SLEEP_DURATION 10
Tässä määritetään RTC_DATA_ATTR. Huomaa, että jos määrität globaalin muuttujan attribuutilla RTC_DATA_ATTR, muuttuja sijoitetaan RTC_SLOW_MEM-muistiin. Joten rakenne, joka on ilmoitettu nimellä RTC_DATA_ATTR, ja dynaamisen muistin kopioiminen tähän rakenteeseen ennen syvää unta auttaa palauttamaan sen dynaamiseen muistiin heräämisen jälkeen. Yksinkertaisesti sanottuna säästämme staattisessa muistissa olevaa aikaa dynaamisesta muistista sen palauttamiseksi uudelleen syvän unen jälkeen. Tässä määritellään kaksi muuttujaa. ' Viimeistä ' käytetään saamaan viimeinen kerta, kun ESP32 siirtyi syvään lepotilaan, ja käynnistyslukua käytetään palautusten lukumääränä.
RTC_DATA_ATTR staattinen aika_t viimeinen; RTC_DATA_ATTR staattinen uint32_t-käynnistysluku;
Sitten määritellä BLE Mainonta Type. Määritelmä tehdään seuraavasti.
BLEMainonta * pMainonta;
Timeval on määritelty rakenne käyttää kellonajan.
strukturointiaika nyt;
Myös UUID on määritelty. UUID: t voidaan luoda tästä linkistä .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Luo nyt toiminto, joka sisältää iBeacon-määritteet, kuten UUID, Major, Minor jne. Tässä toiminnossa luo BLE-ilmentymä iBeaconina ja aseta ESP32: lle väärennetty valmistajan tunnus, UUID, major ja minor iBeaconiksi.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((käynnistysluku & 0xFFFF0000) >> 16); oBeacon.setMinor (käynnistysluku & 0xFFFF);
Aseta lipuksi 0x04, jotta se tuottaa BrEdrNotSupported- skannerin.
oData.setFlags (0x04);
Aseta mainostiedot julkaisua varten.
vakio:: merkkijono strServiceData = "";
Lisää merkkijono peräkkäin mainostaaksesi.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Kirjoita strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Aloita mainonta julkaisemalla tietoja.
pMainonta-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Aloita sarjamonitori 115200 baudinopeudella ja hanki aika. Lisää myös käynnistyslukua, jotta voit tallentaa palautusten määrän.
Sarjan alku (115200); gettimeofday (& nyt, NULL); Serial.printf ("käynnistä ESP32% d \ n", käynnistysmäärä ++);
Tallenna nykyinen aika staattiseen muistiin.
last = now.tv_sec;
Luo BLE-laite ja nimeä se haluamallasi tavalla. Tässä ESP32 on nimetty nimellä " ESP2 as iBeacon ". Huomaa, että nimet voivat olla pitkiä, mutta tämä koodiversio on alkanut tukea pitkiä nimiä.
BLEDevice:: init ("ESP32 kuin iBeacon");
Luo BLE-palvelin mainostamista ja aloittamista varten.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Aseta sitten ESP32 iBeacon-tilaan.
setBeacon ();
Aloita mainonta ja lopeta mainonta ja mene syvään nukkumaan 10 sekunniksi.
pMainonta-> alku (); pMainonta-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Liitä lopuksi ESP32-kehityskortti kannettavaan tietokoneeseen mikro-USB-kaapelilla ja lataa koodi ESP32: een Arduino IDE: llä. Avaa sitten nRF Connect Android -sovellus älypuhelimellasi ja aloita skannaus. Löydät ESP32: n iBeacon- lähetyksenä alla olevan kuvan mukaisesti:
Näin ESP32: ta voidaan käyttää BLE Beaconina UUID: n, Majorin ja Minorin mainostamiseen. Jos haluat tietää enemmän iBeaconista, noudata edellistä opetusohjelmaa HM10: stä iBeaconina. Myös jos sinulla on epäilyksiä, kommentoi alla tai kysy kysymyksiä foorumeilla.
Täydellinen koodi toimivalla videolla on annettu alla.
/>