- Terminologi yang berkaitan dengan BLE (Tenaga Rendah Bluetooth)
- Menyiapkan perkakasan
- Pengaturcaraan ESP32 untuk Petunjuk Tahap Bateri menggunakan perkhidmatan GATT
- Menguji perkhidmatan GATT anda di ESP32 BLE
Fon Kepala Tanpa Wayar, Jalur kecergasan, Pembesar suara Bluetooth, Fon kepala In-Ear, Telefon bimbit, Komputer riba… terdapat begitu banyak peranti Bluetooth di sekitar kita dan kebanyakan peranti ini dikendalikan dengan bateri. Pernahkah anda terfikir bahawa, apabila anda menyambungkan peranti Bluetooth ke telefon bimbit anda, bagaimana secara automatiknya memahami bahawa peranti yang disambungkan adalah komputer atau peranti audio atau telefon bimbit? Untuk beberapa peranti, telefon kita mungkin secara automatik menunjukkan peratusan bateri dari peranti yang disambungkan pada bar pemberitahuan. Bagaimana semua ini berlaku sendiri? Harus ada beberapa protokol umum yang dikongsi antara telefon dan peranti Bluetooth dengan betul!
Tetap ingin tahu, anda akan mendapat jawapan untuk soalan-soalan ini kerana kami cuba memahami Tenaga Rendah Bluetooth (ringkasnya BLE), dengan modul ESP32 yang popular. Tidak seperti Bluetooth Klasik di ESP32, BLE beroperasi hanya apabila komunikasi diaktifkan dan tetap dalam mod tidur sebaliknya, ini menjadikannya pilihan yang tepat untuk aplikasi berkuasa bateri. BLE juga dapat membentuk jaringan mesh dan bertindak sebagai Beacon. Biasanya modul BLE berfungsi sama ada sebagai pelayan atau sebagai pelanggan, di sini kita akan menggunakan ESP32 BLE sebagai pelayan.
Di sini kami telah membahagikan ESP32 Bluetooth lengkap kepada tiga segmen untuk kemudahan memahami.
1. Bluetooth bersiri pada ESP32 yang menukar LED dari Telefon bimbit
2 . Pelayan BLE untuk menghantar data tahap Bateri ke Telefon bimbit menggunakan Perkhidmatan GATT
3. Pelanggan BLE untuk mengimbas peranti BLE dan bertindak sebagai suar.
Kami telah merangkumi artikel pertama; dalam artikel ini kita akan belajar bagaimana menjadikan ESP32 BLE berfungsi sebagai pelayan dan menggunakan Perkhidmatan GATT untuk menghantar maklumat tahap bateri. Untuk tujuan pengujian, kami akan mengirimkan nilai kod keras dari ESP32 sebagai peratusan bateri ke telefon bimbit kami melalui perkhidmatan BLE GATT, dengan cara ini Telefon bimbit kami akan menganggap bahawa ESP32 adalah peranti Bluetooth yang dikendalikan oleh bateri yang cuba dihantar ke peratusan baterinya. Sebelum menerangkan secara terperinci, kami akan memahami beberapa istilah yang berkaitan dengan Bluetooth Low Energy.
Terminologi yang berkaitan dengan BLE (Tenaga Rendah Bluetooth)
Pelayan BLE: Seperti yang diberitahu sebelumnya, BLE dapat diprogramkan untuk berfungsi sama ada sebagai Pelayan atau sebagai pelanggan. Semasa bekerja sebagai pelayan, BLE hanya dapat menyediakan data, ia tidak dapat memulakan sambungan. Contohnya ialah kumpulan kecergasan. Pelayan boleh menghantar maklumat hanya jika pelanggan memintanya.
Selalunya BLE ESP32 digunakan sebagai Pelayan. Setiap Pelayan akan mempunyai satu atau lebih Perkhidmatan di dalamnya dan juga setiap perkhidmatan akan mempunyai satu atau lebih ciri yang berkaitan dengannya. Satu Karakteristik mungkin mempunyai sifar, satu atau lebih daripada satu Penerangan di dalamnya. Setiap Perkhidmatan, ciri atau Deskriptor akan mempunyai ID uniknya sendiri yang disebut UUID.
Pelanggan BLE: Pelanggan boleh mengimbas sambungan dan mendengar peranti Bluetooth lain. Contohnya ialah telefon bimbit anda. Perhatikan bahawa kebanyakan peranti perkakasan BLE dapat berfungsi sebagai pelayan dan sebagai klien, itu adalah perisian yang menentukan peranan peranti.
Peripheral Device / Central Device: Dalam jaringan BLE mungkin hanya ada satu Perangkat Pusat, tetapi dapat memiliki sebanyak mungkin Peripheral device yang diperlukan. Peranti Pusat dapat menyambung ke semua peranti periferal pada masa yang sama, tetapi peranti periferal hanya dapat menyambung ke Peranti Pusat, dengan cara ini tidak ada dua peranti persisian yang dapat berkongsi data antara satu sama lain. Contoh terbaik untuk peranti Pusat ialah Telefon pintar kami dan untuk Periferal peranti fon telinga Bluetooth atau jalur kecergasan kami.
Iklan BLE: Iklan BLE adalah istilah geeky untuk mengarahkan peranti Bluetooth agar dapat dilihat oleh semua orang sehingga dapat berpasangan dan menjalin hubungan. Ia boleh dianggap sebagai komunikasi sehala. Di sini pelayan terus mengiklankan data yang mengharapkan pelayan menerimanya. BLE Beacon adalah sejenis BLE.
UUID (Universal Unique Identifier): Setiap peranti Bluetooth BLE diberi Nombor Pengenal Unik Universal apabila diprogramkan oleh pengaturcara. Anda boleh menganggap pengecam ini sebagai urutan nombor yang mewakili fungsi / peranan peranti BLE. Sekali lagi terdapat dua jenis UUID. Salah satunya adalah UUID Perkhidmatan dan yang lain adalah UUID Ciri.
Perkhidmatan GATT: GATT bermaksud Profil Atribut Generik; ini mendefinisikan beberapa cara standard menggunakan dua peranti BLE yang harus selalu berkomunikasi. Protokol Atribut (ATT) ini sudah ditentukan sebelumnya dan biasa untuk semua peranti BLE jadi dengan cara ini mana-mana dua peranti BLE dapat mengenali satu sama lain. Jadi GATT adalah jawapan untuk soalan kami sebelumnya.
Teknik menggunakan dua peranti BLE yang harus menghantar data ke dan seterusnya ditentukan oleh konsep yang disebut perkhidmatan dan ciri.
Ciri Perkhidmatan BLE / BLE: UUID Perkhidmatan memberitahu kami jenis perkhidmatan yang akan dilakukan oleh peranti BLE dan UUID Karakteristik memberitahu apa parameter atau fungsi yang akan dilakukan oleh perkhidmatan tersebut. Oleh itu, setiap Perkhidmatan akan mempunyai satu atau lebih ciri di bawahnya. Baik! Dari mana pengaturcara mendapatkan UUID ini? Setiap UUID sudah ditentukan oleh GATT (Profil Atribut Generik) anda boleh melayari laman web mereka dan memilih UUID seperti yang diperlukan untuk projek tersebut. Saya tahu ia telah melambung sedikit di kepala kita; mari cuba memahaminya dengan contoh.
Mari kita anggap peranti BLE pemain audio. Pada mulanya apabila anda memasangkannya dengan telefon, telefon anda mengenalinya sebagai peranti audio dan juga memaparkan tahap bateri pada bar status. Oleh itu, untuk ini, pemain audio harus memberitahu telefon anda bahawa ia bersedia berkongsi tahap bateri dan peratusan pengisian bateri yang ada di dalamnya. Ini dilakukan dengan menggunakan UUID, ada UUID tertentu yang mengatakan bahawa dadu BLE akan memberikan perincian mengenai tahap bateri UUID ini yang memberitahu jenis perkhidmatan disebut UUID Servis, sekali lagi mungkin ada begitu banyak parameter yang harus ditukar untuk menyelesaikan perkhidmatan seperti nilai bateri pada parameter tersebut, setiap parameter akan mempunyai UUID sendiri dan ini disebut UUID Karakteristik.Fungsi umum yang dilakukan oleh suatu ciri ialah Membaca, Menulis, Memberitahu dan Menyatakan.
BLE Descriptor: The Deskriptor adalah atribut pilihan yang terdapat di dalam Karakteristik. Deskriptor biasanya menentukan cara mengakses Karakteristik.
BLE Beacon: Bluetooth Beacon lebih menyerupai suis jarak yang melakukan beberapa tindakan yang telah ditentukan semasa pengguna memasuki jarak (jarak dekat). Ia mengiklankan identitinya sepanjang masa dan dengan itu selalu siap untuk berpasangan.
BLE2902: Saya masih ragu-ragu dengan perkara ini, tetapi anda boleh menganggapnya sebagai perisian di pihak klien yang memberitahu pelayan untuk menghidupkan atau mematikan pemberitahuan ini akan membantu kita dalam menjimatkan kuasa
Harap anda mendapat idea kasar, yang baik adalah kita tidak perlu tahu banyak kerana semua kerja tangan sudah dilakukan untuk kita melalui perpustakaan.
Menyiapkan perkakasan
Projek ini tidak memerlukan penyediaan perkakasan tetapi pastikan anda telah menambahkan butiran papan ESP32 pada Arduino IDE anda dan telah mencuba program sekelip mata minimum untuk memeriksa apakah semuanya berfungsi seperti yang diharapkan. Anda ragu-ragu bagaimana melakukannya, anda boleh mengikuti tutorial Bermula dengan ESP32 dengan Arduino untuk melakukan perkara yang sama.
Juga untuk menguji perkhidmatan BLE, kami akan menggunakan aplikasi android nRF di telefon bimbit kami yang boleh dimuat turun secara langsung dari PlayStore. Ia juga terdapat di Itunes Store untuk pengguna Iphone. Sekiranya anda merancang untuk bekerjasama dengan BLE untuk masa yang lama, aplikasi ini akan sangat berguna untuk tujuan penyahpepijatan.
Pengaturcaraan ESP32 untuk Petunjuk Tahap Bateri menggunakan perkhidmatan GATT
Pada masa ini saya menganggap bahawa anda mempunyai idea yang wajar mengenai perkhidmatan GATT apa dan bagaimana ia dilaksanakan menggunakan model Perkhidmatan dan ciri. Sekarang, mari kita selami program untuk mengetahui bagaimana pelaksanaannya di ESP32 menggunakan Arduino IDE. Sebelum kita meneruskan, saya ingin menggunakan ruang ini untuk mengucapkan terima kasih kepada Andreas Spiess atas videonya BLE yang membuat perkara menjadi jelas di pihak saya.
Kami memulakan program dengan mengimport perpustakaan yang diperlukan ke dalam lakaran kami. Terdapat banyak perkara yang perlu dikonfigurasikan untuk menggunakan fungsi BLE ESP32 semoga terima kasih kepada Neil Kolban yang telah melakukan kerja keras untuk kami dan menyediakan perpustakaan. Sekiranya anda ingin memahami fungsi perpustakaan anda boleh merujuk dokumentasinya di halaman github.
#sertakan
Seterusnya kita harus menentukan fungsi Panggilan Balik Pelayan untuk peranti Bluetooth kita. Sebelum itu mari kita fahami bahawa apa itu fungsi panggilan balik dalam BLE.
Apakah fungsi panggilan balik dalam BLE?
Semasa BLE beroperasi sebagai Pelayan, penting untuk menentukan fungsi panggilan balik Server. Terdapat banyak jenis panggilan balik yang berkaitan dengan BLE tetapi secara sederhana, anda menganggapnya sebagai pengakuan yang dilakukan untuk memastikan tindakan telah selesai. Panggilan balik pelayan digunakan untuk memastikan bahawa hubungan antara klien dan pelayan berjaya dibuat.
Kami menggunakan baris kod berikut untuk melakukan panggilan balik pelayan.
bool _BLEClientConnected = salah; kelas MyServerCallbacks : BLEServerCallbacks awam { void onConnect (BLEServer * pServer) { _BLEClientConnected = true; }; batal onDisconnect (BLEServer * pServer) { _BLEClientConnected = false; } };
Di dalam fungsi setup void , kami memulai komunikasi Serial pada 115200 untuk debug dan kemudian menginisialisasi Perangkat Bluetooth melalui fungsi InitBLE .
persediaan tidak sah () { Serial.begin (115200); Serial.println ("Petunjuk Tahap Bateri - BLE"); InitBLE (); }
The initBLE adalah tempat di mana semua keajaiban berlaku. Kita harus membuat pelayan Bluetooth dan menggunakan perkhidmatan Tingkat Bateri di sini. Tetapi sebelum itu kita harus menentukan UUID untuk Perkhidmatan, Karakteristik dan Penerangan untuk membaca Tahap bateri. Semua UUID boleh didapati dari laman web perkhidmatan Bluetooth GATT. Untuk kes kami, kami cuba menggunakan perkhidmatan Bateri dan UUID kerana ia ditakrifkan sebagai 0X180F seperti yang ditunjukkan di bawah.
Seterusnya, kita perlu mengetahui Ciri yang berkaitan dengan perkhidmatan ini. Untuk mengetahui bahawa cukup klik pada Perkhidmatan Bateri dan anda akan dibawa ke halaman Karakteristik Servis, di mana disebutkan bahawa Tahap bateri adalah nama ciri-ciri dan ia memerlukan nilai dari 0 hingga 100. Juga perhatikan bahawa kita hanya dapat melakukan dua tindakan dengan ciri ini, salah satunya adalah Membaca yang wajib dilakukan dan yang lain adalah Memberitahu yang mana Pilihan. Oleh itu, kita harus menghantar nilai bateri kepada klien (Telefon) yang wajib dan jika diperlukan kita dapat memberitahu telefon mengenai pilihan mana.
Tetapi tunggu kami masih tidak menemui nilai UUID untuk Tahap Bateri Karakteristik. Untuk melakukannya masuk ke halaman Ciri Bateri dan cari nama Tahap Bateri, anda akan mendapat UUIDnya sebagai 0X2A19, gambar yang sama ditunjukkan di bawah.
Sekarang kita mempunyai semua nilai, mari kita letakkan program seperti yang ditunjukkan di bawah. Nama BatterySerivce , BatteryLevelCharacteristic dan BatteryLevelDescriptor adalah pemboleh ubah yang ditentukan pengguna untuk merujuk kepada Perkhidmatan, Karakteristik dan Deskriptor yang kita gunakan dalam program ini. Nilai untuk Deskriptor 0X2901 digunakan apabila ukuran nilainya 8-bit, lebih banyak maklumat boleh didapati di halaman Penerangan Deskriptor.
#define BatteryService BLEUUID ((uint16_t) 0x180F)
BLECharacteristic BatteryLevelCharacteristic (BLEUUID ((uint16_t) 0x2A19), BLECharacteristic :: PROPERTY_READ - BLECharacteristic :: PROPERTY_NOTIFY); BLEDescriptor BatteryLevelDescriptor (BLEUUID ((uint16_t) 0x2901));
Kembali ke fungsi initBLE . Mula-mula kita mesti memulakan pelayan BLE dan membuatnya beriklan dengan nama. Garis berikut digunakan untuk memulakan BLE sebagai pelayan. Nama yang saya berikan kepada pelayan BLe saya adalah "BLE Battery", tetapi anda boleh memilih sendiri.
BLEDevice:: init ("BLE Battery"); // Buat Server BLE BLEServer * pServer = BLEDevice:: createServer (); pServer-> setCallbacks (MyServerCallbacks baru ());
Seterusnya kita harus memulakan perkhidmatan GATT kerana kita sudah menentukan UUID kita hanya boleh memulakan perkhidmatan menggunakan baris di bawah.
// Buat Perkhidmatan BLE BLEService * pBattery = pServer-> createService (BatteryService);
Setelah perkhidmatan dimulakan, kita dapat menghubungkan deskriptor dengan ciri-ciri, dan menetapkan nilai. Perkhidmatan BLE2902 juga ditambahkan di sini seperti gambar di bawah.
pBattery-> addCharacteristic (& BatteryLevelCharacteristic); BatteryLevelDescriptor.setValue ("Peratusan 0 - 100"); BatteryLevelCharacteristic.addDescriptor (& BatteryLevelDescriptor); BatteryLevelCharacteristic.addDescriptor (BLE2902 baru ());
Akhirnya semuanya sudah siap, sekarang yang tinggal hanyalah meminta ESP32 untuk mengiklankan supaya peranti lain seperti telefon kita dapat mencarinya dan menyambung ke sana, dan apabila disambungkan ke pelanggan, ia harus memulakan perkhidmatan Bateri yang dapat dilakukan walaupun baris berikut.
pServer-> getAdvertising () -> addServiceUUID (BatteryService); pBattery-> mula (); // Mulakan iklan pServer-> getAdvertising () -> mula ();
Sejauh ini, langkah terakhir adalah untuk memberi tahu perihal berapa nilai bateri dalam peratusan yang harus dihantar kepada pelanggan (Telefon). Nilai ini boleh dari 0 -100 seperti yang kita baca sebelumnya, untuk memastikan semuanya mudah, saya mempunyai kod keras sederhana nilai bateri menjadi 57 dan kemudian menambahnya setiap 5 saat dan bermula dari 0 setelah mencapai 100. Kod yang harus dilakukan yang ditunjukkan di bawah. Perhatikan bahawa nilai yang dihantar adalah dalam format unit8_t.
tahap uint8_t = 57; gelung kosong () { BatteryLevelCharacteristic.setValue (& level, 1); BatteryLevelCharacteristic.notify (); kelewatan (5000); tahap ++; Serial.println (int (tahap)); jika (int (level) == 100) tahap = 0; }
Menguji perkhidmatan GATT anda di ESP32 BLE
The kod lengkap yang diterangkan di atas ini diberikan pada akhir halaman. Muat naik kod ke papan ESP32 anda. Setelah dimuat naik, telefon anda akan menemui peranti Bluetooth yang disebut "BLE Battery" Pasangkan dengannya.
Kemudian pasang aplikasi android nRF dan buka dan sambungkan ke peranti BLE Battery BLE. Luaskan bahagian Perkhidmatan Bateri dan anda akan menemui skrin berikut.
Seperti yang anda lihat, Aplikasi telah secara automatik mengenal pasti bahawa BLE menyediakan Perkhidmatan Bateri dan mempunyai ciri-ciri Tahap Bateri kerana UUID yang kami gunakan dalam program ini. Anda juga dapat melihat bahawa nilai bateri semasa iaitu 67% menunggu selama 5 saat dan anda juga dapat melihatnya akan bertambah.
Perkara yang menarik mengenai penggunaan BLE ialah sekarang aplikasi yang berfungsi dengan BLE akan menganggap bahawa ESP32 anda adalah peranti BLE yang memberitahu tahap bateri. Untuk mencubanya, saya menggunakan aplikasi bernama BatON dan aplikasi tersebut mengenal pasti ESP32 sebagai peranti Bluetooth berkuasa bateri dan memberikan pemberitahuan peratusan di telefon saya seperti ini
Sejuk !! Betul? Saya juga telah menunjukkan kerja yang lengkap dalam video di bawah. Sekarang, setelah anda belajar menggunakan perkhidmatan BLE Battery dengan ESP32, anda juga boleh mencuba perkhidmatan GATT lain yang sangat menarik seperti Denyutan nadi, HID, Denyut Jantung dll. Selamat bersenang-senang….