Sisukord:

ESP32 Bluetooth BLE kaugjuhtimispult: 8 sammu
ESP32 Bluetooth BLE kaugjuhtimispult: 8 sammu

Video: ESP32 Bluetooth BLE kaugjuhtimispult: 8 sammu

Video: ESP32 Bluetooth BLE kaugjuhtimispult: 8 sammu
Video: Andonstar AD409 Pro 10.1 inch Digital PCB Microscope 300X Magnifier with HDMI output 2024, November
Anonim
ESP32 Bluetooth BLE kaugjuhtimispult
ESP32 Bluetooth BLE kaugjuhtimispult
ESP32 Bluetooth BLE kaugjuhtimispult
ESP32 Bluetooth BLE kaugjuhtimispult
ESP32 Bluetooth BLE kaugjuhtimispult
ESP32 Bluetooth BLE kaugjuhtimispult
ESP32 Bluetooth BLE kaugjuhtimispult
ESP32 Bluetooth BLE kaugjuhtimispult

See projekt on näide sellest, kuidas ühendada odav Bluetooth BLE juhtnupp ESP32 -ga. Kood kirjutati Arduino IDE Ver 1.8.5 abil koos ESP32 lisandiga. Kasutatav BLE juhtkang on kommertsseade, mille saate osta Internetist alla 20 dollari või kohalikult viieBELoW poest 5 dollari eest.

Selle projekti jaoks kasutatav juhtnupp on Spektrum VR Control Bluetoothi kaugjuhtimispult. Seda turustatakse kui Androidi ja IOS -i tahvelarvutitega töötavat juhtkangi/hiirt VR -peakomplektide jaoks.

VR Control Bluetooth kaugjuhtimispuldil on üks juhthoob X ja Y teljega, kaks käivitusnuppu ees ja kuus nuppu käepidemel. Kaks nuppu on toite sisse/välja lülitamiseks ja režiimi juhtimiseks. Ülejäänud nelja nuppu saab kasutada mis iganes soovite. See projekt on skelett või raamistik, mis haldab kogu nuppude ja juhtkangi Bluetooth -liidest ning dekodeerimist. Kõik, mida peate tegema, on lisada funktsioonikõned, et hallata nuppude ja juhtkangi toimimist. Selle raamistiku kasutamiseks ei pea te Bluetoothist midagi teadma.

Arduino IDE ja ESP32 lisandmooduli installimiseks on palju veebisaite. Ma ei püüa seda teavet siin korrata. Googeldage ja järgige juhiseid.

Raamistik on kohandatud ILE jagamise avaldatud BLE kliendinäitest. Selle leiate siit. Seda koodi saate uurida, et saada aimu BLE toimimisest. Expressifil on täielik näide GATT BLE kliendi kohta ja see selgitab toimingut üksikasjalikult (pole Arduino IDE jaoks kirjutatud). Selle saate siit.

See pole BLE õpetus. Ma ei selgita üksikasjalikult, kuidas kood töötab. Kasutan BLE terminoloogiat, et kirjeldada juhtkangi mõningaid funktsioone. Koodi osa, mida peate oma projekti jaoks muutma, selgitatakse üksikasjalikult, et aidata teil seda muuta. Reguleerimisala on piiratud, et see juhend oleks lühike ja keskenduks juhtkangi kasutamisele.

Samm: natuke Bluetoothi madala energiatarbega (BLE) kohta

See ei ole mõeldud BLE õpetuseks. Kui ma seda projekti alustasin, ei teadnud ma erinevust BLE ja klassikalise Bluetoothi vahel. Tahtsin lihtsalt näha, kas saan ostetud juhtkangi ESP32 -ga tööle. Järgmises tekstis kasutan BLE terminoloogiat, et anda lihtsustatud ülevaade BLE toimimisest.

BLE kasutab kliendi/serveri arhitektuuri. Üks seade on teenuseid pakkuv server. Teine seade on teenuseid tarbiv klient. Selleks, et toitenõuded madalal hoida, edastab BLE muudatuste toimumisel ainult väikseid teabepakette. Juhtkangi puhul on juhthoova seade server. Serverina reklaamib ta ennast ja edastab küsimuse korral pakutavate teenuste loendi. Juhtkangi seade reklaamib viit teenust. Ainus teenus, mis meid huvitab, on teenus BLE HID (Human Interface Device). BLE -teenusega on seotud nn tunnused. Iseloom on tavaliselt andmeallikas. Juhtkangi HID -teenusel on kümme omadust. Mõned omadused on duplikaadid ja neid eiratakse. Oleme huvitatud ainult BLE aruande omadustest, millel on lugemis- ja teatamisvõimalused. Kolm omadust vastavad nendele nõuetele ja annavad andmeid juhtkangi asendi ja nuppude oleku kohta. Kui märguanne on lubatud, saadab server andmepaketid, kui nendega seotud omaduses on tuvastatud muudatus.

Raamistik kontrollib, et leitud serveril oleks teenus BLE HID, ja lubab seejärel märguanded kolmel aruandeomadusel, mis pakuvad juhtkangi ja nupu oleku teavet. Seejärel, kui nuppu vajutatakse või vabastatakse või juhtnuppu liigutatakse, saab ESP32 andmepaketi, mis ütleb, milline on juhthoova uus asend ja/või mõne nupu olek.

2. samm: skaneerimine ja ühenduse indikaatorid

Raamistik määratleb kaks LED -i, ROHELINE ja BLUELED ning määrab need kahele ESP32 GPIO -tihvtile. GREENLED süttib, kui ESP32 otsib BLE juhtkangi. Kui juhtkang on leitud, lülitub GREENLED välja ja põleb BLUELED, mis näitab, et ühendus on loodud ja olete kasutamiseks valmis. Kui ühendus katkeb, on BLUELED välja lülitatud, ESP32 lähtestatakse, ROHELINE põleb ja skannimine algab uuesti. Kui juhtkangi ei leita 30 sekundi jooksul, siis skannimine peatub ja GREENLED lülitub välja. Viie sekundi pärast algab skannimine uuesti ja ROHELINE on sisse lülitatud.

Lõpptulemus on see, et ESP32 jätkab juhtnupu otsimist, kuni see üles leitakse. Kui ühendus on loodud, siis kui see katkeb, lähtestab ESP32 ennast ja alustab skannimist uuesti. ESP32 lähtestatakse, kuna puuduvad ESP32 SDK funktsioonid Bluetoothi virna lähtestamiseks skannimise taaskäivitamiseks.

3. samm: juhtkangi ja nuppude sündmuste dešifreerimine

Üks ESP32 tagasihelistamissündmus saab serverilt kolm erinevat andmepaketti kolme omaduse jaoks, mis olid seadistatud teatisi esitama. Üks pakett on neli baiti pikk. Kolm baiti sisaldavad X -telje asendit, Y -telje asendit ja päästiku nuppe, mis on baidis kaardistatud. Ülejäänud kaks paketti on kumbki kaks baiti ja neil on üks bait, millel on natuke kaardistatud nupu olek. Vastuvõetud paketid dekodeeritakse ja kopeeritakse mällu baidimassiivi. Juhtkangi telje andmed lähevad X ja Y andmebaitidesse ning kõik kolmest bitist kaardistatud nupu baiti suunatakse nende nuppude jaoks sobivasse baiti.

Teatistega saadud andmete töötlemiseks luuakse FreeRTOS -i ülesanne. Üks ülesanne juhtkangi ja käivitusnuppude jaoks, üks ülesannete jaoks A & B ja üks ülesanne C & D nuppude jaoks. Kõigil neil ülesannetel on selgelt tähistatud alad, kuhu peaksite lisama koodi, et teha sündmusega seda, mida soovite. Otsige ülesande tekstist kommentaari "// ===== lisage oma kood siia =====" ja lisage oma kood pärast seda. Igal ülesandel on kommentaar, mis näitab, milleks seda kasutatakse, ja kasutab sündmust käsitleva teate printimiseks Serial.println ().

Siin on näide nupu A/B ülesandest;

void taskButtonAB (void *parameeter) {nupud uint8_t;

// ===== kui ülesanne nõuab ühekordset initsialiseerimist, siis pane see siia =====

samas (tõsi) {// loobuge protsessorist, oodake uusi andmeid vTaskSuspend (NULL); // me just ärkasime, uued andmed on saadaval nupud = VrBoxData [VB_BTNAB]; Serial.printf ("A/B nupud: %02X / n", nupud); if (nupud & VB_BUTTON_A) {// nuppu A vajutatakse või hoitakse all Serial.println ("Nupp A"); // ===== lisage oma kood siia =====}

kui (nupud ja VB_BUTTON_B)

{// nuppu B vajutatakse või hoitakse all Serial.println ("Nupp B");

// ===== lisage oma kood siia =====

}} // for} // taskButtonAB

4. samm: VR -kasti kasutamine: juhtnupp

Kui juhtkang on keskmisesse asendisse jäetud, ei saadeta juhtkangi märguandeid. Kui juhtkang on keskelt välja viidud, saadetakse umbes iga 15 ms järel teatis juhtkangi andmete ja käivitusnupu andmetega. Kui juhtkangi tagasi keskele liigutatakse, ei saadeta märguannet selle keskele viimise kohta. Teisisõnu, see ütleb teile, et juhtkang on keskelt liikunud, kuid mitte, et see oleks keskele liikunud. Lõpptulemus on see, et saate teateid, mis näitavad, et juhtkang liigub keskpunkti poole, kuid mitte, et see oleks jõudnud keskele. Väga tüütu. Kaks käivitusnuppu on kaasas juhtkangi andmetega. Kui vajutate ühele päästikule pärast juhtnupu keskele naasmist, värskendatakse juhtkangi asend nulli. Raamistikul on sisseehitatud ajalõpu taimer, mis simuleerib automaatselt juhtkangi märguandesõnumit lühikese aja jooksul pärast seda, kui kõik juhtnuppu/päästikunuppu teavitavad teated lõpetavad. Taimer seab juhtkangi nulli. Juhtkangi vahemik on igal teljel umbes +/- 25.

5. samm: VR -kasti kasutamine: käivitusnupud

Päästikunupud saadavad vajutamisel üks kord ja vabastamisel uuesti teate. Vajutatud teavitusteade näitab vajutatud nuppu. Vabastusteate teade näitab, et mõlemad nupud on vabastatud.

Alumise päästiku nuppu all hoides ei saa server tuvastada ülemise päästiku nuppu. Hoides ülemist päästiku nuppu ja vajutades alumist päästiku nuppu, saadab server teate, et alumine päästiku nupp on vajutatud (ülemine päästiku nupp on null!). Alumise päästiku nupu vabastamine saadab serveri teate, et ülemist päästiku nuppu vajutatakse ja alumine päästik vabastatakse.

Teisisõnu, alumine päästiku nupp on domineeriv ülemise päästikunupu kohal ja alistab selle mõlema vajutamisel. Peate otsustama, kuidas mõlema nupu vajutamise korral hakkama saada.

6. samm: VR -kasti kasutamine: A/B -nupud

Nupud A ja B toimivad nagu juhtnupp ja saadavad pidevalt hoiatusteateid, kui neid vajutada ja all hoida. Sõnumid peatuvad nupu vabastamisel. Nupud A ja B töötavad sarnaselt käivitusnuppudega, kuna A -nupp domineerib B -nupul nagu alumine päästikunupp ülemise päästiku nupul.

7. samm: VR -kasti kasutamine: C/D -nupud

Nupud C ja D saadavad vajutamisel ühe korra ja vabastamisel uuesti teate. Kui hoiate all, ei saadeta täiendavaid sõnumeid enne nende vabastamist. Kui hoiate all mõnda C- või D -nuppu, välistab server teise nupu tegevuse tuvastamise.

8. samm: järeldus

Nuppude toimimine on minu arvates pisut vinge. Raamistik näeb ette kohad, kus oma koodi nupule vajutamisel tegutsema panna. Kui teil on vaja tuvastada ka nuppude vabastamist, jääb teil otsustada, kuidas seda teha.

See on täielikult teie otsustada, mida soovite iga nupuga teha ja mida juhtkangi liigutada. See, kuidas te päästiku, A & B ja C & D nuppude erinevustega hakkama saate, on teie otsustada.

Otsige koodist; taskJoyStick (), taskButtonAB (), taskButtonCD () funktsioone ja lisage oma kood pärast kommentaari "// ===== lisage oma kood siia =====".

Juhtkangi käsitsemiseks vajate kuni nelja funktsiooni (edasi, tagasi, paremale ja vasakule) ja kuni kuut funktsiooni erinevate nuppude käsitsemiseks. Rakendage neid kõiki või just seda, mida vajate. Valik on sinu.

Kui kasutate seda raamistikku. Mulle meeldiks hüüda selle kohta, milleks te seda kasutasite ja kas seda oli lihtne kasutada.

Kui teil on küsimusi selle toimimise kohta või vajate abi selle toimimiseks, võtke minuga ühendust.

Kood on saadaval GitHubis siin.

Nautige.

Soovitan: