Mündəricat:
- Addım 1: Bluetooth Enerjisi Haqqında Biraz (BLE)
- Addım 2: Tarama və Bağlantı Göstəriciləri
- Addım 3: Joystick və Düymə Hadisələrinin deşifr edilməsi
- Addım 4: VR Box Əməliyyatı: Joystick
- Addım 5: VR Box Əməliyyatı: Tetik düymələri
- Addım 6: VR Box Əməliyyatı: A/B Düymələri
- Addım 7: VR Box Əməliyyatı: C/D Düymələri
- Addım 8: Nəticə
Video: ESP32 Bluetooth BLE Uzaqdan İdarəetmə: 8 addım
2024 Müəllif: John Day | [email protected]. Son dəyişdirildi: 2024-01-30 07:47
Bu layihə, ucuz bir Bluetooth BLE joystickini ESP32 -yə necə bağlamağın nümunəsidir. Kod, ESP32 addon ilə Arduino IDE Ver 1.8.5 istifadə edərək yazılmışdır. İstifadə olunan BLE joystick, İnternetdə 20,00 dollardan aşağı və ya yerli 5BELoW mağazanızdan 5,00 dollara satın ala biləcəyiniz ticarət cihazıdır.
Bu layihə üçün istifadə etdiyim joystick Spektrum VR Control Bluetooth Uzaqdan Nəzarətçisidir. Android və IOS tabletləri ilə işləyərək VR qulaqlıqlarda istifadə üçün joystick/siçan kimi satışa çıxarılır.
VR Control Bluetooth Uzaqdan İdarəetmə qurğusunda X və Y oxlu tək bir joystick, öndə iki tetik düyməsi və sapda altı düymə var. Düymələrdən ikisi güc açma/söndürmə və rejimə nəzarət üçündür. Digər dörd düymə istədiyiniz hər şey üçün istifadə edilə bilər. Bu layihə, bütün Bluetooth interfeyslərini və düymələrin və joystikin deşifrini aparan bir skelet və ya çərçivədir. Etməli olduğunuz şey, düymələrin və joystickin istədiyini idarə etmək üçün funksiya zəngləri əlavə etməkdir. Bu çərçivəni istifadə etmək üçün Bluetooth haqqında heç nə bilməyinizə ehtiyac yoxdur.
Arduino IDE və ESP32 əlavəsini quraşdırmaq üçün ətraflı təlimatları olan çoxsaylı veb saytlar var. Bu məlumatı burada təkrar etməyə çalışmayacağam. Google edin və təlimatları izləyin.
Çərçivə, IoT Paylaşımı tərəfindən nəşr olunan BLE müştəri nümunəsinin uyğunlaşdırılmasıdır. Burada tapa bilərsiniz. BLE -nin necə işlədiyini bilmək üçün bu kodu öyrənə bilərsiniz. Expressif, GATT BLE müştərisi üçün tam bir nümunəyə malikdir və əməliyyatı ətraflı şəkildə izah edir (Arduino IDE üçün yazılmamışdır). Burada əldə edə bilərsiniz.
Bu BLE dərsliyi deyil. Kodun necə işlədiyini ətraflı izah etməyəcəyəm. Joystickin bəzi xüsusiyyətlərini təsvir etmək üçün BLE terminologiyasından istifadə edəcəyəm. Kodun layihəniz üçün dəyişdirməli olduğunuz hissəsi, onu dəyişdirməyinizə kömək etmək üçün ətraflı izah ediləcəkdir. Bu təlimatı qısa saxlamaq üçün məhduddur və joystickdən istifadə etməyə yönəlmişdir.
Addım 1: Bluetooth Enerjisi Haqqında Biraz (BLE)
Bunun BLE ilə bağlı bir dərs olması nəzərdə tutulmayıb. Bu layihəyə başlayanda BLE ilə Klassik Bluetooth arasındakı fərqi bilmirdim. ESP32 ilə işləmək üçün aldığım joysticki ala biləcəyimi görmək istədim. Aşağıdakı mətndə, BLE -nin necə işlədiyinə sadələşdirilmiş bir baxış vermək üçün BLE terminologiyasından istifadə edirəm.
BLE bir müştəri/server arxitekturasından istifadə edir. Bir cihaz xidmət göstərən bir serverdir. Digər cihaz xidmətlərdən istifadə edən bir müştəridir. Güc tələblərini aşağı salmaq üçün BLE yalnız dəyişiklik baş verdikdə kiçik məlumat paketlərini ötürür. Joystick vəziyyətində, joystick cihazı bir serverdir. Bir server olaraq, özünü reklam edir və istədikdə təqdim etdiyi xidmətlərin siyahısını ötürür. Joystick cihazı beş xidməti reklam edir. Maraqlandığımız yeganə xidmət BLE HID (İnsan Arayüzü Cihazı) xidmətidir. Bir BLE xidməti, onunla əlaqəli Xüsusiyyətlər olaraq bilinənlərə malikdir. Bir xarakterik, ümumiyyətlə məlumat mənbəyidir. Joystickin HID xidməti on xüsusiyyətə malikdir. Bəzi xüsusiyyətlər təkrarlanır və nəzərə alınmır. Yalnız oxumaq və bildirmək qabiliyyətinə malik olan BLE Hesabat Xüsusiyyətləri ilə maraqlanırıq. Üç xüsusiyyət bu tələblərə cavab verir və joystickin mövqeyi və düymələrin vəziyyəti haqqında məlumat verir. Bildiriş aktiv olduqda, əlaqəli xüsusiyyətdə dəyişiklik aşkar edildikdə server məlumat paketləri göndərəcək.
Çərçivə, tapdığı serverin BLE HID xidmətinə malik olduğunu yoxlayır və sonra joystick və düymə vəziyyəti haqqında məlumat verən üç Hesab Xüsusiyyətinə dair Bildirişləri aktivləşdirəcək. Sonra, bir düyməyə basıldıqda və ya buraxıldıqda və ya joystick hərəkət etdirildikdə, ESP32 yeni joystick mövqeyinin nə olduğunu və/və ya bəzi düymələrin vəziyyətini bildirən bir məlumat paketi alır.
Addım 2: Tarama və Bağlantı Göstəriciləri
Çərçivə GREENLED və BLUELED iki LED təyin edir və onları ESP32 -nin GPIO pinlərindən ikisinə təyin edir. GREENLED, ESP32 BLE joystickini axtardıqda yanır. Joystick tapıldıqda, GREENLED söndürülür və MAVİ yanır və əlaqənin qurulduğunu və getməyə hazır olduğunuzu bildirir. Əlaqə kəsilərsə, MAVİ sönür, ESP32 sıfırlanır, GREENLED yandırılır və tarama yenidən başlayır. Joystick otuz saniyə ərzində tapılmazsa, tarama dayanır və GREENLED sönür. Beş saniyədən sonra tarama yenidən başlayır və GREENLED açılır.
Son nəticə, ESP32 -in tapılmayana qədər joystick axtarışına davam etməsidir. Bağlantı qurulduqdan sonra, itirildikdə, ESP32 özünü sıfırlayacaq və yenidən taramağa başlayacaq. ESP32 sıfırlanır, çünki taramanı yenidən başlatmaq üçün Bluetooth yığınını sıfırlayan ESP32 SDK funksiyaları yoxdur.
Addım 3: Joystick və Düymə Hadisələrinin deşifr edilməsi
ESP32 -də bir geri çağırma hadisəsi, bildirişləri təmin etmək üçün qurulmuş üç xüsusiyyət üçün serverdən üç fərqli məlumat paketi alır. Bir paket dörd bayt uzunluğundadır. Baytlardan üçü, X oxu mövqeyi, Y oxu mövqeyi və baytda bitlə xəritələnmiş tətik düymələrini ehtiva edir. Digər iki paket hər biri iki baytdır və bit eşlenmiş düymə vəziyyətinə malik tək bir bayta malikdir. Alınan paketlər deşifr olunur və yaddaşda bir bayt silsiləsinə kopyalanır. Joystick ox məlumatları X və Y məlumat baytlarına daxil olur və üç bit eşlenen düymə baytlarının hər biri bu düymələr üçün uyğun bayta yönəldilir.
Bildirişlər tərəfindən alınan məlumatları idarə etmək üçün bir FreeRTOS vəzifəsi yaradılmışdır. Joystick və tetik düymələri üçün bir tapşırıq, A & B düymələri üçün bir vəzifə və C & D düymələri üçün bir vəzifə. Bu vəzifələrin hər birində hadisə ilə istədiyinizi etmək üçün kod əlavə etməli olduğunuz açıq şəkildə qeyd olunmuş sahələr var. Tapşırığın gövdəsində "// ===== kodunuzu bura əlavə edin =====" şərhini axtarın və kodunuzu bundan sonra əlavə edin. Hər bir tapşırığın nə üçün istifadə edildiyini göstərən bir şərh var və baş verən hadisə ilə bağlı mesajı çap etmək üçün Serial.println () istifadə edir.
A/B düyməsi tapşırığından bir nümunə;
void taskButtonAB (void *parametri) {uint8_t düymələri;
// ===== Əgər tapşırıq birdəfəlik başlanğıc tələb edirsə, bura qoyun =====
while (true) {// CPU -dan imtina edin, yeni məlumatları gözləyin vTaskSuspend (NULL); // yeni oyandıq, yeni məlumatlar mövcuddur düymələr = VrBoxData [VB_BTNAB]; Serial.printf ("A/B Düymələri: %02X / n", düymələr); if (düymələr & VB_BUTTON_A) {// düyməsi A basıldıqda və ya Serial.println ("Düymə A") basıldığı halda; // ===== kodunuzu bura əlavə edin =====}
əgər (düymələr və VB_BUTTON_B)
{// B düyməsinə basıldı və ya Serial.println ("B düyməsi") basılı tutuldu;
// ===== kodunuzu bura əlavə edin =====
}} // üçün} // taskButtonAB
Addım 4: VR Box Əməliyyatı: Joystick
Joystick mərkəzi vəziyyətdə qalarsa, heç bir joystick bildirişi göndərilmir. Joystick mərkəzdən uzaqlaşdırıldıqda, hər 15mS -də joystick məlumatları və tetik düyməsi məlumatları olan bir bildiriş mesajı göndərilir. Joystick yenidən mərkəzə köçürüldükdə mərkəzə köçdüyü barədə bildiriş göndərilmir. Başqa sözlə, joystickin mərkəzdən uzaqlaşdığını söyləyir, ancaq mərkəzə keçdiyini deyil. Son nəticə, joystickin mərkəzə doğru hərəkət etdiyini göstərən mesajları alırsınız, ancaq mərkəzə çatdığını deyil. Çox əsəbi. İki tetikleyici düymə joystick məlumatları ilə birlikdə verilir. Joystick'i mərkəzə qaytardıqdan sonra tətik düymələrindən birinə basmaq, joystickin mövqeyini sıfıra dəyişəcək. Çərçivə, bütün joystick/tetikleyici düymə bildiriş mesajlarının gəlməsini dayandırdıqdan qısa müddət sonra avtomatik olaraq bir joystick bildiriş mesajını simulyasiya edən bir zaman aşımı taymerinə malikdir. Taymer, joystick'i sıfıra qoyur. Joystickin hər oxda təxminən +/- 25 aralığına malikdir.
Addım 5: VR Box Əməliyyatı: Tetik düymələri
Tetik düymələri bir dəfə basıldıqda və sərbəst buraxıldıqda yenidən bir bildiriş mesajı göndərəcək. Basılan bildiriş mesajı basıldığı düyməni göstərəcək. Buraxılış bildirişi mesajı hər iki düymənin buraxıldığını göstərir.
Aşağı tətik düyməsini basıb saxlamaq serverin yuxarı tətik düyməsinə basıldığını aşkar etməsinə mane olacaq. Üst tətik düyməsini basıb aşağı tetik düyməsinə basmaq serverin aşağı tetik düyməsinə basıldığını bildirən bir mesaj göndərməsi ilə nəticələnir (yuxarı tətik düyməsi sıfır olacaq!). Aşağı tətik düyməsini buraxmaq, serverin yuxarı tətik düyməsinə basıldığını və aşağı tetikleyicinin sərbəst buraxıldığını bildirən bir bildiriş göndərməsinə səbəb olacaq.
Başqa sözlə, aşağı tətik düyməsi yuxarı tətik düyməsinə üstünlük verir və hər ikisi basıldıqda onu ləğv edəcək. Hər iki düyməyə basılması vəziyyətində necə davranılacağını təyin etməlisiniz.
Addım 6: VR Box Əməliyyatı: A/B Düymələri
A və B düymələri joystick kimi hərəkət edir və basıldıqda davamlı olaraq bildiriş mesajları göndərir. Düymə buraxıldıqda mesajlar dayanır. A və B düymələri, Tetik düymələrinə bənzər şəkildə işləyir, çünki aşağı düymə yuxarı tətik düyməsinə üstünlük verdiyi kimi A düyməsi də B düyməsinə hakimdir.
Addım 7: VR Box Əməliyyatı: C/D Düymələri
C və D düymələri bir dəfə basıldıqda və sərbəst buraxıldıqda da bir bildiriş mesajı göndərir. Basılı saxlanılarsa, buraxılana qədər başqa heç bir mesaj göndərilmir. C və ya D düymələrindən birini basıb saxlamaq serverin digər düymədə aktivliyi aşkar etməsinə mane olacaq.
Addım 8: Nəticə
Düymələrin işləməsi mənim fikrimcə bir az qəribədir. Çərçivə, bir düyməyə basıldığı zaman kodunuzun hərəkətə keçəcəyi yerləri təmin edir. Düymə buraxılışlarını da aşkar etməlisinizsə, bunu necə edəcəyinizi anlamağınız qalır.
Hər düymənin nə etmək istədiyini və joystickin hansı hərəkəti etməli olduğunu təyin etmək tamamilə sizə bağlıdır. Tətik, A & B və C & D düymələrindəki fərqləri necə idarə etməyiniz sizə bağlıdır.
Bunun üçün koda baxın; taskJoyStick (), taskButtonAB (), taskButtonCD () funksiyalarını yerinə yetirin və "// ===== kodunuzu bura əlavə edin =====" şərhindən sonra kodunuzu əlavə edin.
Joystick idarə etmək üçün dörd funksiyaya (irəli, geriyə, sağa və sola) və müxtəlif düymələri idarə etmək üçün altı funksiyaya ehtiyacınız olacaq. Hamısını və ya ehtiyac duyduğunuz şeyi həyata keçirin. Seçim sənindir.
Bu çərçivədən istifadə edirsinizsə. Nə üçün istifadə etdiyinizi və istifadə etməyi asan tapsanız bir qışqırmağı çox istərdim.
Bunun necə işlədiyinə dair suallarınız varsa və ya işə salınması üçün yardıma ehtiyacınız varsa, mənimlə əlaqə saxlayın.
Kod GitHub -da mövcuddur.
Zövq alın.
Tövsiyə:
Uzaqdan İdarəetmə Bluetooth İşıq Açarı: 4 Addım (Şəkillərlə birlikdə)
Uzaqdan idarə olunan Bluetooth İşıq Açarı: Bu, " Optimallaşdırılmış Tənbəllik: Olduqca Əhəmiyyətsiz Problemlərin Mühəndisləşdirilmiş Həlli " adlı bir seriyadakı ilk layihə olacaq. Ən pis tərəfi təbii ki
HT12D HT12E istifadə edərək RF 433MHZ Radio İdarəetmə - 433mhz ilə HT12E və HT12D istifadə edərək Rf Uzaqdan İdarəetmə edilməsi: 5 addım
HT12D HT12E istifadə edərək RF 433MHZ Radio İdarəetmə | HT12E və HT12D -dən 433mhz istifadə edərək Rf Uzaqdan İdarəetmə edilməsi: Bu təlimatda sizə HT12E kodlu 433mhz ötürücü qəbuledici modulu istifadə edərək RADIO uzaqdan idarə etməyi göstərəcəyəm. HT12D kod deşifratoru IC. Bu təlimatda çox ucuz komponentləri istifadə edərək məlumat göndərə və ala bilərsiniz: HT
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan sürüşdürün: 3 Addım (Şəkillərlə birlikdə)
Amazon Fire Uzaqdan Uzaqdan TV Uzaqdan Sürüşdürün: Oh Amazon, Fire TV'niz çox gözəldir, niyə bizə pultunuzda səs idarəetməsini vermədiniz? Yaxşı ki, Amazon -da 5 dollardan aşağı qiymətə bu sevimli kiçik uzaqdan, güc, səssiz satın ala bilərsiniz. , həcmi və hamısı kiçik bir paketdə. 3d printerə daxil edin
Adi Uzaqdan İdarəetmə Dəsti Dörd Kanallı RC Oyuncaq Uzaqdan İdarəetmə Sisteminə Çevrildi: 4 Addım
Adi Uzaqdan İdarəetmə Dəsti Dörd Kanallı RC Oyuncaq Uzaqdan İdarəetmə Sisteminə Çevrildi: 如何 通用 遥控 器 套件 转换 为 玩具 中 中 遥控 采用 采用 6 6 6 6 6 6 6 6 2262 和 2272 和 433 模块 构建 构建改造 方法 简单。 只需 准备 一些 瓦楞纸 板 , 然后 按照
IR Uzaqdan Uzaqdan Uzaqdan Çevirin: 9 Addım (Şəkillərlə birlikdə)
IR Uzaqdan Uzaqdan Uzaqdan RF -yə çevirin: Bugünkü Təlimat kitabında, ümumi bir RF modulunu mikro nəzarətçi olmadan necə istifadə edə biləcəyinizi sizə göstərəcəyəm ki, nəticədə hər hansı bir cihazın IR uzaqdan idarəetmə cihazını RF -yə çevirə biləcəyiniz bir layihə hazırlayaq. Uzaqdan. Çevirmənin əsas üstünlüyü