- Предуслови
- Потребни материјали
- Хардвер
- Набавите своју Блуетоотх адресу сервера (адреса фитнес опсега)
- Добијање услуге и карактеристичног УУИД сервера
- Програмирање ЕСП32 да делује као клијент за Прокимити Свитцх Апплицатион
- Рад и тестирање
Како је цоол аутоматски укључити светла чим уђете у свој дом и поново га искључити кад одлазите! Да, једноставна апликација то може учинити уместо вас. Овде у овом пројекту користићемо ЕСП32 као БЛЕ клијента, а фитнес опсег као БЛЕ сервер, па кад год особа која носи фитнес траку дође у домет ЕСП32 Блуетоотх-а, ЕСП32 га детектује и укључује светло. Било који Блуетоотх уређаји који имају могућности БЛЕ сервера могу се користити као покретачки уређај за контролу било ког кућног уређаја помоћу ЕСП32.
Већ смо истражили БЛЕ (Блуетоотх Лов Енерги) функције ЕСП32 модула и прилично сам одушевљен њиме. Да резимирамо, овај модул има класични Блуетоотх и Блуетоотх Лов Енерги (БЛЕ), класични Блуетоотх се може користити за пренос песама или датотека, а БЛЕ опција може се користити за апликације оптимизоване за батерију као што су Блуетоотх светионици, фитнес траке, близина итд. Такође је могуће користити га као серијски Блуетоотх попут ХЦ-05 или ХЦ-06 модула за једноставне пројекте микроконтролера.
Као што знате, ЕСП32 БЛЕ може да ради у два различита режима. Један је режим сервера о којем смо већ разговарали коришћењем услуге ГАТТ за имитирање услуге индикатора нивоа батерије. У тој вежби ЕСП32 се понашао као сервер, а наш мобилни телефон као клијент. Сада, пустимо нас да радимо са ЕСП32 као клијент и покушајмо да га повежемо са другим БЛЕ серверима као што је мој фитнес опсег.
Сви БЛЕ сервери, укључујући мој фитнес бенд, у сталном су режиму оглашавања, односно увек их могу открити када их клијент скенира. Искористивши ову функцију, ове фитнес траке можемо користити као близински прекидач, што значи да су ови фитнес тракови увек везани за руку корисника и скенирањем траке можемо открити да ли је особа у домету. Управо то ћемо урадити у овом чланку. Ми ћемо програмирати ЕСП32 да делује као БЛЕ клијента и константно скенирате Бле уређаја; ако пронађемо фитнес опсег у домету, покушаћемо да се повежемо са њим и ако је веза успешна, можемо покренути сијалицу пребацивањем једног од ГПИО пинова на ЕСП32. Метода је поуздана јер сваки БЛЕ сервер(фитнес опсег) имаће јединствени хардверски ИД, тако да ниједна два БЛЕ серверска уређаја неће бити идентична. Интересантно зар не? !!! Ајмо сад да градимо
Предуслови
У овом чланку претпостављам да сте већ упознати са начином коришћења ЕСП32 плоче са Ардуино ИДЕ-ом, ако се не вратите на почетак рада са ЕСП32 упутством.
Комплетни ЕСП32 Блуетоотх поделили смо у три сегмента ради лакшег разумевања. Стога се препоручује да прођете кроз прва два туторијала пре него што започнете са овим.
- Серијски Блуетоотх на ЕСП32 који укључује ЛЕД са мобилног телефона
- БЛЕ сервер за слање података о нивоу батерије на мобилни телефон помоћу услуге ГАТТ
- БЛЕ клијент за скенирање БЛЕ уређаја и понашање као светионик.
Већ смо обрадили прва два туторијала, овде прелазимо на последњи да бисмо објаснили ЕСП32 као БЛЕ клијент.
Потребни материјали
- ЕСП32 одбор за развој
- АЦ оптерећење (лампа)
- Релејни модул
Хардвер
Хардвер за овај пројекат ЕСП32 БЛЕ клијента је прилично једноставан, јер се већина магије догађа унутар кода. ЕСП32 мора да укључи жаруљу наизменичне струје (Лоад) када се Блуетоотх сигнал открије или изгуби. За пребацивање овог оптерећења користићемо релеј, а пошто су ГПИО пинови ЕСП32 компатибилни само 3.3В, потребан нам је релејни модул који се може покретати са 3.3В. Само проверите који се транзистор користи у релејном модулу ако је БЦ548, било би добро да направите сопствени круг пратећи доњи дијаграм кола.
Упозорење: Коло се бави директним мрежним напоном од 220 В. Будите опрезни са жицама под напоном и пазите да не направите кратки спој. Упозорени сте.
Разлог иза којег се користи БЦ548 преко БЦ547 или 2Н2222 је тај што имају низак напон базног емитора који се може покренути са само 3,3 В. Релеј се овде користи је 5В релеј, па смо га напајање са Вин пин који добија 5В формирају кабл за напајање. Пин за уземљење је повезан са масом круга. Ресистор Р1 1К се користи као базна струја ограничавајућим отпорника. Фазна жица је повезана са НО пином релеја, а заједнички пин релеја је повезан са оптерећењем, а други крај оптерећења је повезан са неутралним. Можете заменити позицију Пхасе и Неутрал, али водите рачуна да их директно не скратите. Струја увек треба да пролази кроз оптерећење (сијалицу).Користио сам релејни модул да поједноставим ствари, а овде је оптерећење ЛЕД лампица Фоцус. Моја поставка изгледа отприлике овако у наставку
Ако за сада желите да прескочите хардвер, можете да користите ГПИО 2 пин уместо ГПИО 13 пин за пребацивање уграђене ЛЕД на ЕСП32. Ова метода се препоручује почетницима.
Набавите своју Блуетоотх адресу сервера (адреса фитнес опсега)
Као што је раније речено, програмираћемо ЕСП32 да делује као клијент (слично телефону) и повежемо се са сервером који је мој фитнес (Леново ХВ-01). Да би се клијент повезао са сервером, мора знати Блуетоотх адресу сервера. Сваки Блуетоотх сервер попут мог фитнес бенда овде има своју јединствену Блуетоотх адресу која је трајна. То можете повезати са МАЦ адресом свог преносног рачунара или мобилног телефона.
Да бисмо ову адресу добили са сервера, користимо апликацију звану нРФ цоннецт са нордијских полупроводника коју смо већ користили за наше претходно упутство. Доступан је бесплатно и за ИОС и за Андроид кориснике. Једноставно преузмите, покрените апликацију и потражите Блуетоотх уређаје у близини. Апликација ће навести све БЛЕ уређаје које пронађе. Мој се зове ХВ-01, једноставно погледајте испод његовог имена и пронаћи ћете хардверску адресу сервера као што је приказано доле.
Дакле, ЕСП32 БЛЕ хардверска адреса мог фитнес бенда је Ц7: Ф0: 69: Ф0: 68: 81, имат ћете другачији скуп бројева у истом формату. Само то забележите, јер ће нам требати када програмирамо наш ЕСП32.
Добијање услуге и карактеристичног УУИД сервера
Добро, сада смо идентификовали наш сервер помоћу БЛЕ адресе, али да бисмо могли да комуницирамо са њим, морамо да говоримо језиком услуге и карактеристикама, које бисте разумели да сте прочитали претходни водич. У овом упутству користим карактеристику писања свог сервера (фитнес бенда) да бих се упарио са њим. Дакле, за упаривање са уређајем потребан нам је услужни оглас Карактеристични УУИД који можемо поново добити са истом апликацијом.
Само кликните на дугме за повезивање на вашој апликацији и потражите неке карактеристике писања, где ће апликација приказати услугу УУИД и карактеристику УУИД. Моја је приказана доле
Овде су мој УУИД услуге и Карактеристични УУИД исти, али не морају бити исти. Забележите УУИД вашег сервера. Моја је забележена као
УУИД услуге: 0000фее7-0000-1000-8000-00805ф9б34фб Карактеристични УУИД: 0000фее7-0000-1000-8000-00805ф9б34фб
Није обавезно користити карактеристике писања; можете да користите било који важећи сервис и карактеристични УУИД сервера који је приказан у апликацији.
Програмирање ЕСП32 да делује као клијент за Прокимити Свитцх Апплицатион
Идеја програма је да натера ЕСП32 да делује као клијент који непрестано скенира Блуетоотх уређаје када пронађе наш сервер (фитнес опсег), верификује хардверски ИД и укључиће светло кроз ГПИО пин 13. Па добро! !, али постоји један проблем с тим. Сви БЛЕ сервери имаће домет од 10 метара, што је мало превише. Дакле, ако покушавамо да преклопник претварача укључујемо светло за отварање врата, овај опсег је врло висок.
Да бисмо смањили домет БЛЕ сервера, можемо користити опцију упаривања. БЛЕ сервер и клијент остаће упарени само ако су оба на удаљености од 3-4 метра. То је савршено за нашу апликацију. Дакле, правимо ЕСП32 не само да открије БЛЕ сервер већ и да се повеже са њим и осигура да ли и даље остаје упарен. Све док су упарени, АЦ лампица ће остати упаљена, када домет премаши упаривање, изгубиће се и лампица ће се угасити. Комплетни пример програма ЕСП32 БЛЕ који то чини дат је на крају ове странице. Доље ћу разбити код на мале исечке и покушати да их објасним.
Након укључивања датотеке заглавља, обавештавамо ЕСП32 о БЛЕ адреси, услузи и карактеристичном УУИД-у које смо добили путем апликације нРФ цоннецт, као што је објашњено у горњим насловима. Код изгледа као испод
статички БЛЕУУИД сервицеУУИД ("0000фее7-0000-1000-8000-00805ф9б34фб"); // сервис УУИД од фитнессбанд добијеног НРФ повезивање апликација статичком БЛЕУУИД цхарУУИД ("0000фее7-0000-1000-8000-00805ф9б34фб"); // Карактеристика УУИД од фитнессбанд добијеног НРФ цоннецт апликацију Стринг Ми_БЛЕ_Аддресс = "ц7: ф0: 69: ф0: 68: 81"; // Хардверски Блуетоотх МАЦ мог фитнес банда варираће за сваки опсег добијен помоћу апликације нРФ цоннецт
Након тога у програму имамо цоннецтТосервер и МиАдвертиседДевицеЦаллбацк на које ћемо се вратити касније. Онда унутар подешавање функција, ми иницијализирати серијски монитор и чине БЛЕ на ЕСП за скенирање за уређај. По завршетку скенирања за сваки откривени БЛЕ уређај позива се функција МиАдвертиседДевицеЦаллбацкс .
Ми такође омогућити активно скенирање, јер смо напајање ЕСП32 са мрежног напајања, за примену батерије је искључен да смањи текућу потрошњу. Окидачки пин релеја повезан је на ГПИО 13 у нашем хардверу, па такође изјављујемо да је ГПИО пин 13 излазни.
воид сетуп () { Сериал.бегин (115200); // Покрени серијски монитор Сериал.принтлн („ЕСП32 БЛЕ Сервер програм“); // Уводна порука БЛЕДевице:: инит (""); пБЛЕСцан = БЛЕДевице:: гетСцан (); // креирамо ново скенирање пБЛЕСцан-> сетАдвертиседДевицеЦаллбацкс (ново МиАдвертиседДевицеЦаллбацкс ()); // Позовимо класу која је горе дефинисана пБЛЕСцан-> сетАцтивеСцан (труе); // активно скенирање троши више енергије, али брже постиже резултате пинМоде (13, ОУТПУТ); // Декларисати уграђени ЛЕД пин као излаз }
Унутар функције МиАдвертиседДевицеЦаллбацкс исписујемо ред у којем ће се наћи име и друге информације о откривеним БЛЕ уређајима. Потребан нам је ИД хардвера БЛЕ уређаја који је откривен да бисмо га могли упоредити са жељеним. Дакле , користимо променљиву Сервер_БЛЕ_Аддресс да бисмо добили адресу уређаја, а затим и да бисмо је конвертовали из типа БЛЕАддресс у стринг.
класа МиАдвертиседДевицеЦаллбацкс: јавни БЛЕАдвертиседДевицеЦаллбацкс { воид онРесулт (БЛЕАдвертиседДевице адвертиседДевице) { Сериал.принтф ("Резултат скенирања:% с \ н", адвертиседДевице.тоСтринг (). ц_стр ()); Сервер_БЛЕ_Аддресс = нова БЛЕАддресс (адвертиседДевице.гетАддресс ()); Сцанед_БЛЕ_Аддресс = Сервер_БЛЕ_Аддресс-> тоСтринг (). Ц_стр (); } };
Унутар функције петље скенирамо 3 секунде и стављамо резултат у фоундДевицес који је објекат из БЛЕСцанРесултс. Ако скенирањем пронађемо један или више уређаја, почињемо да проверавамо да ли се откривена БЛЕ адреса подудара са оном коју смо унели у програм. Ако је подударање позитивно, а уређај раније није упарен, покушавамо да се раздвојимо помоћу функције цоннецтТосервер. Такође смо користили неколико серијских изјава у сврху разумевања.
вхиле (фоундДевицес.гетЦоунт ()> = 1) { иф (Сцанед_БЛЕ_Аддресс == Ми_БЛЕ_Аддресс && паиред == фалсе) { Сериал.принтлн ("Пронађен уређај: -)… повезивање са сервером као клијентом"); иф (цоннецтТосервер (* Сервер_БЛЕ_Аддресс)) {
Унутар функције цоннецтТосервер користимо УУИД за упаривање са БЛЕ сервером (фитнес опсег). Да би се повезао са сервером, ЕСП32 мора да делује као клијент, па креирамо клијента помоћу функције цреатеЦлиент (), а затим се повезујемо са адресом БЛЕ сервера. Затим тражимо услугу и карактеристике користећи УУИД вредности и покушавамо да се повежемо са њом. Када је веза успешна, функција враћа труе, а ако не враћа фалсе. Имајте на уму да није обавезно имати услугу и карактеристични УУИД за упаривање са сервером, то се ради само ради вашег разумевања.
боол цоннецтТосервер (БЛЕАддресс пАддресс) { БЛЕЦлиент * пЦлиент = БЛЕДевице:: цреатеЦлиент (); Сериал.принтлн ("- Креиран клијент"); // Повежите се са БЛЕ сервером. пЦлиент-> цоннецт (пАддресс); Сериал.принтлн ("- повезан са фитнес бендом"); // Добити референцу на услугу коју тражимо на удаљеном БЛЕ серверу. БЛЕРемотеСервице * пРемотеСервице = пЦлиент-> гетСервице (сервицеУУИД); иф (пРемотеСервице! = нуллптр) { Сериал.принтлн ("- Пронашли смо нашу услугу"); ретурн труе; } елсе ретурн фалсе; // Прибављање референце на карактеристику у услузи удаљеног БЛЕ сервера. пРемотеЦхарацтеристиц = пРемотеСервице->гетЦхарацтеристиц (цхарУУИД); иф (пРемотеЦхарацтеристиц! = нуллптр) Сериал.принтлн ("- Пронађена је наша карактеристика"); ретурн труе; }
Ако је веза успешна, ГПИО пин 13 је постављен високо и контрола се шаље изван петље помоћу прекида. Булова променљива упарена такође је постављена као тачно.
иф (цоннецтТосервер (* Сервер_БЛЕ_Аддресс)) { упарено = тачно; Сериал.принтлн ("ЛЕД ******************** УКЉУЧЕН ********************** ** "); дигиталВрите (13, ВИСОКО); пауза; }
Након успешног упаривања и укључивања ГПИО пина, морамо да проверимо да ли је уређај још увек у домету. Будући да је уређај сада упарен, услуга БЛЕ скенирања више неће моћи да га види. Поново ћемо га наћи тек када корисник напусти подручје. Дакле, једноставно морамо да потражимо БЛЕ сервер и ако откријемо морамо да подесимо ГПИО пин на низак као што је приказано доле
иф (Сцанед_БЛЕ_Аддресс == Ми_БЛЕ_Аддресс && паиред == труе) { Сериал. принтлн („Наш уређај је изашао из домета“); упарено = нетачно; Серијски. принтлн ("******************** ЛЕД ОООФФФФФ ************************"); дигиталВрите (13, ЛОВ); ЕСП.рестарт (); пауза; }
Рад и тестирање
Када сте спремни са програмом и хардверском поставком, једноставно пренесите код на ЕСП32 и распоредите целу поставку као што је приказано доле.
Требали бисте приметити да се лампица укључује чим се фитнес бенд (сервер) упари са ЕСП32. Ово такође можете проверити тако што ћете приметити везу Блуетоотх везе на фитнес траци. Једном када се упарите, покушајте да се удаљите од ЕСП32 и када пређете 3-4 метра приметићете да Блуетоотх симбол на сату нестаје и веза се губи. Ако погледате лампу, она ће се угасити. Када се вратите назад, уређај се поново упарује и лампица се укључује. Комплетан рад пројекта можете пронаћи у видео запису испод.
Надам се да сте уживали у пројекту и успут научили нешто ново. Ако сте се суочили са било каквим проблемом приликом покретања, слободно објавите проблем на форумима или чак у одељку за коментаре у наставку