Daftar Isi:

ESP32 Bluetooth BLE Remote Control: 8 Langkah
ESP32 Bluetooth BLE Remote Control: 8 Langkah

Video: ESP32 Bluetooth BLE Remote Control: 8 Langkah

Video: ESP32 Bluetooth BLE Remote Control: 8 Langkah
Video: BLE with ESP32 tutorial part 1: the Server 2024, November
Anonim
ESP32 Bluetooth BLE Remote Control
ESP32 Bluetooth BLE Remote Control
ESP32 Bluetooth BLE Remote Control
ESP32 Bluetooth BLE Remote Control
ESP32 Bluetooth BLE Remote Control
ESP32 Bluetooth BLE Remote Control
ESP32 Bluetooth BLE Remote Control
ESP32 Bluetooth BLE Remote Control

Proyek ini adalah contoh bagaimana menghubungkan joystick Bluetooth BLE yang murah ke ESP32. Kode ditulis menggunakan Arduino IDE Ver 1.8.5 dengan addon ESP32. Joystick BLE yang digunakan adalah perangkat komersial yang dapat Anda beli di Internet dengan harga kurang dari $20,00 atau dari toko fiveBELoW lokal Anda seharga $5,00.

Joystick yang saya gunakan untuk proyek ini adalah Spektrum VR Control Bluetooth Remote Controller. Ini dipasarkan sebagai bekerja dengan tablet Android dan iOS sebagai joystick/mouse untuk digunakan dengan headset VR.

VR Control Bluetooth Remote Controller memiliki joystick tunggal dengan sumbu X dan Y, dua tombol pemicu di depan dan enam tombol di pegangan. Dua tombol untuk power on/off dan mode control. Empat tombol lainnya dapat digunakan untuk apa pun yang Anda inginkan. Proyek ini adalah kerangka atau kerangka kerja yang menangani semua antarmuka Bluetooth dan decoding tombol & joystick. Yang harus Anda lakukan adalah menambahkan panggilan fungsi untuk menangani apa yang Anda inginkan dari tombol dan joystick. Anda tidak perlu tahu apa-apa tentang Bluetooth untuk menggunakan kerangka kerja ini.

Ada banyak situs web dengan instruksi terperinci untuk menginstal Arduino IDE dan addon ESP32. Saya tidak akan mencoba mengulangi informasi itu di sini. Google dan ikuti petunjuknya.

Kerangka kerja ini merupakan adaptasi dari contoh klien BLE yang diterbitkan oleh IoT Sharing. Anda dapat menemukannya di sini. Anda dapat mempelajari kode ini untuk mendapatkan gambaran tentang cara kerja BLE. Expressif memiliki contoh lengkap untuk klien GATT BLE dan menjelaskan operasi secara detail (tidak ditulis untuk Arduino IDE). Anda bisa mendapatkannya di sini.

Ini bukan tutorial BLE. Saya tidak akan menjelaskan cara kerja kode secara detail. Saya akan menggunakan terminologi BLE untuk menjelaskan beberapa fitur joystick. Bagian dari kode yang perlu Anda modifikasi untuk proyek Anda akan dijelaskan secara rinci untuk membantu Anda memodifikasinya. Cakupannya terbatas untuk menjaga agar Instruksi ini tetap singkat dan fokus pada penggunaan joystick.

Langkah 1: Sedikit Tentang Bluetooth Low Energy (BLE)

Ini tidak dimaksudkan sebagai tutorial tentang BLE. Ketika saya memulai proyek ini, saya tidak tahu perbedaan antara BLE dan Bluetooth Klasik. Saya hanya ingin melihat apakah saya bisa mendapatkan joystick yang saya beli untuk bekerja dengan ESP32. Dalam teks berikut saya menggunakan terminologi BLE untuk memberikan gambaran sederhana tentang cara kerja BLE.

BLE menggunakan arsitektur klien/server. Satu perangkat adalah server yang menyediakan layanan. Perangkat lain adalah klien yang menggunakan layanan. Untuk menjaga agar kebutuhan daya tetap rendah, BLE hanya mentransmisikan paket informasi kecil ketika terjadi perubahan. Dalam kasus joystick, perangkat joystick adalah server. Sebagai server, ia mengiklankan dirinya sendiri dan akan mengirimkan daftar layanan yang disediakannya ketika ditanya. Perangkat joystick mengiklankan lima layanan. Satu-satunya layanan yang kami minati adalah layanan BLE HID (Human Interface Device). Layanan BLE memiliki apa yang dikenal sebagai Karakteristik yang terkait dengannya. Karakteristik biasanya merupakan sumber data. Layanan HID joystick memiliki sepuluh Karakteristik. Beberapa Karakteristik adalah duplikat dan diabaikan. Kami hanya tertarik pada Karakteristik Laporan BLE yang memiliki kemampuan Baca dan Beritahu. Tiga karakteristik memenuhi persyaratan ini dan memberikan data tentang posisi joystick dan status tombol. Saat notifikasi diaktifkan, server akan mengirimkan paket data ketika perubahan terdeteksi pada karakteristik terkait.

Kerangka kerja memverifikasi bahwa server yang ditemukannya memiliki layanan BLE HID dan kemudian akan mengaktifkan Notifikasi pada tiga Karakteristik Laporan yang menyediakan informasi joystick dan status tombol. Kemudian, ketika sebuah tombol ditekan atau dilepaskan atau joystick dipindahkan, ESP32 menerima paket data yang memberitahukan posisi joystick baru dan/atau status beberapa tombol.

Langkah 2: Pemindaian dan Indikator Koneksi

Kerangka kerja mendefinisikan dua LED, GREENLED dan BLUELED dan menetapkannya ke dua pin GPIO ESP32. GREENLED menyala saat ESP32 mencari joystick BLE. Ketika joystick ditemukan, LED HIJAU dimatikan dan LED BIRU menyala untuk menunjukkan bahwa koneksi telah dibuat dan Anda siap untuk pergi. Jika koneksi terputus, BLUELED dimatikan, ESP32 diatur ulang, LED HIJAU menyala dan pemindaian dimulai lagi. Jika joystick tidak ditemukan dalam waktu tiga puluh detik maka pemindaian berhenti dan LED HIJAU mati. Setelah lima detik, pemindaian dimulai lagi dan LED HIJAU dihidupkan.

Hasil akhirnya adalah ESP32 akan terus memindai joystick hingga menemukannya. Setelah koneksi dibuat, jika kemudian terputus, ESP32 akan mengatur ulang sendiri dan mulai memindai lagi. ESP32 diatur ulang karena tidak ada ESP32 SDK yang berfungsi untuk mengatur ulang tumpukan Bluetooth untuk memulai kembali pemindaian.

Langkah 3: Menguraikan Joystick dan Acara Tombol

Satu peristiwa panggilan balik pada ESP32 menerima tiga paket data berbeda dari server untuk tiga Karakteristik yang disiapkan untuk memberikan Pemberitahuan. Satu paket panjangnya empat byte. Tiga byte berisi posisi sumbu X, posisi sumbu Y dan tombol pemicu, yang dipetakan sedikit dalam byte. Dua paket lainnya masing-masing dua byte dan memiliki satu byte yang memiliki status tombol yang dipetakan bit. Paket yang diterima didekode dan disalin ke dalam array byte dalam memori. Data sumbu joystick masuk ke byte data X dan Y dan masing-masing dari tiga byte tombol yang dipetakan diarahkan ke byte yang sesuai untuk tombol tersebut.

Tugas FreeRTOS dibuat untuk menangani data yang diterima oleh notifikasi. Satu tugas untuk tombol joystick dan pemicu, satu tugas untuk tombol A & B dan satu tugas untuk tombol C & D. Setiap tugas ini memiliki area yang ditandai dengan jelas di mana Anda harus menambahkan kode untuk melakukan apa yang Anda inginkan dengan acara tersebut. Cari komentar "//====== tambahkan kode Anda di sini =====" di badan tugas dan tambahkan kode Anda setelahnya. Setiap tugas memiliki komentar yang menunjukkan kegunaannya dan menggunakan Serial.println() untuk mencetak pesan tentang peristiwa yang terjadi.

Berikut adalah contoh dari tugas tombol A/B;

void taskButtonAB(void *parameter){ tombol uint8_t;

//===== jika tugas memerlukan inisialisasi satu kali, taruh di sini =====

while(true) { // serahkan CPU, tunggu data baru vTaskSuspend(NULL); // kita baru bangun, data baru tersedia tombol = VrBoxData[VB_BTNAB]; Serial.printf("Tombol A/B: %02X\n", tombol); if (tombol & VB_BUTTON_A) { // tombol A ditekan atau ditahan Serial.println("Tombol A"); //====== tambahkan kode Anda di sini ===== }

jika (tombol & VB_BUTTON_B)

{ // tombol B ditekan atau ditahan Serial.println("Tombol B");

//====== tambahkan kode Anda di sini =====

} } // untuk } // taskButtonAB

Langkah 4: Operasi Kotak VR: Joystick

Jika joystick dibiarkan di posisi tengah, tidak ada pemberitahuan joystick yang dikirim. Setelah joystick dipindahkan dari tengah, pesan notifikasi dengan data joystick dan data tombol pemicu dikirim setiap 15mS. Saat joystick dipindahkan kembali ke tengah, pemberitahuan bahwa joystick telah dipindahkan ke tengah tidak dikirim. Dengan kata lain, ini memberi tahu Anda bahwa joystick telah pindah dari tengah, tetapi bukan karena telah pindah ke tengah. Hasil akhirnya adalah Anda menerima pesan yang menunjukkan joystick bergerak ke tengah, tetapi tidak mencapai tengah. Sangat menyebalkan. Dua tombol pemicu disertakan dengan data joystick. Menekan salah satu tombol pemicu setelah mengembalikan joystick ke tengah akan memperbarui posisi joystick ke nol. Framework memiliki timer timeout built-in yang secara otomatis mensimulasikan pesan pemberitahuan joystick dalam waktu singkat setelah semua pesan pemberitahuan joystick/tombol pemicu berhenti tiba. Timer menyetel joystick ke nol. Joystick memiliki jangkauan sekitar +/- 25 pada setiap sumbu.

Langkah 5: Operasi Kotak VR: Tombol Pemicu

Tombol pemicu akan mengirimkan pesan notifikasi satu kali saat ditekan dan sekali lagi saat dilepaskan. Pesan notifikasi yang ditekan akan menunjukkan tombol yang ditekan. Pesan pemberitahuan rilis menunjukkan bahwa kedua tombol dilepaskan.

Menahan tombol pemicu bawah akan mencegah server mendeteksi bahwa tombol pemicu atas telah ditekan. Menahan tombol pemicu atas dan menekan tombol pemicu bawah mengakibatkan server mengirimkan pesan pemberitahuan bahwa tombol pemicu bawah ditekan (tombol pemicu atas akan menjadi nol!). Melepaskan tombol pemicu bawah akan menyebabkan server mengirim pemberitahuan bahwa tombol pemicu atas ditekan dan pemicu bawah dilepaskan.

Dengan kata lain, tombol pemicu bawah dominan atas tombol pemicu atas dan akan menimpanya ketika keduanya ditekan. Anda harus menentukan bagaimana menangani kasus kedua tombol yang ditekan.

Langkah 6: Operasi Kotak VR: Tombol A/B

Tombol A dan B berfungsi seperti joystick dan terus mengirim pesan notifikasi saat ditekan dan ditahan. Pesan berhenti ketika tombol dilepaskan. Tombol A dan B bekerja mirip dengan tombol Pemicu di mana tombol A mendominasi tombol B seperti tombol pemicu bawah mendominasi tombol pemicu atas.

Langkah 7: Operasi Kotak VR: Tombol C/D

Tombol C dan D mengirim pesan notifikasi sekali saat ditekan dan sekali lagi saat dilepaskan. Jika ditekan, tidak ada pesan lebih lanjut yang dikirim hingga dilepaskan. Menahan salah satu tombol C atau D akan mencegah server mendeteksi aktivitas pada tombol lainnya.

Langkah 8: Kesimpulan

Pengoperasian tombol menurut saya sedikit miring. Kerangka menyediakan tempat untuk menempatkan kode Anda untuk bertindak ketika tombol ditekan. Jika Anda juga perlu mendeteksi pelepasan tombol, Anda harus memikirkan cara melakukannya.

Terserah Anda untuk menentukan apa yang Anda inginkan untuk dilakukan setiap tombol dan apa yang harus dilakukan dengan menggerakkan joystick. Bagaimana Anda menangani perbedaan pada tombol pemicu, A & B dan C & D terserah Anda.

Lihat di kode untuk; taskJoyStick(), taskButtonAB(), taskButtonCD() berfungsi dan tambahkan kode Anda setelah komentar "//====== tambahkan kode Anda di sini ====".

Anda akan memerlukan hingga empat fungsi untuk menangani joystick (maju, mundur, kanan & kiri) dan hingga enam fungsi untuk menangani berbagai tombol. Terapkan semuanya atau hanya yang Anda butuhkan. Pilihan ada padamu.

Jika Anda menggunakan kerangka kerja ini. Saya akan senang berteriak tentang apa yang Anda gunakan untuk dan jika Anda merasa mudah digunakan.

Jika Anda memiliki pertanyaan tentang cara kerjanya atau butuh bantuan untuk membuatnya berfungsi, hubungi saya.

Kode tersedia di GitHub di sini.

Menikmati.

Direkomendasikan: