Indholdsfortegnelse:
- Trin 1: Lidt om Bluetooth Low Energy (BLE)
- Trin 2: Scannings- og forbindelsesindikatorer
- Trin 3: Dekryptering af joystick- og knaphændelser
- Trin 4: Betjening af VR -boks: joysticket
- Trin 5: Betjening af VR -boks: Trigger -knapper
- Trin 6: Betjening af VR -boks: A/B -knapper
- Trin 7: Betjening af VR -boks: C/D -knapper
- Trin 8: Konklusion
Video: ESP32 Bluetooth BLE fjernbetjening: 8 trin
2024 Forfatter: John Day | [email protected]. Sidst ændret: 2024-01-30 08:29
Dette projekt er et eksempel på, hvordan man tilslutter en billig Bluetooth BLE -joystick til en ESP32. Koden blev skrevet ved hjælp af Arduino IDE Ver 1.8.5 med ESP32 -tilføjelsen. Det anvendte BLE -joystick er en kommerciel enhed, som du kan købe på Internettet for under $ 20,00 eller fra din lokale fiveBELoW -butik for $ 5,00.
Joysticket, jeg brugte til dette projekt, er en Spektrum VR -kontrol Bluetooth -fjernbetjening. Det markedsføres som arbejde med Android- og IOS -tablets som joystick/mus til brug med VR -headset.
VR -kontrol Bluetooth -fjernbetjeningen har et enkelt joystick med X- og Y -aksen, to udløserknapper foran og seks knapper på håndtaget. To af knapperne er til tænd/sluk og tilstandskontrol. De fire andre knapper kan bruges til hvad du vil. Dette projekt er et skelet eller en ramme, der håndterer alle Bluetooth -grænseflader og afkodning af knapperne og joysticket. Alt du skal gøre er at tilføje funktionsopkald for at håndtere det, du vil have knapperne og joysticket til at gøre. Du behøver ikke at vide noget om Bluetooth for at bruge denne ramme.
Der er mange websteder med detaljerede instruktioner til installation af Arduino IDE og ESP32 addon. Jeg vil ikke forsøge at gentage disse oplysninger her. Google det og følg anvisningerne.
Rammerne er en tilpasning af et BLE -klienteksempel udgivet af IoT Sharing. Du kan finde den her. Du kan studere denne kode for at få en idé om, hvordan BLE fungerer. Expressif har et komplet eksempel på en GATT BLE -klient og forklarer operationen i detaljer (ikke skrevet til Arduino IDE). Du kan få det her.
Dette er ikke en BLE -vejledning. Jeg vil ikke forklare, hvordan koden fungerer detaljeret. Jeg vil bruge BLE -terminologi til at beskrive nogle af funktionerne i joysticket. Den del af koden, du skal ændre for dit projekt, vil blive forklaret detaljeret for at hjælpe dig med at ændre den. Omfanget er begrænset til at holde denne Instructable kort og fokuseret på at bruge joysticket.
Trin 1: Lidt om Bluetooth Low Energy (BLE)
Dette er ikke beregnet til at være en tutorial om BLE. Da jeg startede dette projekt, vidste jeg ikke forskellen mellem BLE og Classic Bluetooth. Jeg ville bare se, om jeg kunne få det joystick, jeg købte, til at fungere med ESP32. I den følgende tekst bruger jeg BLE -terminologi til at give et forenklet overblik over, hvordan BLE fungerer.
BLE bruger en klient/server -arkitektur. En enhed er en server, der leverer tjenester. Den anden enhed er en klient, der bruger tjenester. For at holde strømkravene nede, sender BLE kun små pakker med information, når der sker en ændring. I tilfælde af joysticket er joystick -enheden en server. Som en server annoncerer den sig selv og sender en liste over de tjenester, den leverer, når den bliver spurgt. Joystick -enheden annoncerer fem tjenester. Den eneste service, vi er interesseret i, er BLE HID (Human Interface Device) -tjenesten. En BLE -service har det, der er kendt som egenskaber, forbundet med det. En karakteristik er typisk en datakilde. Joystickets HID -service har ti egenskaber. Nogle af egenskaberne er dubletter og ignoreres. Vi er kun interesseret i BLE -rapportens egenskaber, der har læse- og meddelelsesfunktioner. Tre af egenskaberne opfylder disse krav og giver data om joystickets position og knappernes tilstand. Når meddelelse er aktiveret, sender serveren datapakker, når der registreres en ændring i den tilhørende egenskab.
Rammerne verificerer, at den server, den finder, har BLE HID -tjenesten og aktiverer derefter meddelelser om de tre rapportkarakteristika, der giver joystick- og knapstatusinformation. Når der derefter trykkes på en knap eller slippes, eller joysticket flyttes, modtager ESP32 en pakke med data, der fortæller, hvad den nye joystickposition er og/eller tilstanden for nogle knapper.
Trin 2: Scannings- og forbindelsesindikatorer
Rammerne definerer to lysdioder, GRØNNED og BLUELED og tildeler dem to af ESP32s GPIO -ben. GRØNNED lyser, når ESP32 søger efter BLE -joysticket. Når joysticket er fundet, slukkes den GRØNNEDE, og BLUELED lyser for at angive, at forbindelsen er etableret, og du er klar til at gå. Hvis forbindelsen går tabt, slukkes BLUELED, ESP32 nulstilles, GRØNT lyser, og scanningen starter igen. Hvis joysticket ikke findes inden for tredive sekunder, stopper scanningen, og den GRØNNE slukkes. Efter fem sekunder starter scanningen igen, og den GRØNNE tændes.
Slutresultatet er, at ESP32 fortsætter med at scanne efter joysticket, indtil det finder det. Når forbindelsen er oprettet, og hvis den derefter går tabt, nulstiller ESP32 sig selv og begynder at scanne igen. ESP32 nulstilles, fordi der ikke er nogen ESP32 SDK -funktioner til at nulstille Bluetooth -stakken til genstart af scanningen.
Trin 3: Dekryptering af joystick- og knaphændelser
Én tilbagekaldshændelse på ESP32 modtager tre forskellige datapakker fra serveren til de tre egenskaber, der blev konfigureret til at give meddelelser. En pakke er fire bytes lang. Tre af bytes indeholder positionen for X -aksen, Y -aksens position og triggerknapperne, som er bitmappede i byte. De to andre pakker er to bytes hver og har en enkelt byte, der har bit -kortlagt knaptilstand. De modtagne pakker dekodes og kopieres til et byte -array i hukommelsen. Joystick -aksedataene går ind i X- og Y -databyte, og hver af de tre bit -knyttede knapbytes rettes ind i den relevante byte for disse knapper.
En FreeRTOS -opgave oprettes for at håndtere de data, der modtages af meddelelserne. En opgave til joystick- og triggerknapperne, en opgave for A & B -knapperne og en opgave for C & D -knapperne. Hver af disse opgaver har klart markerede områder, hvor du skal tilføje kode for at gøre, hvad du vil med begivenheden. Se efter kommentaren "// ===== tilføj din kode her =====" i opgavens brødtekst, og tilføj din kode efter den. Hver opgave har en kommentar, der angiver, hvad den bruges til, og bruger en Serial.println () til at udskrive en besked om den begivenhed, der opstod.
Her er et eksempel fra A/B -knapopgaven;
void taskButtonAB (void *parameter) {uint8_t knapper;
// ===== hvis opgaven kræver en initialisering én gang, skal du sætte den her =====
mens (true) {// opgive CPU'en, skal du vente på nye data vTaskSuspend (NULL); // vi vågnede lige, nye data er tilgængelige knapper = VrBoxData [VB_BTNAB]; Serial.printf ("A/B -knapper: %02X / n", knapper); hvis (knapper & VB_BUTTON_A) {// knap A trykkes eller holdes nede Serial.println ("Knap A"); // ===== tilføj din kode her =====}
hvis (knapper & VB_BUTTON_B)
{// knap B trykkes eller holdes nede Serial.println ("knap B");
// ===== tilføj din kode her =====
}} // for} // taskButtonAB
Trin 4: Betjening af VR -boks: joysticket
Hvis joysticket efterlades i midterpositionen, sendes der ingen joystick -meddelelser. Når joysticket flyttes fra midten, sendes der en meddelelse med joystickdata og triggerknapdata cirka hver 15. ms. Når joysticket flyttes tilbage til midten, sendes der ikke en meddelelse om, at det er flyttet til midten. Med andre ord fortæller det dig, at joysticket er flyttet fra midten, men ikke at det er flyttet til midten. Slutresultatet er, at du modtager meddelelser, der angiver, at joysticket bevæger sig mod midten, men ikke at det har nået midten. Meget irriterende. De to triggerknapper er inkluderet i joystickdataene. Hvis du trykker på en af udløserknapperne, efter at joysticket er vendt tilbage til midten, opdateres joystickpositionen til nul. Rammerne har en indbygget timeout-timer, der automatisk simulerer en joystick-meddelelse kort tid efter, at alle meddelelser om joystick/trigger-knap holder op med at ankomme. Timeren sætter joysticket til nul. Joysticket har en rækkevidde på ca. +/- 25 på hver akse.
Trin 5: Betjening af VR -boks: Trigger -knapper
Triggerknapperne sender en meddelelse en gang, når der trykkes på dem, og igen når de slippes. Meddelelsesmeddelelsen, der trykkes på, angiver den knap, der blev trykket på. Meddelelsen om frigivelse angiver, at begge knapper er frigivet.
Hvis du holder den nedre udløserknap, forhindrer serveren i at opdage, at der er blevet trykket på den øverste triggerknap. Hvis du holder den øverste triggerknap nede og trykker på den nederste triggerknap, resulterer serveren i en meddelelse om, at der trykkes på den nederste triggerknap (den øverste triggerknap er nul!). Hvis du slipper den nederste trigger -knap, får serveren en meddelelse om, at der trykkes på den øverste trigger -knap, og at den nederste trigger frigives.
Med andre ord er den nederste trigger -knap dominerende over den øverste trigger -knap og vil tilsidesætte den, når der trykkes på begge. Du skal bestemme, hvordan du skal håndtere sagen, hvor begge knapper trykkes ned.
Trin 6: Betjening af VR -boks: A/B -knapper
A- og B -knapperne fungerer som joysticket og sender løbende meddelelser, når de holdes nede. Beskederne stopper, når knappen slippes. A- og B -knapperne fungerer på samme måde som udløserknapperne, idet A -knappen dominerer B -knappen ligesom den nederste triggerknap dominerer den øverste triggerknap.
Trin 7: Betjening af VR -boks: C/D -knapper
C- og D -knapperne sender en meddelelse en gang, når der trykkes på dem, og igen når de slippes. Hvis den holdes nede, sendes der ikke flere meddelelser, før de er frigivet. Hvis du holder en af C- eller D -knapperne nede, forhindres serveren i at registrere aktivitet på den anden knap.
Trin 8: Konklusion
Betjeningen af knapperne er efter min mening lidt skæv. Rammerne indeholder steder, hvor du kan sætte din kode til handling, når der trykkes på en knap. Hvis du også skal registrere knapudgivelser, er det tilbage for dig at finde ud af, hvordan du gør.
Det er helt op til dig at bestemme, hvad du vil have hver knap til at gøre, og hvad bevægelse af joysticket skal gøre. Hvordan du håndterer forskellene i udløseren, A & B og C & D -knapperne er op til dig.
Se i koden for; taskJoyStick (), taskButtonAB (), taskButtonCD () funktioner og tilføj din kode efter "// ===== tilføj din kode her =====" kommentar.
Du skal bruge op til fire funktioner til at håndtere joysticket (fremad, bagud, højre og venstre) og op til seks funktioner til at håndtere de forskellige knapper. Gennemfør dem alle eller bare hvad du har brug for. Det er dit valg.
Hvis du bruger denne ramme. Jeg ville elske et råb om, hvad du brugte det til, og hvis du fandt det let at bruge.
Hvis du har spørgsmål om hvordan det fungerer eller har brug for hjælp til at få det til at fungere, så kontakt mig.
Koden er tilgængelig på GitHub her.
God fornøjelse.
Anbefalede:
Apple TV Siri fjernbetjening, hard case med Bluetooth -flisefinder: 7 trin (med billeder)
Apple TV Siri -fjernbetjening, hard case med Bluetooth Tile Finder: Jeg læste engang en beskrivelse af iPhone som en "smørstang dyppet i olie og sprittet med WD40 for godt mål!" Jeg tror, det var, da model 6 kom ud, og alle tabte deres dyre nye telefoner og knuste glasset
TV -fjernbetjening Bliver en RF -fjernbetjening -- NRF24L01+ Tutorial: 5 trin (med billeder)
TV -fjernbetjening Bliver en RF -fjernbetjening || NRF24L01+ Tutorial: I dette projekt vil jeg vise dig, hvordan jeg brugte den populære nRF24L01+ RF IC til at justere lysstyrken på en LED -strimmel trådløst gennem tre ubrugelige knapper på en fjernsyns fjernbetjening. Lad os komme igang
IRduino: Arduino fjernbetjening - Efterlign en tabt fjernbetjening: 6 trin
IRduino: Arduino fjernbetjening - Efterlign en tabt fjernbetjening: Hvis du nogensinde har mistet fjernbetjeningen til dit tv eller din dvd -afspiller, ved du, hvor frustrerende det er at skulle gå til, finde og bruge knapperne på selve enheden. Nogle gange tilbyder disse knapper ikke engang den samme funktionalitet som fjernbetjeningen. Modtag
Konverter din IR -fjernbetjening til RF -fjernbetjening: 9 trin (med billeder)
Konverter din IR -fjernbetjening til RF -fjernbetjening: I dagens Instructable viser jeg dig, hvordan du kan bruge et generisk RF -modul uden en mikrokontroller, som i sidste ende vil føre os til at bygge et projekt, hvor du kan konvertere en IR -fjernbetjening af enhver enhed til en RF Fjern. Den største fordel ved at konvertere en
Styr dine elektriske apparater med din tv -fjernbetjening (ir -fjernbetjening) med temperatur- og luftfugtighedsvisning: 9 trin
Styr dig elektriske apparater med din tv -fjernbetjening (ir -fjernbetjening) med temperatur- og luftfugtighedsdisplay: hej, jeg er Abhay, og det er min første blog om Instructables, og i dag vil jeg vise dig, hvordan du styrer dine elektriske apparater med din fjernsyns fjernbetjening ved at bygge denne simpelt projekt. tak til atl lab for støtte og levering af materialet