- Терминологије повезане са БЛЕ (Блуетоотх Лов Енерги)
- Припрема хардвера
- Програмирање ЕСП32 за индикацију нивоа батерије помоћу ГАТТ услуге
- Тестирање ваше ГАТТ услуге на ЕСП32 БЛЕ
Бежичне слушалице, фитнес бендови, Блуетоотх звучници, слушалице за уши, мобилни телефони, преносни рачунари… толико је Блуетоотх уређаја око нас и већина ових уређаја ради на батерије. Да ли сте се икада запитали да, када повежете Блуетоотх уређај са својим мобилним телефоном, како он аутоматски схвата да је повезани уређај рачунар или аудио уређај или мобилни телефон? За неке уређаје наш телефон можда чак аутоматски приказује проценат напуњености повезаног уређаја на траци са обавештењима. Како се све ово дешава само од себе? Требало би да постоји неки заједнички протокол који телефон дели са Блуетоотх уређајем, зар не!
Будите знатижељни, добићете одговоре на ова питања док покушавамо да разумемо Блуетоотх Лов Енерги (скраћено БЛЕ), уз популарни ЕСП32 модул. За разлику од класичног Блуетоотх-а у ЕСП32, БЛЕ ради само када је комуникација активирана и у супротном остаје у режиму спавања, ово га чини правим избором за апликације на батерије. БЛЕ такође може да формира мрежасте мреже и делује као светионици. БЛЕ модули обично раде или као сервер или као клијент, овде ћемо користити ЕСП32 БЛЕ као сервер.
Овде смо поделили комплетан ЕСП32 Блуетоотх у три сегмента ради лакшег разумевања.
1. Серијски Блуетоотх на ЕСП32 који пребацује ЛЕД са мобилног телефона
2 . БЛЕ сервер за слање података о нивоу батерије на мобилни телефон помоћу услуге ГАТТ
3. БЛЕ клијент да скенира БЛЕ уређаје и понаша се као сигнал.
Већ смо обрадили први чланак; у овом чланку ћемо научити како да натерамо ЕСП32 БЛЕ да ради као сервер и да користимо ГАТТ услугу за слање података о нивоу батерије. У сврху тестирања, послаћемо чврсто кодиране вредности са ЕСП32 као проценат батерије на наш мобилни телефон путем услуге БЛЕ ГАТТ, на тај начин ће наш Мобиле претпоставити да је ЕСП32 Блуетоотх уређај на батерије који покушава да пошаље на свој проценат батерије. Пре детаљног разумевања разумећемо неколико терминологија повезаних са Блуетоотх Лов Енерги.
Терминологије повезане са БЛЕ (Блуетоотх Лов Енерги)
БЛЕ сервер: Као што је раније речено, БЛЕ се може програмирати да ради или као сервер или као клијент. Када ради као сервер, БЛЕ може да пружи само податке које не може да успостави везу. Пример би био фитнес бенд. Сервер је могао да пошаље информације само ако их клијент затражи.
Најчешће се ЕСП32-ов БЛЕ користи као сервер. Сваки сервер ће имати једну или више услуга у себи, а слично томе свака услуга ће имати једну или више карактеристика повезаних са собом. Карактеристика може садржати нулу, један или више дескриптора. Свака услуга, карактеристика или дескриптор имаће свој унапред дефинисани јединствени ИД под називом УУИД.
БЛЕ клијент: Клијент може скенирати повезивање и слушати друге Блуетоотх уређаје. Пример би могао бити ваш мобилни телефон. Имајте на уму да већина БЛЕ хардверских уређаја може радити као сервер и као клијент, односно софтвер који одлучује о улози уређаја.
Периферни уређај / централни уређај: У БЛЕ мрежи може постојати само један централни уређај, али може имати онолико периферних уређаја колико је потребно. Централни уређај може истовремено да се повеже са свим периферним уређајима, али периферни уређај може да се повеже само са централним уређајем, тако да ниједна два периферна уређаја не могу међусобно да деле податке. Најбољи пример за централни уређај биће наши паметни телефони, а за периферне уређаји наше Блуетоотх слушалице или фитнес траке.
БЛЕ оглашавање: БЛЕ оглашавање је гееки термин који упућује Блуетоотх уређај да буде видљив свима како би могао да се упари и успостави везу. Може се сматрати једносмерном комуникацијом. Овде сервер наставља оглашавање података очекујући да ће их сервер примити. БЛЕ Беацон је врста БЛЕ.
УУИД (Универзални јединствени идентификатор): Сваки БЛЕ Блуетоотх уређај добија универзални јединствени идентификациони број када га програмер програмира. О овом идентификатору можете размишљати као о низу бројева који представља функционалност / улогу БЛЕ уређаја. Опет постоје две врсте УУИД-а. Један је УУИД услуге, а други је Карактеристични УУИД.
ГАТТ услуга: ГАТТ је скраћеница од Генериц Аттрибуте Профиле; ово дефинише неке стандардне начине помоћу којих би два БЛЕ уређаја увек требала да комуницирају. Овај протокол атрибута (АТТ) је унапред дефинисан и заједнички је за све БЛЕ уређаје, тако да се на овај начин било која два БЛЕ уређаја могу идентификовати. Дакле, ГАТТ је био одговор на наше претходно питање.
Техника помоћу које би два БЛЕ уређаја требало да шаљу податке напред-назад дефинисана је концептом који се назива услуге и карактеристике.
БЛЕ услуга / БЛЕ карактеристика: Услужни УУИД нам говори коју врсту услуге ће БЛЕ уређај обављати, а Карактеристични УУИД говори који су параметри или функције које ће та услуга обављати. Тако ће свака Услуга имати једну или више карактеристика. У реду! Одакле програмеру овај УУИД? Сваки УУИД је већ дефинисан ГАТТ-ом (Генериц Аттрибуте Профиле), можете посетити њихову веб страницу и одабрати УУИД како је потребно за пројекат. Знам да нам се мало одбио преко главе; покушајмо да то разумемо на примеру.
Претпоставимо БЛЕ уређај аудио уређаја. У почетку када га упарите са телефоном, телефон га идентификује као аудио уређај и такође приказује ниво напуњености батерије на статусној траци. Дакле, да би се то догодило, аудио уређај мора некако да каже вашем телефону да је спреман да подели ниво напуњености батерије и проценат напуњености батерије. То се ради употребом УУИД-а, постоји одређени УУИД који говори да ће БЛЕ коцка пружити детаље о нивоу батерије овог УУИД-а који говори да се врста услуге назива Сервице УУИД, опет може бити толико параметара који морају бити размењени за довршавање услуге као што је вредност батерије на таквом параметру, сваки параметар ће имати свој УУИД и они се зову Карактеристични УУИД.Уобичајена функција коју обавља карактеристика је Читање, писање, обавештавање и указивање.
БЛЕ дескриптор: дескриптор је опциони атрибут који је присутан унутар карактеристике. Дескриптор обично одређује како приступити карактеристици.
БЛЕ Беацон: Блуетоотх Беацон је више попут близинског прекидача који извршава неке унапред дефинисане радње када корисник уђе у домет (непосредна близина). Стално оглашава свој идентитет и стога је спреман за упаривање увек.
БЛЕ2902: Још увек сам скептичан у вези са овом ствари, али можете је сматрати делом софтвера на страни клијента који обавештава сервер да укључи или искључи обавештење, што ће нам помоћи у уштеди енергије
Надам се да имате грубу идеју, добро је што не морамо знати много јер су сви ручни радови већ урађени за нас кроз библиотеке.
Припрема хардвера
Пројекат не захтева подешавање хардвера, али уверите се да сте на свој Ардуино ИДЕ додали детаље о плочи ЕСП32 и да сте испробали програм за трептање са минималним узорком да бисте проверили да ли све ради како се очекује. Скептични сте око тога како то учинити. Можете следити упутства за почетак рада са ЕСП32 са Ардуином да бисте учинили исто.
Такође, да бисмо тестирали БЛЕ услуге, користићемо нРФ андроид апликацију на нашем мобилном телефону која се може директно преузети са ПлаиСторе-а. Такође је доступан у Итунес Сторе за кориснике иПхонеа. Ако планирате дуго радити са БЛЕ-ом, ова апликација ће вам заиста добро доћи у сврхе отклањања грешака.
Програмирање ЕСП32 за индикацију нивоа батерије помоћу ГАТТ услуге
До овог тренутка претпостављам да имате добру идеју о томе која је ГАТТ услуга и како се она примењује помоћу услуга и карактеристичних модела. Сада, заронимо у програм да бисмо сазнали како је имплементиран у ЕСП32 помоћу Ардуино ИДЕ-а. Пре него што наставимо, желео бих да искористим овај простор да се захвалим Андреасу Спиесс-у за његов видео БЛЕ који је на мојој страни учинио ствари јасним.
Програм започињемо увозом потребних библиотека у нашу скицу. Постоји много ствари које треба конфигурисати како бисмо користили ЕСП32-ову БЛЕ функционалност, надамо се, захваљујући Неилу Колбану који је већ обавио напоран посао за нас и обезбедио библиотеке. Ако желите да разумете функционалност библиотека, можете погледати његову документацију на гитхуб страници.
#инцлуде
Даље морамо да дефинишемо функцију Сервер цалл-бацк за наш Блуетоотх уређај. Пре тога, можемо да схватимо шта је функција повратног позива у БЛЕ-у.
Шта је функција повратног позива у БЛЕ?
Када БЛЕ ради као сервер, важно је дефинисати функцију повратног позива сервера. Много је врста повратних позива повезаних са БЛЕ-ом, али поједностављено речено, сматрате да су то потврде које се извршавају како бисте били сигурни да је радња завршена. Повратни позив сервера се користи да би се осигурало да је веза између клијента и сервера успешно успостављена.
Следеће редове кода користимо за извршавање повратног позива сервера.
боол _БЛЕЦлиентЦоннецтед = фалсе; класа МиСерверЦаллбацкс : јавни БЛЕСерверЦаллбацкс { воид онЦоннецт (БЛЕСервер * пСервер) { _БЛЕЦлиентЦоннецтед = труе; }; воид онДисцоннецт (БЛЕСервер * пСервер) { _БЛЕЦлиентЦоннецтед = фалсе; } };
Унутар функције за подешавање празнине иницирамо серијску комуникацију на 115200 ради отклањања грешака, а затим иницијализујемо Блуетоотх уређај путем функције ИнитБЛЕ .
воид сетуп () { Сериал.бегин (115200); Сериал.принтлн („Индикатор нивоа батерије - БЛЕ“); ИнитБЛЕ (); }
ИнитБЛЕ је место где сви магиц хаппенс. Морамо створити Блуетоотх сервер и овде користити услугу Баттери Левел. Али пре тога морамо да дефинишемо УУИД за сервис, карактеристике и дескриптор за очитавање нивоа батерије. Све УУИД-ове можете добити на веб локацији Блуетоотх ГАТТ услуге. У нашем случају покушавамо да користимо услугу батерије и УУИД за њу је дефинисан као 0Кс180Ф као што је приказано доле.
Даље, морамо знати карактеристике повезане са овом услугом. Да бисте то знали, једноставно кликните на Сервис батерије и бићете преусмерени на страницу Карактеристике сервиса, где се помиње да је ниво батерије назив карактеристика и узима вредност од 0 до 100. Такође имајте на уму да можемо да изведемо само две радње са овом карактеристиком, једно је Читање које је обавезно обавити, а друго Обавештавање које није обавезно. Зато морамо послати вредност батерије клијенту (телефону), што је обавезно, а ако је потребно можемо телефон обавестити о томе шта је необавезно.
Али, сачекајте, и даље нисмо пронашли вредност УУИД за карактеристични ниво батерије. Да бисте то урадили, уђите на страницу Карактеристике батерије и потражите назив нивоа батерије, пронаћи ћете његов УУИД као 0Кс2А19, снимак истог приказан је испод.
Сад кад имамо све вредности, ставимо га у програм као што је приказано доле. Назив БаттериСеривце , БаттериЛевелЦхарацтеристиц и БаттериЛевелДесцриптор су кориснички дефинисане променљиве које се односе на Услугу, Карактеристике и Дескриптор које користимо у програму. Вредност за дескриптор 0Кс2901 користи се када је величина вредности 8-битна, више информација можете пронаћи на страници Опис дескриптора.
#дефине БаттериСервице БЛЕУУИД ((уинт16_т) 0к180Ф)
БЛЕЦхарацтеристиц БаттериЛевелЦхарацтеристиц (БЛЕУУИД ((уинт16_т) 0к2А19), БЛЕЦхарацтеристиц :: ПРОПЕРТИ_РЕАД - БЛЕЦхарацтеристиц :: ПРОПЕРТИ_НОТИФИ); БЛЕДесцриптор БаттериЛевелДесцриптор (БЛЕУУИД ((уинт16_т) 0к2901));
Повратак на функцију инитБЛЕ . Прво морамо покренути БЛЕ сервер и навести га да се оглашава именом. У следеће линије се користе за покретање БЛЕ као сервер. Име које сам дао свом БЛе серверу је „БЛЕ Баттери“, али можете сами да изаберете.
БЛЕДевице:: инит ("БЛЕ батерија"); // Стварање БЛЕ сервера БЛЕСервер * пСервер = БЛЕДевице:: цреатеСервер (); пСервер-> сетЦаллбацкс (нови МиСерверЦаллбацкс ());
Даље морамо покренути ГАТТ услугу, јер смо већ дефинисали УУИД, можемо једноставно покренути услугу користећи линију испод.
// Направите БЛЕ услугу БЛЕСервице * пБаттери = пСервер-> цреатеСервице (БаттериСервице);
Једном када је услуга покренута, можемо повезати дескриптор са карактеристикама и поставити вредности. Овде је додата и услуга БЛЕ2902, као што је приказано у наставку.
пБаттери-> аддЦхарацтеристиц (& БаттериЛевелЦхарацтеристиц); БаттериЛевелДесцриптор.сетВалуе ("Проценат 0 - 100"); БаттериЛевелЦхарацтеристиц.аддДесцриптор (& БаттериЛевелДесцриптор); БаттериЛевелЦхарацтеристиц.аддДесцриптор (нови БЛЕ2902 ());
Напокон је све постављено, сада остаје само да замолимо ЕСП32 да се оглашава како би га други уређаји попут нашег телефона могли открити и повезати се са њим, а када се повеже са клијентом, требало би да покрене услугу батерије, што се може учинити следећи редови.
пСервер-> гетАдвертисинг () -> аддСервицеУУИД (БаттериСервице); пБаттери-> старт (); // Започните оглашавање пСервер-> гетАдвертисинг () -> старт ();
То је до сада добро, последњи корак је да дескриптору кажете колика је вредност батерије у процентима коју треба послати клијенту (телефону). Ова вредност може бити од 0 -100 као што смо раније читали, како би ствари биле једноставне, једноставно сам тврдо кодирао вредност батерије на 57, а затим је повећавам на сваких 5 секунди и започињем од 0 када достигне 100. Код за направити то је приказано у наставку. Имајте на уму да је вредност која се шаље у формату унит8_т.
уинт8_т ниво = 57; воид лооп () { БаттериЛевелЦхарацтеристиц.сетВалуе (& ниво, 1); БаттериЛевелЦхарацтеристиц.нотифи (); кашњење (5000); ниво ++; Сериал.принтлн (инт (ниво)); иф (инт (ниво) == 100) ниво = 0; }
Тестирање ваше ГАТТ услуге на ЕСП32 БЛЕ
Комплетан код горе објашњено је дат на крају странице. Пошаљите код на своју ЕСП32 плочу. Једном отпремљен, ваш телефон треба да открије Блуетоотх уређај под називом „БЛЕ Баттери“ (Упари се са њим).
Затим инсталирајте апликацију нРФ андроид и отворите је и повежите се са БЛЕ Баттери БЛЕ уређајем. Проширите одељак Сервис батерија и требало би да пронађете следећи екран.
Као што видите, апликација је аутоматски препознала да БЛЕ пружа услугу батерије и има карактеристике нивоа батерије због УУИД-а који смо користили у програму. Такође можете да видите да тренутна вредност батерије која износи 67% чека 5 секунди, а можете и да приметите да се повећава.
Супер ствар у вези са коришћењем БЛЕ је да ће сада свака апликација која ради са БЛЕ помислити да је ваш ЕСП32 БЛЕ уређај који обавештава о нивоу батерије. Да бих га испробао, користио сам апликацију која се зове БатОН и апликација је идентификовала ЕСП32 као Блуетоотх уређај на батерију и на телефон дала обавештење о проценту овако
Хладан!! Јел тако? Комплетан рад такође сам приказао у видео снимку испод. Сада, када сте научили како да користите услуге БЛЕ Баттери са ЕСП32, можете испробати и друге ГАТТ услуге које су врло занимљиве попут пулса, ХИД, откуцаја срца итд. Забавите се….