Obsah:

Dálkové ovládání ESP32 Bluetooth BLE: 8 kroků
Dálkové ovládání ESP32 Bluetooth BLE: 8 kroků

Video: Dálkové ovládání ESP32 Bluetooth BLE: 8 kroků

Video: Dálkové ovládání ESP32 Bluetooth BLE: 8 kroků
Video: Lesson 29: Car-7 Controlling SunFounder Smart Car using Remote Controller | Robojax 2024, Listopad
Anonim
Dálkové ovládání Bluetooth BLE ESP32
Dálkové ovládání Bluetooth BLE ESP32
Dálkové ovládání Bluetooth BLE ESP32
Dálkové ovládání Bluetooth BLE ESP32
Dálkové ovládání Bluetooth BLE ESP32
Dálkové ovládání Bluetooth BLE ESP32
Dálkové ovládání Bluetooth BLE ESP32
Dálkové ovládání Bluetooth BLE ESP32

Tento projekt je příkladem toho, jak k ESP32 připojit levný joystick Bluetooth BLE. Kód byl napsán pomocí Arduino IDE Ver 1.8.5 s doplňkem ESP32. Použitý joystick BLE je komerční zařízení, které můžete zakoupit na internetu za méně než 20,00 $ nebo v místním obchodě FiveBELoW za 5,00 $.

Joystick, který jsem použil pro tento projekt, je dálkový ovladač Bluetooth Spektrum VR Control. Je prodáván jako spolupracující s tablety Android a IOS jako joystick/myš pro použití s náhlavními soupravami VR.

Dálkový ovladač Bluetooth VR Control má jeden joystick s osou X a Y, dvě spouštěcí tlačítka vpředu a šest tlačítek na rukojeti. Dvě z tlačítek slouží k zapnutí/vypnutí a ovládání režimu. Další čtyři tlačítka lze použít pro cokoli chcete. Tento projekt je kostra nebo framework, který zpracovává všechna rozhraní Bluetooth a dekódování tlačítek a joysticku. Jediné, co musíte udělat, je přidat volání funkcí, abyste zvládli to, co mají dělat tlačítka a joystick. K používání tohoto rámce nepotřebujete vědět nic o Bluetooth.

Existuje mnoho webových stránek s podrobnými pokyny pro instalaci Arduino IDE a doplňku ESP32. Nebudu se tu pokoušet tyto informace opakovat. Vyhledejte na Googlu a postupujte podle pokynů.

Rámec je adaptací příkladu klienta BLE publikovaného sdílením IoT. Najdete ho zde. Tento kód si můžete nastudovat, abyste získali představu o tom, jak BLE funguje. Expressif má úplný příklad pro klienta GATT BLE a podrobně vysvětluje operaci (není napsáno pro Arduino IDE). Můžete ho získat zde.

Toto není BLE návod. Nebudu podrobně vysvětlovat, jak kód funguje. K popisu některých funkcí joysticku použiji terminologii BLE. Část kódu, kterou potřebujete pro svůj projekt upravit, bude podrobně vysvětlena, aby vám pomohla jej upravit. Rozsah je omezen, aby byl tento Instructable krátký a zaměřil se na používání joysticku.

Krok 1: Něco o Bluetooth Low Energy (BLE)

Toto není zamýšleno jako návod na BLE. Když jsem zahájil tento projekt, neznal jsem rozdíl mezi BLE a klasickým Bluetooth. Chtěl jsem jen zjistit, zda mohu získat zakoupený joystick pro práci s ESP32. V následujícím textu používám terminologii BLE, abych poskytl zjednodušený přehled o tom, jak BLE funguje.

BLE používá architekturu klient/server. Jedním zařízením je server, který poskytuje služby. Druhé zařízení je klient, který využívá služby. Aby se udržely nízké požadavky na napájení, BLE přenáší pouze malé pakety informací, když dojde ke změně. V případě joysticku je joystickem server. Jako server se sám inzeruje a na požádání odešle seznam služeb, které poskytuje. Zařízení s joystickem inzeruje pět služeb. Jedinou službou, o kterou se zajímáme, je služba BLE HID (Human Interface Device). Ke službě BLE jsou přidruženy takzvané charakteristiky. Charakteristika je obvykle zdrojem dat. Služba HID joysticku má deset charakteristik. Některé z charakteristik jsou duplikáty a jsou ignorovány. Zajímají nás pouze charakteristiky sestavy BLE, které mají možnosti čtení a upozornění. Tři z charakteristik splňují tyto požadavky a poskytují údaje o poloze joysticku a stavu tlačítek. Je -li povoleno upozornění, server odešle datové pakety, pokud je u přidružené charakteristiky zjištěna změna.

Rámec ověří, že server, který najde, má službu BLE HID, a poté povolí oznámení na třech charakteristikách hlášení, které poskytují informace o stavu joysticku a tlačítka. Poté, když je tlačítko stisknuto nebo uvolněno nebo se pohybuje joystickem, ESP32 obdrží balíček dat, který mu řekne, jaká je nová poloha joysticku a/nebo stav některých tlačítek.

Krok 2: Indikátory skenování a připojení

Rámec definuje dvě LED diody, ZELENÉ a BLUELED a přiřadí je dvěma pinům GPIO ESP32. ZELENÁ LED se rozsvítí, když ESP32 hledá joystick BLE. Když je joystick nalezen, ZELENÁ se vypne a BLUELED se rozsvítí, což znamená, že bylo navázáno spojení a jste připraveni jít. Pokud dojde ke ztrátě připojení, BLUELED se vypne, ESP32 se resetuje, ZELENÁ se rozsvítí a skenování začne znovu. Pokud joystick nenajdete do třiceti sekund, skenování se zastaví a ZELENÁ se vypne. Po pěti sekundách se skenování znovu spustí a ZELENÁ se zapne.

Konečným výsledkem je, že ESP32 bude pokračovat ve vyhledávání joysticku, dokud jej nenajde. Pokud je připojení navázáno, pokud je ztraceno, ESP32 se sám resetuje a začne znovu skenovat. ESP32 je resetován, protože neexistují žádné funkce ESP32 SDK pro resetování zásobníku Bluetooth a restartování skenování.

Krok 3: Dešifrování událostí joysticku a tlačítek

Jedna událost zpětného volání na ESP32 přijímá ze serveru tři různé datové pakety pro tři charakteristiky, které byly nastaveny tak, aby poskytovaly oznámení. Jeden paket je dlouhý čtyři bajty. Tři z bajtů obsahují polohu osy X, polohu osy Y a spouštěcí tlačítka, která jsou v bajtu bitově mapována. Další dva pakety jsou dva bajty a mají jeden bajt, který má stav tlačítka mapovaného bitem. Přijaté pakety jsou dekódovány a zkopírovány do bajtového pole v paměti. Data osy joysticku přecházejí do datových bytů X a Y a každý ze tří bitů mapovaných bajtů tlačítek je směrován do příslušného bytu pro tato tlačítka.

Úkol FreeRTOS je vytvořen pro zpracování dat přijatých oznámeními. Jeden úkol pro joystick a spouštěcí tlačítka, jeden úkol pro tlačítka A & B a jeden úkol pro tlačítka C & D. Každý z těchto úkolů má jasně označené oblasti, kam byste měli přidat kód, abyste s akcí mohli dělat, co chcete. Vyhledejte komentář „// ===== sem přidejte kód =====“v těle úkolu a přidejte za něj kód. Každý úkol má komentář označující, k čemu se používá, a pomocí Serial.println () vytiskne zprávu o události, ke které došlo.

Zde je příklad z úlohy tlačítka A/B;

void taskButtonAB (void *parametr) {uint8_t tlačítka;

// ===== pokud úkol vyžaduje jednorázovou inicializaci, vložte jej sem =====

while (true) {// vzdát se CPU, počkat na nová data vTaskSuspend (NULL); // právě jsme se probudili, jsou k dispozici nová data tlačítka = VrBoxData [VB_BTNAB]; Serial.printf ("Tlačítka A/B: %02X / n", tlačítka); if (buttons & VB_BUTTON_A) {// tlačítko A stisknuté nebo držené dolů Serial.println ("tlačítko A"); // ===== přidejte sem svůj kód =====}

if (tlačítka & VB_BUTTON_B)

{// tlačítko B stisknuto nebo je podrženo Serial.println ("tlačítko B");

// ===== přidejte sem svůj kód =====

}} // pro} // taskButtonAB

Krok 4: Ovládání VR boxu: Joystick

Pokud je joystick ponechán ve střední poloze, nebudou zasílána žádná oznámení joystickem. Jakmile je joystick přesunut mimo střed, přibližně každých 15 ms se odešle oznámení s údaji joysticku a daty spouštěcího tlačítka. Když se joystick přesune zpět do středu, nebude odesláno oznámení o jeho přesunu do středu. Jinými slovy vám to řekne, že se joystick přesunul mimo střed, ale ne, že by se přesunul do středu. Konečným výsledkem je, že obdržíte zprávy indikující, že se joystick pohybuje směrem ke středu, ale ne že dosáhl středu. Velmi otravné. Dvě spouštěcí tlačítka jsou součástí dat joysticku. Stisknutím jednoho ze spouštěcích tlačítek po návratu joysticku do středu se poloha joysticku aktualizuje na nulu. Framework má vestavěný časový spínač, který automaticky simuluje zprávu s joystickem krátce poté, co přestanou přicházet všechny zprávy s joystickem/spouštěcím tlačítkem. Časovač nastavuje joystick na nulu. Joystick má rozsah přibližně +/- 25 na každé ose.

Krok 5: Provoz VR boxu: Spouštěcí tlačítka

Spouštěcí tlačítka odešlou po stisknutí jednou oznamovací zprávu a po uvolnění znovu. Po stisknutí oznamovací zprávy se zobrazí tlačítko, které bylo stisknuto. Zpráva s oznámením o uvolnění označuje, že jsou uvolněna obě tlačítka.

Podržení spodního spouštěcího tlačítka zabrání serveru v detekci, že bylo stisknuto horní spouštěcí tlačítko. Podržením horního spouštěcího tlačítka a stisknutím spodního spouštěcího tlačítka server odešle zprávu s oznámením, že je stisknuto spodní spouštěcí tlačítko (horní spouštěcí tlačítko bude nulové!). Uvolnění spodního spouštěcího tlačítka způsobí, že server odešle oznámení, že je stisknuto horní spouštěcí tlačítko a spodní spoušť je uvolněna.

Jinými slovy, spodní spouštěcí tlačítko je dominantní nad horním spouštěcím tlačítkem a po stisknutí obou jej přepíše. Musíte určit, jak se bude postupovat v případě stisknutí obou tlačítek.

Krok 6: Provoz VR boxu: Tlačítka A/B

Tlačítka A a B fungují jako joystick a při stisknutí a podržení nepřetržitě odesílají oznámení. Hlášení se zastaví po uvolnění tlačítka. Tlačítka A a B fungují podobně jako spouštěcí tlačítka v tom, že tlačítko A dominuje tlačítku B stejně jako spodní spouštěcí tlačítko dominuje hornímu spouštěcímu tlačítku.

Krok 7: Provoz VR boxu: Tlačítka C/D

Tlačítka C a D odesílají oznámení jednou po stisknutí a znovu po uvolnění. Pokud je podržíte, nebudou odesílány žádné další zprávy, dokud nebudou uvolněny. Podržením jednoho z tlačítek C nebo D zabráníte serveru v detekci aktivity na druhém tlačítku.

Krok 8: Závěr

Ovládání tlačítek je podle mě trochu vyhraněné. Rámec poskytuje místa, kde lze kód aktivovat, když stisknete tlačítko. Pokud také potřebujete zjistit uvolnění tlačítek, zbývá vám zjistit, jak postupovat.

Je zcela na vás, abyste určili, co mají jednotlivá tlačítka dělat a co má pohyb joysticku dělat. Jak naložíte s rozdíly ve spouště, tlačítcích A & B a C & D, je jen na vás.

Vyhledejte v kódu; taskJoyStick (), taskButtonAB (), taskButtonCD () funguje a přidejte svůj kód po komentáři "// ===== přidejte sem svůj kód =====".

K ovládání joysticku budete potřebovat až čtyři funkce (dopředu, dozadu, doprava a doleva) a až šest funkcí pro ovládání různých tlačítek. Implementujte je všechny nebo jen to, co potřebujete. Volba je na tobě.

Pokud používáte tento rámec. Rád bych zakřičel, k čemu jste to použili a jestli vám to připadá snadné.

Pokud máte dotazy ohledně toho, jak funguje, nebo potřebujete pomoc s jeho uvedením do provozu, kontaktujte mě.

Kód je k dispozici na GitHub zde.

Užívat si.

Doporučuje: