Përmbajtje:

Telekomandë ESP32 Bluetooth BLE: 8 hapa
Telekomandë ESP32 Bluetooth BLE: 8 hapa

Video: Telekomandë ESP32 Bluetooth BLE: 8 hapa

Video: Telekomandë ESP32 Bluetooth BLE: 8 hapa
Video: Home Automation: 12V Relay with LED Display Delay 0.1 seconds to 999 seconds Timer module P1 to P4 2024, Nëntor
Anonim
Telekomandë ESP32 Bluetooth BLE
Telekomandë ESP32 Bluetooth BLE
Telekomandë ESP32 Bluetooth BLE
Telekomandë ESP32 Bluetooth BLE
Telekomandë ESP32 Bluetooth BLE
Telekomandë ESP32 Bluetooth BLE
Telekomandë ESP32 Bluetooth BLE
Telekomandë ESP32 Bluetooth BLE

Ky projekt është një shembull se si të lidhni një levë të lirë Bluetooth BLE me një ESP32. Kodi është shkruar duke përdorur Arduino IDE Ver 1.8.5 me shtesën ESP32. Xhojstili i përdorur BLE është një pajisje komerciale që mund ta blini në internet për më pak se 20,00 dollarë ose nga dyqani juaj lokal i pesëBELoW për 5,00 dollarë.

Joystick që kam përdorur për këtë projekt është një Telekomandë Bluetooth Spektrum VR Control. Po tregtohet si duke punuar me tabletët Android dhe IOS si një levë/mi për përdorim me kufjet VR.

Telekomanda e Kontrollit VR Bluetooth ka një levë të vetme me boshtin X dhe Y, dy butona këmbëzash përpara dhe gjashtë butona në dorezë. Dy nga butonat janë për ndezjen/fikjen e energjisë dhe kontrollin e modalitetit. Katër butonat e tjerë mund të përdoren për gjithçka që dëshironi. Ky projekt është një skelet ose kornizë që trajton të gjithë ndërfaqen dhe dekodimin e Bluetooth të butonave dhe levës. E tëra çfarë ju duhet të bëni është të shtoni thirrjet e funksioneve për të trajtuar atë që dëshironi të bëjnë butonat dhe levë. Nuk keni nevojë të dini asgjë për Bluetooth për të përdorur këtë kuadër.

Ka uebfaqe të shumta me udhëzime të hollësishme për instalimin e Arduino IDE dhe shtesës ESP32. Unë nuk do të përpiqem ta përsëris atë informacion këtu. Google atë dhe ndiqni udhëzimet.

Kuadri është një përshtatje e një shembulli të klientit BLE të botuar nga IoT Sharing. Mund ta gjeni këtu. Ju mund ta studioni këtë kod për të marrë një ide se si funksionon BLE. Expressif ka një shembull të plotë për një klient GATT BLE dhe shpjegon operacionin në detaje (nuk është shkruar për Arduino IDE). Mund ta merrni këtu.

Ky nuk është një mësim BLE. Unë nuk do të shpjegoj se si funksionon kodi në detaje. Unë do të përdor terminologjinë BLE për të përshkruar disa nga tiparet e levës. Pjesa e kodit që duhet të modifikoni për projektin tuaj do të shpjegohet në detaje për t'ju ndihmuar ta modifikoni atë. Qëllimi është i kufizuar për ta mbajtur këtë Instructable të shkurtër dhe të fokusuar në përdorimin e levës.

Hapi 1: Pak për Bluetooth me energji të ulët (BLE)

Ky nuk ka për qëllim të jetë një mësim mbi BLE. Kur fillova këtë projekt, nuk e dija ndryshimin midis BLE dhe Bluetooth Classic. Unë thjesht doja të shihja nëse mund ta merrja levën e blerë për të punuar me ESP32. Në tekstin e mëposhtëm unë jam duke përdorur terminologjinë BLE për të dhënë një pasqyrë të thjeshtuar se si funksionon BLE.

BLE përdor një arkitekturë klient/server. Një pajisje është një server që ofron shërbime. Pajisja tjetër është një klient që konsumon shërbime. Për të mbajtur poshtë kërkesat e energjisë, BLE transmeton vetëm pako të vogla informacioni kur ndodh një ndryshim. Në rastin e levës, pajisja e levës është një server. Si server, ai reklamon veten dhe do të transmetojë një listë të shërbimeve që ofron kur kërkohet. Pajisja e levës reklamon pesë shërbime. Shërbimi i vetëm për të cilin jemi të interesuar është shërbimi BLE HID (Pajisja e Ndërfaqes Njerëzore). Një shërbim BLE ka ato që njihen si Karakteristika të lidhura me të. Një Karakteristikë është zakonisht një burim i të dhënave. Shërbimi HID i levës ka dhjetë Karakteristika. Disa nga Karakteristikat janë kopjuar dhe nuk merren parasysh. Ne jemi të interesuar vetëm për Karakteristikat e Raportit BLE që kanë aftësi Leximi dhe Njoftimi. Tre nga karakteristikat plotësojnë këto kërkesa dhe japin të dhëna në lidhje me pozicionin e levës dhe gjendjen e butonave. Kur njoftimi është i aktivizuar, serveri do të dërgojë pako të dhënash kur zbulohet një ndryshim në karakteristikën e lidhur.

Kuadri verifikon që serveri që gjen ka shërbimin BLE HID dhe më pas do të aktivizojë Njoftimet për tre Karakteristikat e Raportit që ofrojnë informacione për gjendjen dhe butonin. Pastaj, kur një buton shtypet ose lëshohet ose lëviz levën, ESP32 merr një paketë të dhënash që i tregon asaj se cila është pozicioni i ri i levës dhe/ose gjendja e disa butonave.

Hapi 2: Treguesit e skanimit dhe lidhjes

Kuadri përcakton dy LEDS, GREENLED dhe BLUELED dhe i cakton ato në dy nga kunjat GPIO të ESP32. GREENLED ndizet kur ESP32 po kërkon levën BLE. Kur të gjendet levë, GREENLED fiket dhe BLUELED ndizet për të treguar që lidhja është krijuar dhe ju jeni gati për të shkuar. Nëse lidhja humbet, BLUELED fiket, ESP32 rivendoset, GREENLED ndizet dhe skanimi fillon përsëri. Nëse levë nuk gjendet brenda tridhjetë sekondave, atëherë skanimi ndalon dhe GREENLED fiket. Pas pesë sekondash, skanimi fillon përsëri dhe GREENLED është ndezur.

Rezultati përfundimtar është se ESP32 do të vazhdojë të skanojë për levën derisa ta gjejë. Sapo të bëhet lidhja, nëse humbet më pas, ESP32 do të rivendoset vetë dhe do të fillojë skanimin përsëri. ESP32 është rivendosur sepse nuk ka funksione ESP32 SDK për të rivendosur grupin Bluetooth për të rifilluar skanimin.

Hapi 3: Deshifrimi i Ngjarjeve të Joystick dhe Button

Një ngjarje e thirrjes në ESP32 merr tre pako të ndryshme të të dhënave nga serveri për tre Karakteristikat që u krijuan për të siguruar Njoftime. Një paketë është e gjatë katër bytes. Tre nga bajtët përmbajnë pozicionin e boshtit X, pozicionin e boshtit Y dhe butonat e shkyçjes, të cilat janë të shënuar pak në bajt. Dy paketat e tjera janë dy bajt secila dhe kanë një bajt të vetëm që ka gjendjen e butonit të bit -it të hartuar. Paketat e marra dekodohen dhe kopjohen në një grup byte në memorie. Të dhënat e boshtit të levës hyjnë në bajtët e të dhënave X dhe Y dhe secili prej bajtëve të butonave të shënuar me tre bit drejtohet në bajtin e duhur për ato butona.

Një detyrë FreeRTOS është krijuar për të trajtuar të dhënat e marra nga njoftimet. Një detyrë për butonat e levës dhe këmbëzës, një detyrë për butonat A & B dhe një detyrë për butonat C & D. Secila prej këtyre detyrave ka shënuar qartë fushat ku duhet të shtoni kodin tuaj për të bërë atë që dëshironi me ngjarjen. Kërkoni komentin "// ===== shtoni kodin tuaj këtu =====" në trupin e detyrës dhe shtoni kodin tuaj pas tij. Çdo detyrë ka një koment që tregon se për çfarë përdoret dhe përdor një Serial.println () për të printuar një mesazh në lidhje me ngjarjen që ka ndodhur.

Këtu është një shembull nga detyra e butonit A/B;

void taskButtonAB (parametër i pavlefshëm) {uint8_t buttons;

// ===== nëse detyra kërkon një inicim të njëhershëm, vendoseni këtu =====

ndërsa (e vërtetë) {// hiqni dorë nga CPU, prisni për të dhëna të reja vTaskSuspend (NULL); // sapo u zgjuam, të dhëna të reja janë në dispozicion butona = VrBoxData [VB_BTNAB]; Serial.printf ("Butonat A/B: %02X / n", butona); if (butonat & VB_BUTTON_A) {// butoni A i shtypur ose po mbahet i shtypur Serial.println ("Butoni A"); // ===== shtoni kodin tuaj këtu =====}

nëse (butonat & VB_BUTTON_B)

{// butoni B është shtypur ose po mbahet i shtypur Serial.println ("Butoni B");

// ===== shtoni kodin tuaj këtu =====

}} // për} // taskButtonAB

Hapi 4: VR Funksionimi i Kutisë: Joystick

Nëse levë lihet në pozicionin qendror, nuk dërgohen njoftime për levë. Pasi levizja levizet nga qendra, nje mesazh njoftimi me te dhenat e levave dhe te dhenave te butonit te ndezjes dergohet per cdo 15mS. Kur levë kthehet në qendër, një njoftim se është zhvendosur në qendër nuk dërgohet. Me fjalë të tjera, ju tregon se levë është zhvendosur nga qendra, por jo se është zhvendosur në qendër. Rezultati përfundimtar është që ju të merrni mesazhe që tregojnë se levë po lëviz drejt qendrës, por jo se ka arritur në qendër. Shumë i bezdisshëm. Dy butonat e këmbëzës përfshihen me të dhënat e levës. Shtypja e njërit prej butonave të këmbëzës pas kthimit të levës në qendër do të përditësojë pozicionin e levës në zero. Kuadri ka një kohëmatës të skadimit të integruar në të, i cili simulon automatikisht një mesazh njoftimi të levës, një kohë të shkurtër pasi të gjithë mesazhet e njoftimit të njoftimit të komandës/shkopit të ndalojnë të mbërrijnë. Kohëmatësi e vendos levën në zero. Joystick ka një gamë prej rreth +/- 25 në secilin aks.

Hapi 5: Funksionimi i Kutisë VR: Shkaktoni butona

Butonat e shkyçjes do të dërgojnë një mesazh njoftimi një herë kur shtypen dhe përsëri kur lëshohen. Mesazhi i njoftimit të shtypur do të tregojë butonin që është shtypur. Mesazhi i njoftimit të lëshimit tregon se të dy butonat janë lëshuar.

Mbajtja e butonit të poshtëm të këmbëzës do të parandalojë që serveri të zbulojë që butoni i sipërm i këmbëzës është shtypur. Mbajtja e butonit të sipërm të këmbëzës dhe shtypja e butonit të ulët të shkrepjes rezulton në serverin që dërgon një mesazh njoftimi se shtypet butoni i poshtëm i këmbëzës (butoni i sipërm i këmbëzës do të jetë zero!). Lëshimi i butonit të poshtëm të këmbëzës do të bëjë që serveri të dërgojë një njoftim se butoni i sipërm i këmbëzës shtypet dhe këmbëzimi i poshtëm lëshohet.

Me fjalë të tjera, butoni i poshtëm i këmbëzës është dominues mbi butonin e sipërm të këmbëzës dhe do ta anulojë atë kur të dyja të shtypen. Ju duhet të përcaktoni se si të trajtoni rastin e shtypjes së të dy butonave.

Hapi 6: Funksionimi i Kutisë VR: Butonat A/B

Butonat A dhe B veprojnë si levë dhe dërgojnë vazhdimisht mesazhe njoftimi kur shtypen dhe mbahen të shtypur. Mesazhet ndalojnë kur butoni lëshohet. Butonat A dhe B funksionojnë ngjashëm me butonat Trigger në atë që butoni A dominon butonin B ashtu si butoni i këmbëzës së poshtme dominon butonin e sipërm të këmbëzës.

Hapi 7: Funksionimi i Kutisë VR: Butonat C/D

Butonat C dhe D dërgojnë një mesazh njoftimi një herë kur shtypen dhe përsëri kur lëshohen. Nëse mbahen të shtypura, nuk dërgohen mesazhe të tjera derisa të lëshohen. Mbajtja e njërës prej butonave C ose D do të parandalojë që serveri të zbulojë aktivitetin në butonin tjetër.

Hapi 8: Përfundimi

Për mendimin tim, funksionimi i butonave është pak i çuditshëm. Korniza siguron vende për të vënë kodin tuaj në veprim kur shtypet një buton. Nëse gjithashtu keni nevojë të zbuloni lëshimet e butonave, kjo ju mbetet juve të kuptoni se si ta bëni.

Varet plotësisht nga ju që të përcaktoni se çfarë doni të bëni çdo buton dhe çfarë duhet të bëjë lëvizja e levës. Se si i trajtoni dallimet në këmbëzën, A & B dhe butonat C & D varet nga ju.

Shikoni në kodin për; taskJoyStick (), taskButtonAB (), taskButtonCD () funksionon dhe shtoni kodin tuaj pas komentit "// ===== shtoni kodin tuaj këtu =====".

Do t'ju duhen deri në katër funksione për të trajtuar levën (përpara, prapa, djathtas dhe majtas) dhe deri në gjashtë funksione për të trajtuar butonat e ndryshëm. Zbatojini të gjitha ose vetëm atë që ju nevojitet. Zgjedhja është e juaja.

Nëse përdorni këtë kornizë. Do të më pëlqente një britmë për atë për të cilën e keni përdorur dhe nëse e shihni të lehtë për t'u përdorur.

Nëse keni pyetje se si funksionon ose keni nevojë për ndihmë për ta bërë atë të funksionojë, më kontaktoni.

Kodi është i disponueshëm në GitHub këtu.

Shijoni.

Recommended: