Satura rādītājs:

ESP32 Bluetooth BLE tālvadības pults: 8 soļi
ESP32 Bluetooth BLE tālvadības pults: 8 soļi

Video: ESP32 Bluetooth BLE tālvadības pults: 8 soļi

Video: ESP32 Bluetooth BLE tālvadības pults: 8 soļi
Video: DIYmall ESP32S wifi bluetooth relay module control power Adaptor 2024, Novembris
Anonim
ESP32 Bluetooth BLE tālvadības pults
ESP32 Bluetooth BLE tālvadības pults
ESP32 Bluetooth BLE tālvadības pults
ESP32 Bluetooth BLE tālvadības pults
ESP32 Bluetooth BLE tālvadības pults
ESP32 Bluetooth BLE tālvadības pults
ESP32 Bluetooth BLE tālvadības pults
ESP32 Bluetooth BLE tālvadības pults

Šis projekts ir piemērs tam, kā savienot lētu Bluetooth BLE kursorsviru ar ESP32. Kods tika uzrakstīts, izmantojot Arduino IDE Ver 1.8.5 ar papildinājumu ESP32. Izmantotā BLE kursorsvira ir komerciāla ierīce, kuru varat iegādāties internetā par mazāk nekā 20,00 ASV dolāriem vai vietējā FiveBELoW veikalā par 5,00 ASV dolāriem.

Šim projektam izmantotā kursorsvira ir Spektrum VR Control Bluetooth tālvadības pults. Tas tiek tirgots kā darbs ar Android un IOS planšetdatoriem kā kursorsviru/peli izmantošanai ar VR austiņām.

VR vadības Bluetooth tālvadības pultij ir viena kursorsvira ar X un Y asi, divas sprūda pogas priekšā un sešas pogas uz roktura. Divas no pogām ir ieslēgšanai/izslēgšanai un režīma vadībai. Pārējās četras pogas var izmantot visam, ko vēlaties. Šis projekts ir skelets vai ietvars, kas apstrādā visu Bluetooth saskarni un pogu un kursorsviru dekodēšanu. Viss, kas jums jādara, ir pievienot funkciju izsaukumus, lai apstrādātu to, ko vēlaties veikt pogām un kursorsviru. Lai izmantotu šo ietvaru, jums nekas nav jāzina par Bluetooth.

Ir daudz vietņu ar detalizētiem norādījumiem par Arduino IDE un ESP32 papildinājuma instalēšanu. Es nemēģināšu šeit atkārtot šo informāciju. Google un sekojiet norādījumiem.

Sistēma ir adaptācija BLE klienta piemēram, ko publicējis IoT Sharing. Jūs to varat atrast šeit. Jūs varat izpētīt šo kodu, lai gūtu priekšstatu par BLE darbību. Expressif ir pilns piemērs GATT BLE klientam un sīki izskaidro darbību (nav rakstīts Arduino IDE). Jūs to varat iegūt šeit.

Šī nav BLE apmācība. Es detalizēti nepaskaidrošu, kā kods darbojas. Es izmantošu BLE terminoloģiju, lai aprakstītu dažas kursorsviras funkcijas. Koda daļa, kas jāmaina jūsu projektam, tiks detalizēti izskaidrota, lai palīdzētu jums to mainīt. Darbības joma ir ierobežota, lai šī instrukcija būtu īsa un koncentrēta uz kursorsviras izmantošanu.

1. darbība. Mazliet par Bluetooth zemas enerģijas patēriņu (BLE)

Tas nav paredzēts kā BLE apmācība. Sākot šo projektu, es nezināju atšķirību starp BLE un klasisko Bluetooth. Es tikai gribēju noskaidrot, vai es varu iegūt nopirkto kursorsviru darbam ar ESP32. Turpmākajā tekstā es izmantoju BLE terminoloģiju, lai sniegtu vienkāršotu pārskatu par BLE darbību.

BLE izmanto klienta/servera arhitektūru. Viena ierīce ir serveris, kas sniedz pakalpojumus. Otra ierīce ir klients, kas patērē pakalpojumus. Lai samazinātu jaudas prasības, BLE pārraida tikai nelielas informācijas paketes, kad notiek izmaiņas. Kursorsviras gadījumā kursorsviras ierīce ir serveris. Kā serveris tas reklamē sevi un pēc pieprasījuma pārsūta sniegto pakalpojumu sarakstu. Kursorsviras ierīce reklamē piecus pakalpojumus. Vienīgais pakalpojums, kas mūs interesē, ir pakalpojums BLE HID (cilvēka saskarnes ierīce). BLE pakalpojums ir saistīts ar tā sauktajām īpašībām. Raksturlielums parasti ir datu avots. Kursorsviras HID pakalpojumam ir desmit raksturlielumi. Dažas īpašības ir dublikāti un tiek ignorētas. Mūs interesē tikai BLE pārskata raksturojums, kam ir lasīšanas un paziņošanas iespējas. Trīs raksturlielumi atbilst šīm prasībām un sniedz datus par kursorsviru stāvokli un pogu stāvokli. Kad paziņojums ir iespējots, serveris nosūtīs datu paketes, kad tiks konstatētas izmaiņas saistītajā raksturlielumā.

Sistēma pārbauda, vai tā atrastajam serverim ir pakalpojums BLE HID, un pēc tam iespējo paziņojumus trīs pārskata raksturlielumos, kas nodrošina kursorsviru un pogu stāvokļa informāciju. Pēc tam, nospiežot vai atlaižot pogu vai pārvietojot kursorsviru, ESP32 saņem datu paketi, kurā norādīts, kāda ir jaunā kursorsviras pozīcija un/vai dažu pogu stāvoklis.

2. darbība. Skenēšanas un savienojuma indikatori

Sistēma definē divas gaismas diodes, ZAĻOTAS un ZILAS, un piešķir tās divām ESP32 GPIO tapām. ZAĻAIS iedegas, kad ESP32 meklē BLE kursorsviru. Kad kursorsvira ir atrasta, ZAĻAIS ir izslēgts un iedegts BLUELED, norādot, ka savienojums ir izveidots un esat gatavs darbam. Ja savienojums tiek pārtraukts, BLUELED tiek izslēgts, ESP32 tiek atiestatīts, GREENLED iedegas un skenēšana sākas no jauna. Ja kursorsviru neatrod trīsdesmit sekunžu laikā, skenēšana tiek pārtraukta un ZAĻAIS izslēdzas. Pēc piecām sekundēm skenēšana tiek atsākta un zaļā krāsa tiek ieslēgta.

Gala rezultāts ir tāds, ka ESP32 turpinās skenēt kursorsviru, līdz tā to atradīs. Kad savienojums ir izveidots, ja tas tiek pazaudēts, ESP32 atiestatās un atkal sāk skenēšanu. ESP32 tiek atiestatīts, jo nav ESP32 SDK funkciju, lai atiestatītu Bluetooth kaudzīti, lai atsāktu skenēšanu.

3. darbība: kursorsviru un pogu notikumu atšifrēšana

Viens ESP32 atzvanīšanas notikums no servera saņem trīs dažādas datu paketes trim raksturlielumiem, kas tika iestatīti paziņojumu sniegšanai. Viena pakete ir četrus baitus gara. Trīs no baitiem satur X ass pozīciju, Y ass pozīciju un sprūda pogas, kuras baitā ir kartētas. Pārējās divas paketes ir pa diviem baitiem, un tām ir viens baits ar bitu kartēšanas pogas stāvokli. Saņemtās paketes tiek atšifrētas un atmiņā iekopētas baitu masīvā. Kursorsviras asu dati nonāk X un Y datu baitos, un katrs no trīs bitu kartētajiem pogas baitiem tiek novirzīts šīm pogām atbilstošajā baitā.

Tiek izveidots FreeRTOS uzdevums, lai apstrādātu paziņojumos saņemtos datus. Viens uzdevums kursorsviru un sprūda pogām, viens uzdevums A & B pogām un viens uzdevums C & D pogām. Katram no šiem uzdevumiem ir skaidri iezīmētas jomas, kurās jums jāpievieno kods, lai notikumā darītu to, ko vēlaties. Uzdevuma pamattekstā meklējiet komentāru "// ===== pievienot savu kodu šeit =====" un pievienojiet savu kodu pēc tā. Katram uzdevumam ir komentārs, kas norāda, kam tas tiek izmantots, un izmanto Serial.println (), lai izdrukātu ziņojumu par notikušo notikumu.

Šeit ir piemērs no pogas A/B uzdevuma;

void taskButtonAB (void *parametrs) {pogas uint8_t;

// ===== ja uzdevumam nepieciešama vienreizēja inicializācija, ievietojiet to šeit =====

kamēr (true) {// atmest CPU, gaidīt jaunus datus vTaskSuspend (NULL); // mēs tikko pamodāmies, pieejami jauni dati pogas = VrBoxData [VB_BTNAB]; Serial.printf ("A/B pogas: %02X / n", pogas); if (pogas & VB_BUTTON_A) {// poga A tiek nospiesta vai tiek turēta nospiesta Serial.println ("Poga A"); // ===== pievienojiet savu kodu šeit =====}

ja (pogas un VB_BUTTON_B)

{// poga B tiek nospiesta vai tiek turēta nospiesta Serial.println ("Poga B");

// ===== pievienojiet savu kodu šeit =====

}} // priekš} // taskButtonAB

4. solis: VR kastes darbība: kursorsvira

Ja kursorsviru atstāj vidējā pozīcijā, kursorsviru paziņojumi netiek nosūtīti. Kad kursorsviru pārvieto no centra, apmēram ik pēc 15 ms tiek nosūtīts paziņojums ar kursorsviras datiem un sprūda pogas datiem. Pārvietojot kursorsviru atpakaļ uz centru, paziņojums par tā pārvietošanu uz centru netiek nosūtīts. Citiem vārdiem sakot, tas norāda, ka kursorsvira ir pārvietota ārpus centra, bet ne tas, ka tā ir pārvietota uz centru. Gala rezultāts ir tāds, ka jūs saņemat ziņojumus, kas norāda, ka kursorsviru virzās uz centru, bet ne to, ka tā ir sasniegusi centru. Ļoti kaitinoši. Abas sprūda pogas ir iekļautas kursorsviru datos. Nospiežot vienu no sprūda pogām pēc kursorsviras atgriešanas centrā, kursorsviras pozīcija tiks atjaunota līdz nullei. Sistēmai ir iebūvēts taimauta taimeris, kas īsā laikā automātiski simulē kursorsviru paziņojuma ziņojumu, kad visi kursorsviras/sprūda pogas paziņojumu ziņojumi vairs netiek saņemti. Taimeris kursorsviru iestata uz nulli. Kursorsviras diapazons ir aptuveni +/- 25 uz katras ass.

5. darbība: VR kastes darbība: aktivizēšanas pogas

Sprūda pogas nosūta paziņojumu vienu reizi, kad tiek nospiests, un vēlreiz, kad tas tiek atlaists. Nospiestais paziņojuma ziņojums norāda uz nospiesto pogu. Paziņojums par atbrīvošanu norāda, ka abas pogas ir atlaistas.

Turot nospiestu apakšējo sprūda pogu, serveris nevarēs noteikt, ka ir nospiesta augšējā sprūda poga. Turot nospiestu augšējo sprūda pogu un nospiežot apakšējo sprūda pogu, serveris nosūta paziņojumu, ka tiek nospiesta apakšējā sprūda poga (augšējā sprūda poga būs nulle!). Atlaižot apakšējo sprūda pogu, serveris nosūtīs paziņojumu, ka augšējā sprūda poga ir nospiesta un apakšējais sprūda tiek atlaists.

Citiem vārdiem sakot, apakšējā sprūda poga dominē pār augšējo sprūda pogu un to ignorēs, nospiežot abus. Jums ir jānosaka, kā rīkoties gadījumā, ja abas pogas tiek nospiestas.

6. darbība: VR kastes darbība: A/B pogas

Pogas A un B darbojas kā kursorsvira un nepārtraukti nosūta paziņojumus, kad tās tiek nospiestas un turētas. Ziņojumi tiek pārtraukti, kad poga tiek atlaista. Pogas A un B darbojas līdzīgi aktivizēšanas pogām, jo poga A dominē B pogai tāpat kā apakšējā sprūda poga dominē augšējā sprūda pogai.

7. solis: VR kastes darbība: C/D pogas

Pogas C un D nosūta paziņojumu vienu reizi, kad tās tiek nospiestas, un vēlreiz, kad tās tiek atlaistas. Turot nospiestu, turpmākas ziņas netiek sūtītas, līdz tās tiek atbrīvotas. Turot nospiestu vienu no C vai D pogām, serveris nevarēs noteikt otras pogas aktivitātes.

8. solis. Secinājums

Pogu darbība, manuprāt, ir nedaudz satraucoša. Sistēma paredz vietas, kur ievietot kodu, lai rīkotos, nospiežot pogu. Ja jums ir arī jānosaka pogu atbrīvošana, jums atliek izdomāt, kā rīkoties.

Pilnībā jūsu ziņā ir noteikt, ko vēlaties katrai pogai darīt, un to, kas jādara kursorsviru pārvietošanai. Tas, kā rīkoties ar sprūda, A & B un C & D pogu atšķirībām, ir atkarīgs no jums.

Meklējiet kodu; taskJoyStick (), taskButtonAB (), taskButtonCD () funkcijas un pievienojiet savu kodu aiz komentāra "// ===== add your code here =====".

Lai vadītu kursorsviru, jums būs nepieciešamas līdz četrām funkcijām (uz priekšu, atpakaļ, pa labi un pa kreisi), un līdz sešām funkcijām, lai apstrādātu dažādas pogas. Īstenojiet tos visus vai tikai to, kas jums nepieciešams. Izvēle ir tava.

Ja izmantojat šo ietvaru. Es labprāt kliegtu par to, kādam nolūkam jūs to izmantojāt un vai jums šķita, ka to ir viegli lietot.

Ja jums ir jautājumi par to, kā tas darbojas, vai nepieciešama palīdzība, lai tas darbotos, sazinieties ar mani.

Kods ir pieejams vietnē GitHub šeit.

Izbaudi.

Ieteicams: