- Mga terminolohiya na nauugnay sa BLE (Bluetooth Low Energy)
- Paghahanda ng hardware
- Programming ESP32 para sa Antas ng Antas ng Baterya gamit ang serbisyo ng GATT
- Pagsubok sa iyong serbisyo sa GATT sa ESP32 BLE
Mga Wireless Headphone, Fitness band, Bluetooth Speaker, In-Ear headphone, Mobile phone, Laptops… maraming mga Bluetooth device sa paligid natin at karamihan sa mga aparatong ito ay pinapatakbo ng baterya. Naisip mo ba na, kapag ikinonekta mo ang isang aparatong Bluetooth sa iyong mobile phone kung paano ito awtomatikong nauunawaan na ang nakakonektang aparato ay isang computer o audio device o isang mobile phone? Para sa ilang mga aparato ang aming telepono ay maaaring awtomatikong nagpapakita ng porsyento ng baterya ng nakakonektang aparato sa notification bar. Paano nangyayari ang lahat ng ito sa kanilang sarili? Dapat mayroong ilang mga karaniwang protocol na ibinahagi sa pagitan ng telepono at ng tama ng aparatong Bluetooth!
Manatiling mausisa, makakakuha ka ng mga sagot para sa mga katanungang ito habang sinusubukan naming maunawaan ang Bluetooth Mababang Enerhiya (BLE para sa maikli), gamit ang tanyag na module ng ESP32. Hindi tulad ng Klasikong Bluetooth sa ESP32 ang BLE ay nagpapatakbo lamang kapag ang isang komunikasyon ay naisasaaktibo at mananatili sa mode ng pagtulog kung hindi man, ginagawa itong tamang pagpipilian para sa mga application na pinapatakbo ng baterya. Maaari ring bumuo ang BLE ng mga network ng mesh at kumilos bilang mga Beacon. Karaniwan ang isang BLE modules ay gumagana alinman bilang isang server o bilang isang kliyente, dito gagamitin namin ang ESP32 BLE bilang server.
Hinahati namin ang kumpletong ESP32 Bluetooth sa tatlong mga segment para sa madaling pag-unawa.
1. Serial Bluetooth sa toggling LED ng ESP32 mula sa Mobile Phone
2 . BLE server upang magpadala ng data ng antas ng baterya sa Mobile Phone gamit ang Serbisyo ng GATT
3. BLE client upang mag-scan para sa mga aparato ng BLE at kumilos bilang beacon.
Nasakop na namin ang unang artikulo; sa artikulong ito matututunan natin kung paano gawin ang ESP32 BLE upang gumana bilang isang server at gamitin ang Serbisyo ng GATT upang magpadala ng impormasyon sa antas ng baterya. Para sa layunin ng pagsubok ay magpapadala kami ng mga hardcoded na halaga mula sa ESP32 bilang porsyento ng baterya sa aming mobile phone sa pamamagitan ng serbisyo na BLE GATT, sa ganitong paraan ipalagay ng aming Mobile na ang ESP32 ay isang aparatong Bluetooth na pinapatakbo ng baterya na sinusubukan na ipadala sa porsyento ng baterya nito. Bago pumunta sa detalye ay susuriin namin ang ilang mga terminolohiya na nauugnay sa Bluetooth Mababang Enerhiya.
Mga terminolohiya na nauugnay sa BLE (Bluetooth Low Energy)
BLE Server: Tulad ng sinabi sa mas maaga ang BLE ay maaaring mai-program upang gumana alinman sa isang Server o bilang isang kliyente. Kapag nagtatrabaho bilang isang server ang BLE ay maaaring magbigay lamang ng data hindi ito maaaring magpasimula ng isang koneksyon. Ang halimbawa ay isang fitness band. Ang isang Server ay maaaring magpadala lamang ng impormasyon kung hihilingin ito ng kliyente.
Karamihan sa mga karaniwang BLE ng ESP32 ay ginagamit ng isang Server. Ang bawat Server ay magkakaroon ng isa o higit pang Serbisyo sa loob nito at katulad ng bawat serbisyo ay magkakaroon ng isa o higit pang mga katangiang nauugnay dito. Ang isang Katangian ay maaaring may zero, isa o higit pa sa isang Descriptor sa loob nito. Ang bawat Serbisyo, katangian o Descriptor ay magkakaroon ng sariling paunang natukoy na natatanging ID na tinatawag na UUID.
BLE Client: Maaaring i-scan ng kliyente ang kumonekta at makinig sa iba pang mga aparatong Bluetooth. Ang isang halimbawa ay ang iyong mobile phone. Tandaan na ang karamihan sa mga aparatong BLE hardware ay maaaring gumana bilang server at bilang client, ito ang software na nagpapasya sa papel ng aparato.
Peripheral Device / Central Device: Sa isang network na BLE maaaring mayroon lamang isang Central Device, ngunit maaaring magkaroon ng maraming mga Peripheral na aparato tulad ng kinakailangan. Ang Central Device ay maaaring kumonekta sa lahat ng mga paligid ng aparato nang sabay-sabay, ngunit ang peripheral na aparato ay maaaring kumonekta lamang sa Central Device, sa ganitong paraan walang dalawang peripheral na aparato ang maaaring magbahagi ng data sa bawat isa. Ang isang pinakamahusay na halimbawa para sa gitnang aparato ay ang aming matalinong mga Telepono at para sa Peripheral na aparato ay ang aming Bluetooth earphone o fitness band.
BLE Advertising: Ang isang BLE Advertising ay ang geeky term upang turuan ang aparato ng Bluetooth na makita ng lahat upang maaari itong ipares at magtatag ng isang koneksyon. Maaari itong maituring bilang isang paraan ng komunikasyon. Dito pinananatili ng server ang data ng advertising na inaasahan ang isang server na matanggap ito. Ang BLE Beacon ay isang uri ng BLE.
UUID (Universal Unique Identifier): Ang bawat aparato na BLE Bluetooth ay binibigyan ng isang Universal Unique Identifier Number kapag na-program ng programmer. Maaari mong isipin ang identifier na ito bilang isang pagkakasunud-sunod ng mga numero na kumakatawan sa pagpapaandar / papel ng BLE device. Muli mayroong dalawang uri ng UUID. Ang isa ay ang Serbisyo UUID at ang isa ay Characteristic UUID.
Serbisyo ng GATT: Ang GATT ay nangangahulugang Profile ng Generic na Katangian; tinutukoy nito ang ilang pamantayang paraan ng paggamit kung aling dalawang aparato ng BLE ang dapat palaging makipag-usap. Ang Katangiang (ATT) Protocol na ito ay paunang natukoy at karaniwan para sa lahat ng mga aparatong BLE kaya sa ganitong paraan maaaring makilala ng alinmang dalawang BLE na aparato ang bawat isa. Kaya ang GATT ang sagot sa aming dating katanungan.
Ang pamamaraan na gumagamit ng aling dalawang aparato ng BLE na dapat magpadala ng data sa at pabalik ay tinukoy ng konsepto na tinatawag na mga serbisyo at katangian.
Katangian ng BLE Service / BLE: Sinasabi sa amin ng Serbisyo UUID kung anong uri ng serbisyo ang isasagawa ng BLE device at sinasabi ng Characteristic UUID kung ano ang mga parameter o pagpapaandar na isasagawa ng serbisyong iyon. Kaya't ang bawat Serbisyo ay magkakaroon ng isa o higit pang mga katangian sa ilalim ng mga ito. Sige! Saan nakukuha ng programmer ang UUID na ito? Ang bawat UUID ay tinukoy na ng GATT (Generic Profile ng Katangian) maaari mong bisitahin ang kanilang website at piliin ang UUID ayon sa kinakailangan para sa proyekto. Alam kong ito ay bounced ng kaunti sa aming ulo; subukan nating unawain ito sa isang halimbawa.
Ipagpalagay natin ang BLE aparato ng isang audio player. Pangunahin kapag ipinares mo ito sa iyong telepono, kinikilala ito ng iyong telepono bilang isang audio device at ipinapakita rin ang antas ng baterya sa status bar. Kaya, para mangyari ito ang audio player ay dapat na sabihin sa iyong telepono na handa itong ibahagi ang antas ng baterya at ang porsyento ng pagsingil na mayroon ito sa baterya. Ginagawa ito sa pamamagitan ng paggamit ng UUID, mayroong isang tukoy na UUID na nagsasabi na ang BLE dice ay magbibigay ng mga detalye tungkol sa antas ng baterya ng UUID na ito na nagsasabi sa uri ng serbisyo na tinatawag na Serbisyo UUID, muli maaaring mayroong maraming mga parameter na kailangang ipinagpapalit para sa pagkumpleto ng isang serbisyo tulad ng halaga ng baterya ay nasa naturang parameter, ang bawat parameter ay magkakaroon ng sarili nitong UUID at ang mga ito ay tinatawag na Characteristic UUID.Ang karaniwang pag-andar na ginaganap ng isang katangian ay Basahin, Isulat, Abisuhan at Ipahiwatig.
BLE Descriptor: Ang Descriptor ay isang opsyonal na katangian na naroroon sa loob ng Katangian. Karaniwang tumutukoy ang isang Descriptor kung paano i-access ang isang Katangian.
BLE Beacon: Ang isang Bluetooth Beacon ay mas katulad ng isang proximity switch na nagsasagawa ng paunang natukoy na pagkilos kapag ang gumagamit ay nasa isang saklaw (malapit na kalapitan). Ini-advertise nito ang pagkakakilanlan nito sa lahat ng oras at samakatuwid ay handa nang pares palagi.
BLE2902: Nag-aalangan pa rin ako tungkol sa bagay na ito, ngunit maaari mo itong isipin bilang isang piraso ng software sa panig ng client na ipaalam sa server na buksan o Patayin ang abiso makakatulong ito sa amin sa pag-save ng lakas
Inaasahan kong nakakuha ka ng isang magaspang na ideya, ang mabuti ay hindi namin masyadong alam dahil lahat ng gawaing kamay ay tapos na para sa amin bagaman ang mga aklatan.
Paghahanda ng hardware
Ang proyekto ay hindi nangangailangan ng pag-set up ng hardware ngunit tiyaking naidagdag mo ang mga detalye ng board ng ESP32 sa iyong Arduino IDE at sinubukan ang minimum na sample na blink na programa upang suriin kung gumagana ang lahat ayon sa inaasahan. Nag-aalangan ka sa kung paano ito gawin maaari mong sundin ang Pagsisimula sa ESP32 na may Arduino tutorial upang gawin ang pareho.
Gayundin upang subukan ang mga serbisyo ng BLE gagamitin namin ang nRF android application sa aming mobile na maaaring direktang mai-download mula sa PlayStore. Magagamit din ito sa Itunes Store para sa mga gumagamit ng Iphone. Kung nagpaplano kang makipagtulungan sa BLE sa mahabang panahon, talagang magagamit ang application na ito para sa mga layunin sa pag-debug.
Programming ESP32 para sa Antas ng Antas ng Baterya gamit ang serbisyo ng GATT
Sa oras na ito ipinapalagay ko na mayroon kang isang patas na ideya sa kung anong serbisyo ng GATT at kung paano ito ipinatupad gamit ang Serbisyo at mga modelo ng katangian. Ngayon, sumisid tayo sa programa upang malaman kung paano ito ipinatupad sa ESP32 gamit ang Arduino IDE. Bago kami magpatuloy nais kong gamitin ang puwang na ito upang pasasalamatan si Andreas Spiess para sa kanyang video na BLE na ginawang malinaw ang mga bagay sa aking panig.
Sinimulan namin ang programa sa pamamagitan ng pag-import ng kinakailangang mga aklatan sa aming sketch. Maraming mga bagay upang mai-configure upang magamit ang pagpapaandar ng B32 ng ESP32 na sana kahit salamat kay Neil Kolban na nagawa na ang pagsusumikap para sa amin at naibigay ang mga aklatan. Kung nais mong maunawaan ang pag-andar ng mga aklatan maaari kang mag-refer sa kanyang dokumentasyon sa pahina ng github.
# isama
Susunod kailangan naming tukuyin ang pagpapaandar ng Server Call-back para sa aming Bluetooth device. Bago iyon hayaan na maunawaan na kung ano ang callback function sa BLE.
Ano ang pagpapaandar ng callback sa BLE?
Kapag ang BLE ay tumatakbo bilang Server mahalaga na tukuyin ang isang pagpapaandar sa callback ng Server. Maraming uri ng mga callback na nauugnay sa BLE ngunit upang gawing simple isinasaalang-alang mo ang mga ito bilang isang pagkilala na ginagawa upang matiyak na ang pagkilos ay nakumpleto. Ginagamit ang isang server callback upang matiyak na ang koneksyon sa pagitan ng client at server ay matagumpay na naitatag.
Ginagamit namin ang mga sumusunod na linya ng code upang magsagawa ng isang callback ng server.
bool _BLEClientConnected = false; klase MyServerCallbacks : pampublikong BLEServerCallbacks { void onConnect (BLEServer * pServer) { _BLEClientConnected = true; }; void onDisconnect (BLEServer * pServer) { _BLEClientConnected = false; } };
Sa loob ng walang bisa na pag- andar ng pag- setup , sinisimulan namin ang Serial na komunikasyon sa 115200 para sa pag-debug at pagkatapos ay gawing simula ang Bluetooth Device sa pamamagitan ng pagpapaandar na InitBLE .
void setup () { Serial.begin (115200); Serial.println ("Tagapagpahiwatig ng Antas ng Baterya - BLE"); InitBLE (); }
Ang initBLE ay ang lugar kung saan nangyayari ang lahat ng mahika. Kailangan naming lumikha ng isang server ng Bluetooth at gamitin ang serbisyo sa Antas ng Baterya dito. Ngunit bago ito kailangan naming tukuyin ang UUID para sa Serbisyo, Katangian at Descriptor para sa pagbabasa ng Antas ng baterya. Ang lahat ng UUID ay maaaring makuha mula sa website ng serbisyo ng Bluetooth GATT. Para sa aming kaso sinusubukan naming gamitin ang serbisyo ng baterya at UUID para dito ay tinukoy bilang 0X180F tulad ng ipinakita sa ibaba.
Susunod, kailangan nating malaman ang Katangian na nauugnay sa serbisyong ito. Upang malaman na mag-click lamang sa Serbisyo ng Baterya at dadalhin ka sa pahina ng Mga Katangian ng Serbisyo, kung saan nabanggit na ang Antas ng baterya ay ang pangalan ng mga katangian at tumatagal ito ng halaga mula 0 hanggang 100. Tandaan din na maaari lamang tayong magsagawa ng dalawang mga aksyon na may katangiang ito, ang isa ay Basahin kung alin ang sapilitan gawin at ang isa pa ay Abisuhan kung alin ang Opsyonal. Kaya kailangan naming ipadala ang halaga ng baterya sa client (Telepono) na ipinag-uutos at kung kinakailangan maaari naming abisuhan ang telepono tungkol sa kung alin ang opsyonal.
Ngunit maghintay hindi pa rin namin nakita ang halaga ng UUID para sa Characteristic Level ng baterya. Upang gawin iyon makapasok sa pahina ng Characteristic ng Baterya at maghanap para sa pangalan ng Antas ng Baterya makikita mo ang UUID nito bilang 0X2A19, ang snapshot ng pareho ay ipinapakita sa ibaba.
Ngayong mayroon na tayong lahat ng mga halaga, ilagay natin ito sa programa tulad ng ipinakita sa ibaba. Ang pangalang BatterySerivce , BatteryLevelCharacteristic at BatteryLevelDescriptor ay mga variable na tinukoy ng gumagamit upang mag-refer sa Serbisyo, Katangian at Descriptor na ginagamit namin sa programa. Ang Halaga para sa Descriptor 0X2901 ay ginagamit kapag ang laki ng halaga ay 8-bit, mas maraming impormasyon ang matatagpuan pahina ng Paglalarawan ng Descriptor.
#define BatteryService BLEUUID ((uint16_t) 0x180F)
BLECharacteristic BatteryLevelCharacteristic (BLEUUID ((uint16_t) 0x2A19), BLECharacteristic :: PROPERTY_READ - BLECharacteristic :: PROPERTY_NOTIFY); BLEDescriptor BatteryLevelDescriptor (BLEUUID ((uint16_t) 0x2901));
Bumabalik sa pagpapaandar initBLE . Kailangan muna naming simulan ang server ng BLE at gawin itong i-advertise ng isang pangalan. Ang mga sumusunod na linya ay ginagamit upang simulan ang BLE bilang server. Ang pangalang ibinigay ko sa aking BLe server ay "BLE Battery", ngunit maaari kang pumili ng iyong sarili.
BLEDevice:: init ("BLE Battery"); // Lumikha ng BLE Server BLEServer * pServer = BLEDevice:: createServer (); pServer-> setCallbacks (bagong MyServerCallbacks ());
Susunod kailangan naming simulan ang serbisyo ng GATT dahil natukoy na namin ang UUID maaari naming simulan ang serbisyo gamit ang linya sa ibaba.
// Lumikha ng BLE Service BLEService * pBattery = pServer-> createService (BatteryService);
Kapag nasimulan ang serbisyo maaari naming mai- link ang deskriptor sa mga katangian, at maitakda ang mga halaga. Ang serbisyo ng BLE2902 ay idinagdag din dito tulad ng ipinakita sa ibaba.
pBattery-> addCharacteristic (& BatteryLevelCharacteristic); BatteryLevelDescriptor.setValue ("Porsyento 0 - 100"); BatteryLevelCharacteristic.addDescriptor (& BatteryLevelDescriptor); BatteryLevelCharacteristic.addDescriptor (bagong BLE2902 ());
Sa wakas ang lahat ay nakatakda, ngayon ang natitira lamang ay hilingin sa ESP32 na mag-advertise upang ang iba pang mga aparato tulad ng aming telepono ay maaaring tuklasin ito at kumonekta dito, at kapag nakakonekta sa isang kliyente dapat itong simulan ang serbisyo ng Baterya na maaaring gawin kahit na ang mga sumusunod na linya.
pServer-> getAdvertising () -> addServiceUUID (BatteryService); pBattery-> start (); // Start advertising pServer-> getAdvertising () -> start ();
Iyon ito sa ngayon napakahusay, ang huling hakbang ay upang sabihin sa deskriptor kung ano ang halaga ng baterya sa porsyento na dapat ipadala sa kliyente (Telepono). Ang halagang ito ay maaaring mula sa 0 -100 habang binabasa natin nang mas maaga, upang mapanatili ang mga bagay na simple, mayroon akong simpleng mahirap na naka-code ang halaga ng baterya upang maging 57 at pagkatapos ay dagdagan ito bawat 5 segundo at magsimula mula sa 0 sa sandaling umabot sa 100. Ang code na dapat gawin na ipinakita sa ibaba. Tandaan na ang halagang ipinapadala ay nasa format unit8_t.
uint8_t level = 57; void loop () { BatteryLevelCharacteristic.setValue (& level, 1); BatteryLevelCharacteristic.notify (); pagkaantala (5000); antas ++; Serial.println (int (antas)); kung (int (level) == 100) antas = 0; }
Pagsubok sa iyong serbisyo sa GATT sa ESP32 BLE
Ang kumpletong code na ipinaliwanag sa itaas ay ibinibigay sa dulo ng pahina. I-upload ang code sa iyong lupon ng ESP32. Kapag na-upload ang iyong telepono ay dapat makatuklas ng isang aparatong Bluetooth na tinatawag na "BLE Battery" Ipares ito.
Pagkatapos i-install ang nRF android application at buksan ito at kumonekta sa aparato ng BLE Battery BLE. Palawakin ang seksyon ng Serbisyo ng Baterya at dapat mong makita ang sumusunod na screen.
Tulad ng nakikita mo ang Application ay awtomatikong nakilala na ang BLE ay nagbibigay ng Serbisyo ng Baterya at may mga katangian ng Antas ng Baterya dahil sa UUID na ginamit namin sa programa. Maaari mo ring makita ang kasalukuyang halaga ng baterya na 67% maghintay para sa 5 segundo at maaari mo ring mapansin ang pagtaas nito.
Ang cool na bagay tungkol sa paggamit ng BLE ay na ngayon ang anumang application na gumagana sa BLE ay mag-iisip na ang iyong ESP32 ay BLE aparato na aabisuhan ang antas ng baterya. Upang subukan ito Gumamit ako ng isang application na tinatawag na BatON at kinilala ng application ang ESP32 bilang baterya na aparatong Bluetooth na baterya at ibinigay ang porsyento ng abiso sa aking telepono tulad nito
Malamig!! Di ba Ipinakita ko rin ang kumpletong pagtatrabaho sa video sa ibaba. Ngayon, na natutunan mo kung paano gamitin ang mga serbisyo ng BLE Battery sa ESP32, maaari mong subukan ang iba pang mga serbisyo ng GATT pati na rin na talagang kawili-wili tulad ng Pulse rate, HID, Heart Rate atbp.. Magsaya….