- Būtini komponentai
- „NRF Connect“ „Android“ programos, skirtos „ESP32 iBeacon“, naudojimas
- ESP32 programavimas veikti kaip „BLE iBeacon“
ESP32 yra tikrai galingas daiktų interneto įrenginys, turintis integruotą „Bluetooth“ ir „WiFi“ palaikymą. ESP32 yra patobulinta pirmtako ESP8266 versija su papildomomis funkcijomis, tokiomis kaip RAM, ROM, GPIO Pins ir kt. ESP32 modulis palaiko tiek klasikinį „Bluetooth“, tiek „Bluetooth Low Energy“ (BLE), klasikinis „Bluetooth“ gali būti naudojamas dainoms ar failams perkelti ir BLE parinktis gali būti naudojama akumuliatoriui optimizuotoms programoms, tokioms kaip „Bluetooth“ švyturiai, kūno rengybos juostos, artumo atstumai ir kt. Taip pat galima naudoti ESP32 kaip nuoseklųjį „Bluetooth“, pvz., HC-05 arba HC-06 modulius paprastiems mikrovaldiklių projektams.
Kaip žinome, BLE gali veikti dviem skirtingais režimais - serverio režimu ir kliento režimu. Abu režimai buvo aptarti ankstesnėse mūsų ESP32 pamokose:
- ESP32 BLE serveris - GATT paslauga, rodanti akumuliatoriaus įkrovos lygį
- ESP32 BLE klientas - prisijungimas prie kūno rengybos lemputės paleidimo
Šioje pamokoje sukursime „ BLE iBeacon“ naudodami ESP32, kur ESP32 veiks kaip serveris, o išmanusis telefonas - kaip klientas. Manau, kad jūs jau esate susipažinę, kaip naudoti ESP32 plokštę su „Arduino IDE“, jei ne, grįžkite prie darbo su ESP32 pamoka.
Taip pat galite sužinoti daugiau apie tai, kas yra „Beacon“ / „iBeacon“ technologija, atlikdami ankstesnius „Bluetooth iBeacon“ projektus naudodami „Raspberry Pi“ ir „HM-10 BLE iBeacon“.
Būtini komponentai
Techninė įranga:
- ESP32 plėtros valdyba
- Mikro USB laidas
Programinė įranga:
- „Arduino IDE“
- „Android“ programa: „nRF Connect for Mobile“ („Nordic Semiconductor“)
Yra daugybė BLE skaitytuvų programų, vieną iš jų naudojome ankstesniame projekte „Kaip naudoti HM-10 BLE modulį su„ Arduino “. Ši „BLE“ skaitytuvo programa suteikia gerą grafinę sąsają (GUI), tačiau trūksta papildomos informacijos, todėl šiame projekte naudojame „ NRF Connect for Mobile“ programą.
„NRF Connect“ „Android“ programos, skirtos „ESP32 iBeacon“, naudojimas
1. Atsisiųskite „nRF Connect“ programą iš „Google Play“ parduotuvės ir atidarykite ją.
2. Ekranas atrodo kaip žemiau. Naudingos šio projekto parinktys bus „Nuskaityti“, „Skaitytuvas“ ir „Informacija“, kai bus rasti įrenginiai.
"Scan" funkcija bus naudojama pamatyti visas turimas iBeacons. Norėdami pradėti ieškoti „iBeacon“, nuimkite ekraną arba eikite į parinktį „Nuskaityti“ viršutiniame dešiniajame ekrano kampe. Tai pradės ieškoti galimų „iBeacons“.
3. Atlikę paiešką „iBeacon“, galėsite pamatyti „iBeacon“ RSSI, UUID, „Major“ ir „Minor“. RSSI pasikeis, jei atimsite mobilųjį telefoną ar „iBeacon“ vienas nuo kito. Šiame ekrane RSSI yra (-37). Be to, yra keletas detalių, tokių kaip manekeno įmonės pavadinimas, įrenginio tipas, baitų ilgis, vietinis ESP32 pavadinimas. Čia tai „ ESP32 kaip„ iBeacon “. Eskize galite pakeisti vietinį pavadinimą.
4. Atėmus iš „iBeacon“ išmanųjį telefoną, RSSI reikšmė pasikeičia nuo -37 iki -58. Šios vertės toliau keisis, jei perkelsite vieną iš įrenginių.
RSSI signalo priimtinos vertės yra šios:
Signalo stiprumas | TL; DR | Reikalingas | |
---|---|---|---|
-30 dBm | Nuostabu | Maksimalus pasiekiamas signalo stiprumas. Norėdami tai pasiekti, klientas gali būti tik už kelių metrų nuo AP. Nėra tipiškas ar pageidautinas realiame pasaulyje. | Nėra |
-67 dBm | Labai gerai | Mažiausias signalo stiprumas programoms, kurioms reikia labai patikimo, savalaikio duomenų paketų pristatymo. | VoIP / VoWiFi, srautinis vaizdo įrašas |
-70 dBm | Gerai | Mažiausias signalo stiprumas, užtikrinantis patikimą paketų pristatymą. | El. Paštas, internetas |
-80 dBm | Negerai | Mažiausias signalo stiprumas užtikrinant pagrindinį ryšį. Paketų pristatymas gali būti nepatikimas. | Nėra |
-90 dBm | Nenaudojamas | Artėja ar skendi triukšmo grindyse. Bet koks funkcionalumas yra mažai tikėtinas. | Nėra |
ESP32 programavimas veikti kaip „BLE iBeacon“
ESP32 BLE iBeacon pavyzdinė programa yra prieinama, kai įdiegiate ESP32 plokštę „Arduino IDE“. Bet mes šiek tiek redagavome šį eskizą šioje pamokoje, visa redaguota programos pavyzdinė versija pateikiama šios pamokos pabaigoje.
Norėdami atidaryti ESP32 „ BLE_iBeacon“ pavyzdinę programą, atlikite toliau nurodytus veiksmus.
- Atidarykite „Arduino IDE“ ir pasirinkite „ESP32 Dev Module“. (Jei nerandate šios plokštės, patikrinkite, ar įdiegėte ESP32 plokščių paketą)
- Eikite į Failas > Pavyzdžiai > ESP32 BLE Arduino > BLE_iBeacon
- Atidarykite „BLE_iBeacon“ eskizą.
Dabar yra šiek tiek modifikuotas kodas, kuris atliekamas šioje pamokoje. ESP32 pavadinimas taip pat bus atnaujintas šiame eskize. Taigi pradėkite įtraukdami būtinas bibliotekas, kurios bus naudojamos kuriant „BLE Server“ ir „iBeacon“.
#include „sys / time.h“
Tai laiko biblioteka, skirta gauti dabartinį sistemos laiką. Čia yra tokios funkcijos kaip tv_sec, gettimeofday () ir kt. Norėdami gauti daugiau informacijos, galite apsilankyti oficialiame UNIX leidime „ sys / time.h“.
Tada įtraukiamos ESP32 BLE bibliotekos, kuriose yra daugybė funkcijų, naudojamų ESP32 formavimui skirtingose konfigūracijose, tokiose kaip BLE klientas ar BLE serveris.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
Pridedama „ iBeacon“ biblioteka, kuri ESP32 nustato kaip „iBeacon“. Kartu su tuo ESP32 yra įtraukta gilaus miego biblioteka. Biblioteka bus naudojama siunčiant ESP32 nustatytą laiką gilaus miego režimu.
#include "BLEBeacon.h" #include "esp_sleep.h"
Apibrėžkite ESP32 miego trukmę. Čia ESP32 bus miego režimu 10 sekundžių, jis reklamuosis ir vėl eis giliai miegoti 10 sekundžių.
#define GPIO_DEEP_SLEEP_DURATION 10
Čia apibrėžta RTC_DATA_ATTR. Atminkite, kad jei apibrėžiate visuotinį kintamąjį su atributu RTC_DATA_ATTR, kintamasis bus įdėtas į RTC_SLOW_MEM atmintį. Taigi struktūra, deklaruota kaip RTC_DATA_ATTR ir dinaminės atminties kopijavimas į šią struktūrą prieš gilų miegą, padeda tai atkurti į dinaminę atmintį po pabudimo. Paprastais žodžiais tariant, mes taupome laiką statinėje atmintyje iš dinaminės atminties, kad jį vėl atgautume po gilaus miego. Čia apibrėžti du kintamieji. „ Paskutinis “ naudojamas norint gauti paskutinį kartą, kai ESP32 užmigo miego būsenoje, o įkrovos skaičius naudojamas nustatant atstatymų skaičių.
RTC_DATA_ATTR statinis laikas_t paskutinis; RTC_DATA_ATTR statinis uint32_t įkrovos skaičius;
Tada nustatykite BLE reklamavimo tipą. Apibrėžimas atliekamas taip.
BLEReklama * pReklama;
Timeval apibrėžiama kaip struktūra patekti į dabartinį laiką.
struktūros laikas dabar;
Taip pat apibrėžtas UUID. UUID galima sukurti naudojant šią nuorodą .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Dabar sukurkite funkciją, kurioje bus „iBeacon“ atributai, pvz., UUID, „Major“, „Minor“ ir kt. Šioje funkcijoje sukurkite „BLE“ egzempliorių kaip „iBeacon“ ir nustatykite ESP32 kaip „iBeacon“ padirbtą gamintojo ID, UUID, major ir minor.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((įkrovos skaičius ir 0xFFFF0000) >> 16); oBeacon.setMinor (įkrovos skaičius ir 0xFFFF);
Nustatykite žymą kaip 0x04, kad ji išvestų skaitytuve BrEdrNotSupported .
oData.setFlags (0x04);
Nustatykite reklamavimo duomenis publikavimui.
std:: string strServiceData = "";
Norėdami reklamuoti, pridėkite eilutę vienas po kito.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Įveskite strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Pradėkite reklamuoti skelbdami duomenis.
pReklama-> setData (oData); pReklama-> setScanResponseData (oScanResponseData);
Pradėkite serijinį monitorių 115200 baudos greičiu ir gaukite laiko. Taip pat padidinkite įkrovos skaičių, kad išsaugotumėte atstatymų skaičių.
Serijos pradžia (115200); gettimeofday (& now, NULL); Serial.printf ("start ESP32% d \ n", įkrovos skaičius ++);
Saugokite dabartinį laiką statinėje atmintyje.
paskutinis = dabar.tv_sek;
Sukurkite BLE įrenginį ir pavadinkite jį taip, kaip norite. Čia ESP32 pavadintas „ ESP2 kaip„ iBeacon “. Atminkite, kad vardai gali būti ilgi, tačiau ši kodo versija pradėjo palaikyti ilgus vardus.
BLEDevice:: init („ESP32 kaip„ iBeacon “);
Sukurkite BLE serverį, kad galėtumėte reklamuotis ir pradėti.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Tada nustatykite ESP32 „iBeacon“ režimu.
setBeacon ();
Pradėkite reklamuotis, tada nustokite reklamuotis ir miegokite 10 sekundžių.
pReklama-> pradžia (); pReklama-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Galiausiai, naudodami „Micro USB“ kabelį, prijunkite ESP32 kūrimo plokštę su savo nešiojamuoju kompiuteriu ir įkelkite kodą į ESP32 naudodami „Arduino IDE“. Tada išmaniajame telefone atidarykite „ nRF Connect Android“ programą ir pradėkite nuskaityti. ESP32 rasite kaip „iBeacon“ transliaciją, kaip parodyta žemiau esančiame paveikslėlyje:
Štai kaip ESP32 galima naudoti kaip „BLE Beacon“ reklamuojant UUID, „Major“ ir „Minor“. Jei norite sužinoti daugiau apie „iBeacon“, vadovaukitės mūsų ankstesne „HM10“, kaip „iBeacon“, pamoka. Be to, jei turite kokių nors abejonių, komentuokite toliau arba užduokite klausimus forumuose.
Visas kodas su veikiančiu vaizdo įrašu pateiktas žemiau.
/>