Mundarija:

ESP32 Bluetooth BLE masofadan boshqarish pulti: 8 qadam
ESP32 Bluetooth BLE masofadan boshqarish pulti: 8 qadam

Video: ESP32 Bluetooth BLE masofadan boshqarish pulti: 8 qadam

Video: ESP32 Bluetooth BLE masofadan boshqarish pulti: 8 qadam
Video: How to use Arduino as TV Remote Controller with Infrared 2024, Noyabr
Anonim
ESP32 Bluetooth BLE masofadan boshqarish pulti
ESP32 Bluetooth BLE masofadan boshqarish pulti
ESP32 Bluetooth BLE masofadan boshqarish pulti
ESP32 Bluetooth BLE masofadan boshqarish pulti
ESP32 Bluetooth BLE masofadan boshqarish pulti
ESP32 Bluetooth BLE masofadan boshqarish pulti
ESP32 Bluetooth BLE masofadan boshqarish pulti
ESP32 Bluetooth BLE masofadan boshqarish pulti

Ushbu loyiha arzon Bluetooth BLE joystikini ESP32 ga qanday ulashga misol bo'la oladi. Kod ESP32 qo'shimchasi bilan Arduino IDE Ver 1.8.5 yordamida yozilgan. Amaldagi BLE joystik - bu tijorat qurilmasi bo'lib, uni Internetda 20,00 dollardan past narxda yoki mahalliy 5BELoW do'konida 5,00 dollarga sotib olishingiz mumkin.

Men bu loyihada ishlatgan joystik - bu Spektrum VR Control Bluetooth masofadan boshqarish pulti. U Android va IOS planshetlari bilan ishlaydigan VR minigarnituralar uchun joystick/sichqoncha sifatida sotiladi.

VR Control Bluetooth masofadan boshqarish pultida X va Y o'qlari bo'lgan bitta joystik, old tomonida ikkita tetik tugmasi va tutqichda oltita tugma mavjud. Ikkita tugma yoqish/o'chirish va rejimni boshqarish uchun mo'ljallangan. Qolgan to'rtta tugmachani xohlagan narsangiz uchun ishlatishingiz mumkin. Bu loyiha skelet yoki ramka bo'lib, u Bluetooth -ning barcha interfeyslari va tugmalar va joystiklarni dekodlashni boshqaradi. Tugmalar va joystik nima qilishni xohlasa, shuni bajarish uchun funksional qo'ng'iroqlarni qo'shish kifoya. Ushbu tizimdan foydalanish uchun Bluetooth haqida hech narsa bilishning hojati yo'q.

Arduino IDE va ESP32 qo'shimchasini o'rnatish bo'yicha batafsil ko'rsatmalari bo'lgan ko'plab veb -saytlar mavjud. Men bu erda bu ma'lumotni takrorlashga urinmayman. Google -ga o'ting va ko'rsatmalarga amal qiling.

Framework - bu IoT Sharing tomonidan chop etilgan BLE mijozi misolining moslashuvi. Siz bu erda topishingiz mumkin. BLE qanday ishlashini bilish uchun siz ushbu kodni o'rganishingiz mumkin. Expressif GATT BLE mijozi uchun to'liq misolga ega va operatsiyani batafsil tushuntiradi (Arduino IDE uchun yozilmagan). Siz bu yerdan olishingiz mumkin.

Bu BLE qo'llanmasi emas. Men kodning qanday ishlashini batafsil tushuntirmayman. Joystikning ba'zi xususiyatlarini tasvirlash uchun men BLE terminologiyasidan foydalanaman. Loyihangiz uchun kodni o'zgartirishingiz kerak bo'lgan qismi, uni o'zgartirishga yordam berish uchun batafsil tushuntiriladi. Qo'llanmaning qisqartirish doirasi cheklangan va joystikdan foydalanishga qaratilgan.

1 -qadam: Bluetooth kam energiyasi haqida (BLE)

Bu BLE bo'yicha qo'llanma bo'lishi mo'ljallanmagan. Men bu loyihani boshlaganimda, BLE va Classic Bluetooth o'rtasidagi farqni bilmasdim. Men ESP32 bilan ishlash uchun sotib olgan joystikni olishim mumkinligini ko'rmoqchi edim. Keyingi matnda men BLE terminologiyasidan foydalanib, BLE qanday ishlashini soddalashtirilgan ko'rib chiqaman.

BLE mijoz/server arxitekturasidan foydalanadi. Bitta qurilma - bu xizmatlar ko'rsatadigan server. Boshqa qurilma - bu xizmatlarni iste'mol qiladigan mijoz. Quvvat talablarini ushlab turish uchun BLE faqat o'zgarish sodir bo'lganda kichik ma'lumot paketlarini uzatadi. Joystik holatida joystik qurilmasi server hisoblanadi. Server sifatida u o'zini reklama qiladi va so'ralganda xizmatlar ro'yxatini uzatadi. Joystik qurilmasi beshta xizmatni reklama qiladi. Bizni qiziqtirgan yagona xizmat - bu BLE HID (Inson Interface Device) xizmati. BLE xizmatida o'ziga xos xususiyatlar mavjud. Xarakterli ma'lumotlar odatda ma'lumot manbai hisoblanadi. Joystikning HID xizmati o'nta xususiyatga ega. Xususiyatlarning ba'zilari takrorlanadi va e'tiborga olinmaydi. Bizni faqat o'qish va xabardor qilish qobiliyatiga ega bo'lgan BLE hisobotining xususiyatlari qiziqtiradi. Xususiyatlarning uchtasi ushbu talablarga javob beradi va joystikning holati va tugmalar holati to'g'risida ma'lumot beradi. Xabarnoma yoqilganda, server xarakteristikada o'zgarish aniqlanganda ma'lumotlar paketini yuboradi.

Ramka o'zi topgan serverda BLE HID xizmatiga ega ekanligini tekshiradi, so'ngra joystik va tugma holati to'g'risida ma'lumot beruvchi uchta hisobot tavsifi to'g'risida bildirishnomalarni yoqadi. Keyin, tugma bosilganda yoki qo'yilganda yoki joystik harakatlantirilganda, ESP32 yangi joystik holati va/yoki ba'zi tugmalar holati to'g'risida ma'lumot to'plamini oladi.

2 -qadam: ko'rish va ulanish ko'rsatkichlari

Ramka ikkita Yashil va Ko'k LEDni aniqlaydi va ularni ESP32 GPIO pinlarining ikkitasiga tayinlaydi. ESP32 BLE joystikini qidirganda GREENLED yonadi. Joystik topilganda, GREENLED o'chiriladi va BLUELED yonadi va aloqa o'rnatildi va siz borishga tayyormiz. Agar ulanish yo'qolsa, KO'K o'chiriladi, ESP32 qayta o'rnatiladi, Yashil yonadi va skanerlash qayta boshlanadi. Agar joystick o'ttiz soniya ichida topilmasa, skanerlash to'xtaydi va GREENLED o'chadi. Besh soniyadan so'ng, skanerlash yana boshlanadi va GREENLED yoqiladi.

Natijada ESP32 joystikni topguncha qidirishni davom ettiradi. Ulanish o'rnatilgandan so'ng, agar u yo'qolsa, ESP32 o'zini tiklaydi va qayta skanerlashni boshlaydi. ESP32 qayta o'rnatiladi, chunki skanerlashni qayta boshlash uchun Bluetooth to'plamini tiklash uchun ESP32 SDK funktsiyalari yo'q.

3 -qadam: Joystik va tugma hodisalarini hal qilish

ESP32 -da qayta qo'ng'iroq qilish hodisasi serverdan bildirishnomalarni taqdim etish uchun o'rnatilgan uchta xususiyat uchun uch xil ma'lumot paketini oladi. Bir paketning uzunligi to'rt bayt. Baytlarning uchtasida X o'qi pozitsiyasi, Y o'qi pozitsiyasi va tetik tugmachalari mavjud bo'lib, ular baytda bitli tasvirlangan. Qolgan ikkita paket har biri ikki baytdan iborat bo'lib, bitli xaritali tugma holatiga ega bo'lgan bitta baytga ega. Qabul qilingan paketlar dekodlanadi va xotiradagi bayt qatoriga ko'chiriladi. Joystik o'qi ma'lumotlari X va Y ma'lumotlar baytlariga kiradi va har bir uch bitli tugma baytlari ushbu tugmalar uchun mos baytga yo'naltiriladi.

Bildirishnomalar orqali olingan ma'lumotlarni qayta ishlash uchun FreeRTOS vazifasi yaratilgan. Joystik va ishga tushirish tugmachalari uchun bitta vazifa, A va B tugmachalari uchun bitta vazifa va C va D tugmalari uchun bitta vazifa. Ushbu vazifalarning har birida aniq belgilangan joylar mavjud bo'lib, siz tadbirda xohlagan narsani qilish uchun kod qo'shishingiz kerak. Vazifaning asosiy qismida "// ===== kodingizni bu erga ===== qo'shish" izohini toping va undan keyin kodingizni qo'shing. Har bir topshiriqda nima uchun ishlatilishini ko'rsatadigan izoh bor va sodir bo'lgan voqea haqidagi xabarni chop etish uchun Serial.println () dan foydalaniladi.

Bu erda A/B tugmachasi vazifasidan misol;

void taskButtonAB (void *parameter) {uint8_t tugmalari;

// ===== agar vazifa bir martalik ishga tushirishni talab qilsa, bu erga qo'ying =====

while (true) {// CPUdan voz keching, yangi ma'lumotlarni kuting vTaskSuspend (NULL); // biz hozirgina uyg'ondik, yangi ma'lumotlar mavjud tugmalar = VrBoxData [VB_BTNAB]; Serial.printf ("A/B tugmalari: %02X / n", tugmalar); agar (tugmalar & VB_BUTTON_A) {// tugmasi A bosilsa yoki ushlab turilsa Serial.println ("A tugmasi"); // ===== kodingizni bu erga qo'shing =====}

agar (tugmalar va VB_BUTTON_B)

{// B tugmasi bosildi yoki ushlab turildi Serial.println ("B tugmasi");

// ===== kodingizni bu erga qo'shing =====

}} // // uchun} // taskButtonAB

4 -qadam: VR qutisining ishlashi: Joystik

Agar joystik markaz holatida qoldirilsa, joystik haqida bildirishnoma yuborilmaydi. Joystik markazdan ko'chirilgandan so'ng, har 15 mSda joystik ma'lumotlari va tugmachali ma'lumotlar bilan xabarnoma yuboriladi. Joystik markazga qaytarilganda, u markazga ko'chganligi to'g'risida bildirishnoma yuborilmaydi. Boshqacha qilib aytganda, bu sizga joystikning markazdan tashqariga ko'chganligini, lekin markazga ko'chganligini emas. Yakuniy natija shundaki, siz joystik markazga qarab harakat qilayotgani to'g'risida xabar olasiz, lekin u markazga etib bormagan. Juda zerikarli. Ikkita tugma tugmachasi joystik ma'lumotlariga kiritilgan. Joystikni markazga qaytargandan so'ng, tugmachalardan birini bosish joystik holatini nolga o'zgartiradi. Framework-da taymer tugmachasi o'rnatilgan bo'lib, u joystik/tetik tugmachasi xabarnomalari kelmay qolgandan so'ng qisqa vaqt ichida avtomatik ravishda joystik xabarnomasini simulyatsiya qiladi. Taymer joystikni nolga o'rnatadi. Joystik har bir o'qda +/- 25 oralig'ida bo'ladi.

5 -qadam: VR qutisining ishlashi: Trigger tugmalari

Tetik tugmalari bir marta bosilganda va qo'yib yuborilganda yana xabar yuboriladi. Bosilgan xabarda bosilgan tugma ko'rsatiladi. Chiqarish xabari ikkala tugma ham qo'yib yuborilganligini bildiradi.

Pastki tugmachani ushlab turish serverning yuqori tugmachasi bosilganligini aniqlashga to'sqinlik qiladi. Yuqori tetik tugmachasini ushlab turish va pastki tugmachani bosish natijasida server pastki tugma bosilganligi to'g'risida xabar yuboradi (yuqori tetik tugmasi nolga teng bo'ladi!). Pastki tugmachani qo'yib yuborish, serverga yuqori tetik tugmasi bosilgani va pastki tirgak qo'yilgani to'g'risida xabar yuborishiga olib keladi.

Boshqacha qilib aytganda, pastki tetik tugmasi yuqori tetik tugmasidan ustun turadi va ikkalasi ham bosilganda uni bekor qiladi. Ikkala tugma bosilganda qanday ishlash kerakligini aniqlash kerak.

6 -qadam: VR qutisining ishlashi: A/B tugmalari

A va B tugmalari joystik kabi ishlaydi va bosilganda ushlab turilganda xabarlar yuboriladi. Xabar tugma qo'yilganda to'xtaydi. A va B tugmachalari "Trigger" tugmalariga o'xshab ishlaydi, chunki A tugmasi B tugmachasini boshqaradi, xuddi pastki tetik tugmasi yuqori tetik tugmachasini boshqaradi.

7 -qadam: VR qutisining ishlashi: C/D tugmalari

C va D tugmalari bir marta bosilganda va bo'shatilganda yana xabar yuboriladi. Agar ushlab turilsa, ular chiqmaguncha boshqa xabarlar yuborilmaydi. C yoki D tugmalaridan birini ushlab turish serverning boshqa tugmachadagi faollikni aniqlashiga to'sqinlik qiladi.

8 -qadam: Xulosa

Menimcha, tugmalarning ishlashi biroz zerikarli. Framework tugma bosilganda sizning kodingizni bajaradigan joylarni taqdim etadi. Agar siz tugmachalarning chiqarilishini ham aniqlashingiz kerak bo'lsa, buni qanday qilishni aniqlaysiz.

Har bir tugma nima qilishni xohlashini va joystik nima harakat qilishini o'zingiz hal qilasiz. Trigger, A & B va C & D tugmalaridagi farqlarni qanday hal qilish sizga bog'liq.

Buning uchun kodni ko'ring; taskJoyStick (), taskButtonAB (), taskButtonCD () funktsiyalari va "// ===== bu erga o'z kodingizni qo'shish =====" sharhidan keyin kodingizni qo'shing.

Joystikni boshqarish uchun sizga to'rttagacha funktsiya kerak bo'ladi (oldinga, orqaga, o'ngga va chapga) va har xil tugmalarni boshqarish uchun oltitagacha. Hammasini yoki sizga kerak bo'lgan narsani amalga oshiring. Tanlov sizniki.

Agar siz ushbu ramkadan foydalansangiz. Siz uni nima uchun ishlatganingiz haqida baqirishni yoqtirardim va agar uni ishlatish oson bo'lsa.

Agar sizda uning qanday ishlashi haqida savollaringiz bo'lsa yoki uni ishga tushirishda yordam kerak bo'lsa, men bilan bog'laning.

Kod GitHub -da mavjud.

Xursand bo'ling.

Tavsiya: