Sisällysluettelo:

ESP32 Bluetooth BLE -kaukosäädin: 8 vaihetta
ESP32 Bluetooth BLE -kaukosäädin: 8 vaihetta

Video: ESP32 Bluetooth BLE -kaukosäädin: 8 vaihetta

Video: ESP32 Bluetooth BLE -kaukosäädin: 8 vaihetta
Video: Bluetooth Low Energy сканер на ESP32 в ESPHome. Интеграция с Home Assistant. BLE датчик присутствия. 2024, Marraskuu
Anonim
ESP32 Bluetooth BLE -kaukosäädin
ESP32 Bluetooth BLE -kaukosäädin
ESP32 Bluetooth BLE -kaukosäädin
ESP32 Bluetooth BLE -kaukosäädin
ESP32 Bluetooth BLE -kaukosäädin
ESP32 Bluetooth BLE -kaukosäädin
ESP32 Bluetooth BLE -kaukosäädin
ESP32 Bluetooth BLE -kaukosäädin

Tämä projekti on esimerkki edullisen Bluetooth BLE -ohjaimen liittämisestä ESP32 -laitteeseen. Koodi on kirjoitettu Arduino IDE Ver 1.8.5: llä ja ESP32 -lisäosalla. Käytetty BLE -joystick on kaupallinen laite, jonka voit ostaa Internetistä alle 20,00 dollarilla tai paikallisesta FiveBELoW -myymälästä 5,00 dollarilla.

Tässä projektissa käyttämäni ohjaussauva on Spektrum VR Control Bluetooth -kaukosäädin. Sitä markkinoidaan Android- ja IOS -tablettien kanssa toimivana ohjaussauvana/hiirenä VR -kuulokkeiden kanssa käytettäväksi.

VR Control Bluetooth -kaukosäätimessä on yksi ohjaussauva, jossa on X- ja Y -akseli, kaksi liipaisinpainiketta edessä ja kuusi painiketta kahvassa. Kaksi painiketta on virran kytkemiseksi/sammuttamiseksi ja tilan ohjaamiseksi. Muita neljää painiketta voidaan käyttää mihin tahansa. Tämä projekti on luuranko tai kehys, joka käsittelee kaikki painikkeiden ja ohjaussauvan Bluetooth -liitännät ja dekoodauksen. Sinun tarvitsee vain lisätä toimintoja, jotta voit hallita painikkeiden ja ohjaussauvan toimintoja. Sinun ei tarvitse tietää mitään Bluetoothista käyttääksesi tätä kehystä.

On olemassa lukuisia verkkosivustoja, joissa on yksityiskohtaiset ohjeet Arduino IDE: n ja ESP32 -lisäosan asentamiseen. En aio yrittää toistaa näitä tietoja täällä. Googlaa ja seuraa ohjeita.

Kehys on mukautus ILE -jaon julkaisemasta BLE -asiakasesimerkistä. Löydät sen täältä. Voit tutkia tätä koodia saadaksesi käsityksen siitä, miten BLE toimii. Expressifillä on täydellinen esimerkki GATT BLE -asiakkaalle ja se selittää toiminnon yksityiskohtaisesti (ei kirjoitettu Arduino IDE: lle). Saat sen täältä.

Tämä ei ole BLE -opetusohjelma. En aio selittää kuinka koodi toimii yksityiskohtaisesti. Käytän BLE -terminologiaa kuvaamaan joitain ohjaussauvan ominaisuuksia. Osa koodista, jota sinun on muokattava projektillesi, selitetään yksityiskohtaisesti, jotta voit muokata sitä. Toiminta -alue on rajoitettu pitämään tämä Instructable lyhyenä ja keskittymään ohjaussauvan käyttöön.

Vaihe 1: Hieman Bluetooth Low Energy (BLE)

Tätä ei ole tarkoitettu BLE: n opetusohjelmaksi. Kun aloitin tämän projektin, en tiennyt eroa BLE: n ja klassisen Bluetoothin välillä. Halusin vain nähdä, saisinko ostamani ohjaussauvan toimimaan ESP32: n kanssa. Seuraavassa tekstissä käytän BLE -terminologiaa antaakseni yksinkertaistetun yleiskuvan BLE: n toiminnasta.

BLE käyttää asiakas-/palvelinarkkitehtuuria. Yksi laite on palveluja tarjoava palvelin. Toinen laite on palveluita käyttävä asiakas. Virrankulutuksen pitämiseksi alhaalla BLE lähettää vain pieniä tietopaketteja muutoksen tapahtuessa. Joystickin tapauksessa joystick -laite on palvelin. Palvelimena se mainostaa itseään ja lähettää luettelon tarjoamistaan palveluista pyydettäessä. Joystick -laite mainostaa viittä palvelua. Ainoa palvelu, josta olemme kiinnostuneita, on BLE HID (Human Interface Device) -palvelu. BLE -palveluun liittyy niin sanottuja ominaisuuksia. Ominaisuus on tyypillisesti tietolähde. Ohjaussauvan HID -palvelussa on kymmenen ominaisuutta. Osa ominaisuuksista on kaksoiskappaleita ja niitä ei oteta huomioon. Olemme kiinnostuneita vain BLE -raportin ominaisuuksista, joilla on luku- ja ilmoitusominaisuudet. Kolme ominaisuuksista täyttää nämä vaatimukset ja antaa tietoja ohjaussauvan asennosta ja painikkeiden tilasta. Kun ilmoitus on käytössä, palvelin lähettää datapaketteja, kun niihin liittyvässä ominaisuudessa havaitaan muutos.

Kehys varmistaa, että sen löytämässä palvelimessa on BLE HID -palvelu, ja ottaa sitten käyttöön ilmoitukset kolmessa raporttiominaisuudessa, jotka tarjoavat ohjaussauvan ja painikkeen tilatietoja. Kun painiketta painetaan tai vapautetaan tai ohjaussauvaa siirretään, ESP32 vastaanottaa datapaketin, joka kertoo uuden ohjaussauvan asennon ja/tai joidenkin painikkeiden tilan.

Vaihe 2: Skannaus- ja yhteysilmaisimet

Kehys määrittää kaksi LEDiä, VIHREÄT ja BLUELED, ja määrittää ne kahdelle ESP32: n GPIO -nastalle. VIHREÄ palaa, kun ESP32 etsii BLE -joystickia. Kun ohjaussauva löytyy, VIHREÄ valo on pois päältä ja BLUELED palaa osoittaen, että yhteys on muodostettu ja olet valmis menemään. Jos yhteys katkeaa, BLUELED sammutetaan, ESP32 nollataan, VIHREÄ palaa ja skannaus alkaa uudelleen. Jos ohjaussauvaa ei löydy 30 sekunnin kuluessa, skannaus pysähtyy ja VIHREÄ valo sammuu. Viiden sekunnin kuluttua skannaus alkaa uudelleen ja VIHREÄ valo on päällä.

Lopputuloksena on, että ESP32 jatkaa ohjaussauvan etsimistä, kunnes se löytää sen. Kun yhteys on muodostettu ja jos se katkeaa, ESP32 nollaa itsensä ja aloittaa skannauksen uudelleen. ESP32 nollataan, koska ei ole ESP32 SDK -toimintoja, joilla Bluetooth -pino voidaan nollata skannauksen aloittamiseksi uudelleen.

Vaihe 3: Joystick- ja painiketapahtumien tulkinta

Yksi ESP32: n takaisinsoittotapahtuma vastaanottaa palvelimelta kolme eri datapakettia kolmelle ominaisuudelle, jotka oli määritetty toimittamaan ilmoituksia. Yksi paketti on neljä tavua pitkä. Kolme tavua sisältää X -akselin sijainnin, Y -akselin asennon ja liipaisinpainikkeet, jotka on bitti kartoitettu tavussa. Kaksi muuta pakettia ovat kaksi tavua, ja niissä on yksi tavu, jossa on bittikartoitettu painikkeen tila. Vastaanotetut paketit dekoodataan ja kopioidaan tavumäärään muistissa. Joystick -akselin tiedot menevät X- ja Y -datatavuihin, ja jokainen kolmesta bittikartoitetusta painiketavusta ohjataan kyseisiin painikkeisiin sopivaan tavuun.

FreeRTOS -tehtävä luodaan käsittelemään ilmoitusten vastaanottamia tietoja. Yksi tehtävä ohjaussauvalle ja liipaisinpainikkeille, yksi tehtävä A & B -painikkeille ja yksi tehtävä C & D -painikkeille. Jokaisessa näistä tehtävistä on selvästi merkitty alueet, joihin sinun on lisättävä koodi, jotta voit tehdä mitä haluat tapahtuman kanssa. Etsi tehtävän tekstistä "// ===== add your code here =====" -kommentti ja lisää koodi sen jälkeen. Jokaisessa tehtävässä on kommentti, josta käy ilmi, mihin sitä käytetään, ja se käyttää Serial.println () -merkkiä tapahtuman viestin tulostamiseen.

Tässä on esimerkki A/B -painiketehtävästä;

void taskButtonAB (void *parametri) {uint8_t painikkeet;

// ===== jos tehtävä vaatii yhden alustuksen, laita se tänne =====

vaikka (tosi) {// luopu suorittimesta, odota uutta dataa vTaskSuspend (NULL); // juuri heräsimme, uusia tietoja on saatavilla painikkeet = VrBoxData [VB_BTNAB]; Serial.printf ("A/B -painikkeet: %02X / n", painikkeet); if (painikkeet & VB_BUTTON_A) {// painiketta A painetaan tai pidetään painettuna Serial.println ("painike A"); // ===== lisää koodi tähän =====}

jos (painikkeet ja VB_BUTTON_B)

{// painiketta B painetaan tai pidetään painettuna Serial.println ("Button B");

// ===== lisää koodi tähän =====

}} // for} // taskButtonAB

Vaihe 4: VR -laatikon käyttö: ohjaussauva

Jos ohjaussauva jätetään keskiasentoon, joystick -ilmoituksia ei lähetetä. Kun ohjaussauva siirretään pois keskustasta, noin 15 ms: n välein lähetetään ilmoitusviesti, jossa on ohjaussauvan tiedot ja liipaisimen painikkeen tiedot. Kun ohjaussauva siirretään takaisin keskelle, ilmoitusta sen siirtymisestä keskelle ei lähetetä. Toisin sanoen se kertoo, että ohjaussauva on siirtynyt pois keskustasta, mutta ei siitä, että se on siirtynyt keskelle. Lopputuloksena on, että saat viestejä, jotka osoittavat, että ohjaussauva liikkuu kohti keskustaa, mutta ei, että se on saavuttanut keskipisteen. Todella ärsyttävä, todella turhauttava. Kaksi liipaisinpainiketta toimitetaan ohjaussauvan tietojen mukana. Jos painat jotakin liipaisinpainiketta ohjaussauvan palauttamisen jälkeen keskelle, ohjaussauvan asento päivitetään nollaan. Kehyksessä on sisäänrakennettu aikakatkaisuajastin, joka simuloi automaattisesti ohjaussauvan ilmoitusviestin hetken kuluttua siitä, kun kaikki ohjaussauvan/liipaisimen painikkeen ilmoitusviestit saapuvat. Ajastin asettaa ohjaussauvan nollaan. Joystickin alue on noin +/- 25 kullakin akselilla.

Vaihe 5: VR -laatikon käyttö: liipaisinpainikkeet

Liipaisinpainikkeet lähettävät ilmoituksen kerran, kun niitä painetaan, ja uudelleen, kun ne vapautetaan. Painettu ilmoitus ilmoittaa painetun painikkeen. Vapautusilmoitus ilmoittaa, että molemmat painikkeet on vapautettu.

Alemman liipaisinpainikkeen painaminen estää palvelinta havaitsemasta, että ylempää liipaisinta on painettu. Kun pidät ylempää liipaisinta painettuna ja painat alempaa liipaisinpainiketta, palvelin lähettää ilmoitusviestin, että alempaa liipaisinta painetaan (ylempi liipaisinpainike on nolla!). Alemman liipaisinpainikkeen vapauttaminen saa palvelimen lähettämään ilmoituksen, että ylempää liipaisinta painetaan ja alempi liipaisin vapautetaan.

Toisin sanoen alempi liipaisinpainike on hallitseva ylemmän liipaisinpainikkeen yläpuolella ja ohittaa sen, kun molempia painetaan. Sinun on määritettävä, miten käsitellä tapausta, jossa molempia painikkeita painetaan.

Vaihe 6: VR -laatikon käyttö: A/B -painikkeet

A- ja B -painikkeet toimivat kuin ohjaussauva ja lähettävät jatkuvasti ilmoitusviestejä, kun niitä pidetään painettuna. Viestit pysähtyvät, kun painike vapautetaan. A- ja B -painikkeet toimivat samalla tavalla kuin liipaisinpainikkeet, koska A -painike hallitsee B -painiketta aivan kuten alempi liipaisinpainike hallitsee ylempää liipaisinta.

Vaihe 7: VR -laatikon käyttö: C/D -painikkeet

C- ja D -painikkeet lähettävät ilmoituksen kerran, kun niitä painetaan, ja uudelleen, kun ne vapautetaan. Jos pidät painettuna, viestejä ei lähetetä ennen kuin ne on vapautettu. Yhden C- tai D -painikkeen painaminen estää palvelinta havaitsemasta toisen painikkeen toimintaa.

Vaihe 8: Johtopäätös

Painikkeiden käyttö on mielestäni hieman hankalaa. Kehys tarjoaa paikkoja, joihin koodisi voidaan asettaa, kun painiketta painetaan. Jos sinun on myös havaittava painikkeiden vapautukset, sinun on selvitettävä, miten se tehdään.

On täysin sinun päätettävissäsi, mitä haluat kunkin painikkeen tekevän ja mitä ohjaussauvan liikkeen pitäisi tehdä. Päätät miten käsittelet liipaisimen, A & B- ja C & D -painikkeiden erot.

Etsi koodista; taskJoyStick (), taskButtonAB (), taskButtonCD () ja lisää koodi "// ===== lisää koodi tänne =====" kommentin jälkeen.

Ohjaussauvan käsittelyyn tarvitaan enintään neljä toimintoa (eteenpäin, taaksepäin, oikea ja vasen) ja enintään kuusi toimintoa eri painikkeiden käsittelyyn. Toteuta ne kaikki tai vain mitä tarvitset. Päätös on sinun.

Jos käytät tätä kehystä. Haluaisin huutaa siitä, mihin käytät sitä ja jos se on mielestäsi helppo käyttää.

Jos sinulla on kysyttävää sen toiminnasta tai tarvitset apua sen toimimiseen, ota minuun yhteyttä.

Koodi löytyy GitHubista täältä.

Nauttia.

Suositeltava: