Innholdsfortegnelse:
- Trinn 1: Litt om Bluetooth Low Energy (BLE)
- Trinn 2: Skannings- og tilkoblingsindikatorer
- Trinn 3: Dekryptering av joystick- og knapphendelser
- Trinn 4: Betjening av VR -boksen: styrespaken
- Trinn 5: VR Box Operation: Trigger Buttons
- Trinn 6: Betjening av VR -boks: A/B -knapper
- Trinn 7: Betjening av VR -boks: C/D -knapper
- Trinn 8: Konklusjon
Video: ESP32 Bluetooth BLE fjernkontroll: 8 trinn
2024 Forfatter: John Day | [email protected]. Sist endret: 2024-01-30 11:24
Dette prosjektet er et eksempel på hvordan du kobler en billig Bluetooth BLE -joystick til en ESP32. Koden ble skrevet ved hjelp av Arduino IDE Ver 1.8.5 med ESP32 -tillegg. BLE -joysticken som brukes er en kommersiell enhet som du kan kjøpe på Internett for mindre enn $ 20,00 eller fra din lokale fiveBELoW -butikk for $ 5,00.
Joysticken som jeg brukte til dette prosjektet er en Spektrum VR -kontroll Bluetooth -fjernkontroll. Det blir markedsført som arbeid med Android og IOS -nettbrett som en joystick/mus for bruk med VR -hodesett.
VR -kontroll Bluetooth fjernkontroll har en enkelt joystick med X- og Y -akse, to utløserknapper foran og seks knapper på håndtaket. To av knappene er for på/av og moduskontroll. De fire andre knappene kan brukes til det du vil. Dette prosjektet er et skjelett eller rammeverk som håndterer alle Bluetooth -grensesnitt og dekoding av knappene og joysticken. Alt du trenger å gjøre er å legge til funksjonsanrop for å håndtere det du vil at knappene og joysticken skal gjøre. Du trenger ikke å vite noe om Bluetooth for å bruke dette rammeverket.
Det er mange nettsteder med detaljerte instruksjoner for installering av Arduino IDE og ESP32 -tillegg. Jeg kommer ikke til å prøve å gjenta denne informasjonen her. Google det og følg instruksjonene.
Rammeverket er en tilpasning av et BLE -klienteksempel utgitt av IoT Sharing. Du finner den her. Du kan studere denne koden for å få en ide om hvordan BLE fungerer. Expressif har et komplett eksempel for en GATT BLE -klient og forklarer operasjonen i detalj (ikke skrevet for Arduino IDE). Du kan få det her.
Dette er ikke en BLE -opplæring. Jeg vil ikke forklare hvordan koden fungerer i detalj. Jeg vil bruke BLE -terminologi for å beskrive noen av funksjonene i joysticken. Den delen av koden du må endre for prosjektet ditt, vil bli forklart i detalj for å hjelpe deg med å endre den. Omfanget er begrenset til å holde denne Instructable kort og fokusert på bruk av joysticken.
Trinn 1: Litt om Bluetooth Low Energy (BLE)
Dette er ikke ment å være en opplæring om BLE. Da jeg startet dette prosjektet, visste jeg ikke forskjellen mellom BLE og Classic Bluetooth. Jeg ville bare se om jeg kunne få joysticken jeg kjøpte til å fungere med ESP32. I den følgende teksten bruker jeg BLE -terminologi for å gi en forenklet oversikt over hvordan BLE fungerer.
BLE bruker en klient/server -arkitektur. En enhet er en server som tilbyr tjenester. Den andre enheten er en klient som bruker tjenester. For å holde strømkravene nede, sender BLE bare små pakker med informasjon når det skjer en endring. Når det gjelder joysticken, er joystick -enheten en server. Som server annonserer den seg selv og sender en liste over tjenestene den tilbyr når den blir spurt. Joystick -enheten annonserer fem tjenester. Den eneste tjenesten vi er interessert i er BLE HID (Human Interface Device) -tjenesten. En BLE -tjeneste har det som er kjent som egenskaper knyttet til den. En karakteristikk er vanligvis en datakilde. HID -tjenesten til joysticken har ti egenskaper. Noen av egenskapene er dubletter og ignoreres. Vi er bare interessert i BLE -rapportegenskapene som har lese- og varslingsfunksjoner. Tre av egenskapene oppfyller disse kravene og gir data om posisjonen til styrespaken og tilstanden til knappene. Når varsling er aktivert, sender serveren datapakker når det oppdages en endring i den tilhørende egenskapen.
Rammeverket bekrefter at serveren den finner har BLE HID -tjenesten og vil deretter aktivere varsler om de tre rapportegenskapene som gir joystick- og knappestatusinformasjon. Når en knapp trykkes eller slippes eller joysticken flyttes, mottar ESP32 en datapakke som forteller hva den nye joystickposisjonen er og/eller tilstanden til noen knapper.
Trinn 2: Skannings- og tilkoblingsindikatorer
Rammeverket definerer to lysdioder, GREENLED og BLUELED og tilordner dem til to av ESP32s GPIO -pinner. GREENLED lyser når ESP32 søker etter BLE -joysticken. Når styrespaken er funnet, er den GRØNNE slått av og BLÅLED lyser for å indikere at tilkoblingen er opprettet og du er klar til å gå. Hvis tilkoblingen går tapt, blir BLUELED slått av, ESP32 tilbakestilles, GRØNNE lyser og skanningen starter igjen. Hvis styrespaken ikke blir funnet innen tretti sekunder, stopper skanningen og den GRØNNE slås av. Etter fem sekunder starter skanningen igjen, og GRØNNLEDNINGEN slås på.
Sluttresultatet er at ESP32 vil fortsette å søke etter styrespaken til den finner den. Når tilkoblingen er gjort, og hvis den går tapt, vil ESP32 tilbakestille seg selv og begynne å skanne igjen. ESP32 tilbakestilles fordi det ikke er noen ESP32 SDK -funksjoner for å tilbakestille Bluetooth -stakken for å starte skanningen på nytt.
Trinn 3: Dekryptering av joystick- og knapphendelser
En tilbakeringingshendelse på ESP32 mottar tre forskjellige datapakker fra serveren for de tre egenskapene som ble konfigurert for å gi varsler. En pakke er fire byte lang. Tre av byte inneholder posisjonen X -aksen, Y -aksens posisjon og utløserknappene, som er bitkartlagt i byten. De to andre pakkene er to byte hver og har en enkelt byte som har bitkartet knappestatus. De mottatte pakkene dekodes og kopieres til et byte -array i minnet. Joystick -aksedataene går inn i X- og Y -databyte, og hver av de tre bits tilordnede knappebyttene blir dirigert inn i den passende byten for disse knappene.
En FreeRTOS -oppgave opprettes for å håndtere dataene som mottas av varslene. En oppgave for styrespaken og utløserknappene, en oppgave for A & B -knappene og en oppgave for C & D -knappene. Hver av disse oppgavene har tydelig markerte områder hvor du bør legge til kode for å gjøre det du vil med hendelsen. Se etter kommentaren "// ===== legg til koden her =====" i oppgavens brødtekst, og legg til koden etter den. Hver oppgave har en kommentar som angir hva den brukes til, og bruker en Serial.println () til å skrive ut en melding om hendelsen som skjedde.
Her er et eksempel fra A/B -knappoppgaven;
void taskButtonAB (void *parameter) {uint8_t knapper;
// ===== hvis oppgaven krever en gang initialisering, legg den her =====
mens (true) {// gi opp CPU, vent på nye data vTaskSuspend (NULL); // vi nettopp våknet, nye data er tilgjengelige knapper = VrBoxData [VB_BTNAB]; Serial.printf ("A/B -knapper: %02X / n", knapper); hvis (knapper & VB_BUTTON_A) {// knapp A trykkes eller holdes nede Serial.println ("Knapp A"); // ===== legg til koden her =====}
hvis (knapper & VB_BUTTON_B)
{// knapp B trykkes eller holdes nede Serial.println ("knapp B");
// ===== legg til koden her =====
}} // for} // taskButtonAB
Trinn 4: Betjening av VR -boksen: styrespaken
Hvis joysticken står i midten, sendes det ingen joystickvarsler. Når styrespaken er flyttet utenfor midten, sendes en varselmelding med styrespakdata og utløserknappdata omtrent hver 15. ms. Når styrespaken flyttes tilbake til midten, sendes ikke en melding om at den har flyttet til midten. Med andre ord forteller det deg at joysticken har flyttet seg fra midten, men ikke at den har flyttet til midten. Sluttresultatet er at du mottar meldinger som indikerer at joysticken beveger seg mot midten, men ikke at den har nådd midten. Veldig irriterende. De to utløserknappene er inkludert i joystickdataene. Ved å trykke på en av utløserknappene etter at joysticken er satt tilbake til midten, oppdateres joystickposisjonen til null. Rammeverket har en innebygd tidsavbruddstimer som automatisk simulerer en joystick-varslingsmelding kort tid etter at alle varselmeldinger for joystick/trigger-knappen slutter å ankomme. Timeren setter styrespaken til null. Styrespaken har et område på omtrent +/- 25 på hver akse.
Trinn 5: VR Box Operation: Trigger Buttons
Utløserknappene sender en varslingsmelding en gang når den trykkes og igjen når den slippes. Meldingsmeldingen som trykkes vil indikere knappen som ble trykket. Meldingen om utgivelse indikerer at begge knappene slippes.
Hvis du holder inne den nedre utløserknappen, forhindres det at serveren oppdager at den øvre utløserknappen er trykket. Hvis du holder inne den øvre utløserknappen og trykker på den nedre utløserknappen, resulterer det i at serveren sender en melding om at den nedre utløserknappen er trykket (den øvre utløserknappen vil være null!). Hvis du slipper den nedre utløserknappen, vil serveren sende et varsel om at den øvre utløserknappen er trykket og den nedre utløseren slippes.
Med andre ord er den nedre utløserknappen dominerende over den øvre utløserknappen og vil overstyre den når du trykker på begge. Du må bestemme hvordan du skal håndtere saken når du trykker på begge knappene.
Trinn 6: Betjening av VR -boks: A/B -knapper
A- og B -knappene fungerer som styrespaken og sender varslingsmeldinger kontinuerlig når de holdes inne. Meldingene stopper når knappen slippes. A- og B -knappene fungerer på samme måte som Trigger -knappene ved at A -knappen dominerer B -knappen akkurat som den nedre triggerknappen dominerer den øvre triggerknappen.
Trinn 7: Betjening av VR -boks: C/D -knapper
C- og D -knappene sender en varselmelding en gang når den trykkes og igjen når den slippes. Hvis den holdes nede, sendes ingen ytterligere meldinger før de er utgitt. Hvis du holder inne en av C- eller D -knappene, forhindres det at serveren oppdager aktivitet på den andre knappen.
Trinn 8: Konklusjon
Betjeningen av knappene er etter min mening litt sprø. Rammeverket gir plass til å sette koden din på når en knapp trykkes. Hvis du også trenger å oppdage knapputgivelser, er det igjen for deg å finne ut hvordan du gjør det.
Det er helt opp til deg å bestemme hva du vil at hver knapp skal gjøre og hva som skal bevege styrespaken. Hvordan du håndterer forskjellene i utløseren, A & B og C & D -knappene er opp til deg.
Se i koden for; taskJoyStick (), taskButtonAB (), taskButtonCD () funksjoner og legg til koden din etter "// ===== legg til koden din =====" kommentar.
Du trenger opptil fire funksjoner for å håndtere styrespaken (forover, bakover, høyre og venstre) og opptil seks funksjoner for å håndtere de forskjellige knappene. Implementere dem alle eller akkurat det du trenger. Valget er ditt.
Hvis du bruker denne rammen. Jeg vil gjerne rope ut hva du brukte det til, og hvis du synes det var enkelt å bruke.
Hvis du har spørsmål om hvordan det fungerer eller trenger hjelp til å få det til å fungere, kan du kontakte meg.
Koden er tilgjengelig på GitHub her.
Nyt.
Anbefalt:
Tre Bluetooth -fjernkontroll for Lego Duplo Train: 3 trinn (med bilder)
Tre Bluetooth -fjernkontroll for Lego Duplo Train: Barna mine elsket dette lille Lego Duplo -toget, spesielt min yngste som sliter med å kommunisere seg selv med ord, så jeg ønsket å bygge henne noe som ville hjelpe henne å leke med toget uavhengig av voksne eller telefoner/nettbrett. Noe som
Fjernkontroll Bluetooth -lysbryter: 4 trinn (med bilder)
Fjernkontroll Bluetooth -lysbryter: Dette blir det første prosjektet i en serie med tittelen: "Optimized Laziness: Over Engineered Solutions to Remarkably Trivial Problems" Har du noen gang ligget i sengen sent på kvelden og lest eller sett Netflix på den bærbare datamaskinen? Det verste er selvfølgelig
IRduino: Arduino fjernkontroll - etterlign en tapt fjernkontroll: 6 trinn
IRduino: Arduino fjernkontroll - Imitate a Lost Remote: Hvis du noen gang har mistet fjernkontrollen for TV -en eller DVD -spilleren, vet du hvor frustrerende det er å måtte gå til, finne og bruke knappene på selve enheten. Noen ganger tilbyr disse knappene ikke engang den samme funksjonaliteten som fjernkontrollen. Motta
Finne en tapt TV -fjernkontroll med Arduino og Bluetooth: 5 trinn
Finne en tapt TV -fjernkontroll med Arduino og Bluetooth: Finne en fjernkontroll for tapt TV veldig enkel krets og koden er så enkel, bare ved å bruke Arduino Nano med Bluetooth -modul og liten summer med batteriforsterker fra 3,7v til 5v, og jeg har laget en app i MIT App Inventor, * kan du koble til
"Retro Future" Bluetooth -fjernkontroll: 9 trinn (med bilder)
"Retro Future" Bluetooth -fjernkontroll: Jeg har alltid elsket utseendet og følelsen til morgendagens " verden " vi ble presentert i science fiction- og konseptprodukter fra midten av århundret. Ok, det er ikke sant. Da jeg var ung trodde jeg Tricoders på Star Trek var stygge og klønete, men