Server dan Klien BLE ESP32 (Bluetooth Hemat Energi)

Pelajari cara membuat koneksi BLE (Bluetooth Low Energy) antara dua papan ESP32. Satu ESP32 akan menjadi server, dan ESP32 lainnya akan menjadi klien. Server BLE mengiklankan karakteristik yang berisi pembacaan sensor yang dapat dibaca oleh klien. Klien ESP32 BLE membaca nilai karakteristik tersebut (suhu dan kelembaban) dan menampilkannya di layar OLED.

Apa itu Bluetooth Hemat Energi?

Sebelum langsung ke proyek, penting untuk melihat sekilas beberapa konsep penting BLE sehingga Anda nanti dapat lebih memahami proyek. Jika Anda sudah terbiasa dengan BLE, Anda dapat melompat ke bagian Tinjauan Proyek.

Bluetooth Low Energy, singkatnya BLE, adalah varian Bluetooth yang hemat daya. Aplikasi utama BLE adalah transmisi jarak pendek dari sejumlah data kecil (bandwidth rendah). Tidak seperti Bluetooth yang selalu aktif, BLE tetap dalam mode tidur terus-menerus kecuali saat koneksi dimulai.

Ini membuatnya mengkonsumsi daya yang sangat rendah. BLE mengkonsumsi daya sekitar 100x lebih sedikit daripada Bluetooth (tergantung pada kasus penggunaan). Anda dapat memeriksa perbedaanutama antara Bluetooth dan Bluetooth Low Energy di sini.

BLE Server dan Klien

Dengan Bluetooth Low Energy, ada dua jenis perangkat: server dan klien. ESP32 dapat bertindak baik sebagai klien atau sebagai server.

Server mengiklankan keberadaannya, sehingga dapat ditemukan oleh perangkat lain dan berisi data yang dapat dibaca oleh klien. Klien memindai perangkat terdekat, dan ketika menemukan server yang dicari, klien membuat koneksi dan mendengarkan data yang masuk. Ini disebut komunikasi point-to-point.

Ada kemungkinan mode komunikasi lain seperti mode siaran dan jaringan mesh (tidak tercakup dalam tutorial ini).

GATT

GATT adalah singkatan dari Generic Attributes dan mendefinisikan struktur data hierarkis yang diekspos ke perangkat BLE yang terhubung. Ini berarti bahwa GATT mendefinisikan cara dua perangkat BLE mengirim dan menerima pesan standar. Memahami hierarki ini penting karena akan memudahkan untuk memahami cara menggunakan BLE dengan ESP32.

Profil: kumpulan layanan standar untuk kasus penggunaan tertentu;

Layanan: pengumpulan informasi terkait, seperti pembacaan sensor, level baterai, detak jantung, dll. ;

Karakteristik: ini adalah tempat data aktual disimpan pada hierarki (nilai);

Deskriptor: metadata tentang data;

Properties: menggambarkan bagaimana nilai karakteristik dapat berinteraksi dengan. Misalnya: membaca, menulis, memberi tahu, menyiarkan, menunjukkan, dll.

Dalam contoh kami, kami akan membuat layanan dengan dua karakteristik. Satu untuk suhu dan satu lagi untuk kelembaban. Pembacaan suhu dan kelembaban aktual disimpan pada nilai di bawah karakteristiknya. Setiap karakteristik memiliki properti notify, sehingga memberi tahu klien setiap kali nilainya berubah.

UUID

Setiap layanan, karakteristik, dan deskriptor memiliki UUID (Universally Unique Identifier). UUID adalah nomor 128-bit (16 byte) yang unik. Sebagai contoh:

Ada UUID yang dipersingkat untuk semua jenis, layanan, dan profil yang ditentukan dalam SIG (Bluetooth SpecialInterest Group).

Tetapi jika aplikasi Anda membutuhkan UUID sendiri, Anda dapat membuatnya menggunakan situs web generator UUID ini.

Singkatnya, UUID digunakan untuk mengidentifikasi informasi secara unik. Misalnya, dapat mengidentifikasi layanan tertentu yang disediakan oleh perangkat Bluetooth.

Untuk pengenalan lebih rinci tentang BLE, baca panduan memulai kami:

    Memulai dengan ESP32 Bluetooth Low Energy(BLE) di Arduino IDE

Ulasan Proyek

Dalam tutorial ini, Anda akan mempelajari cara membuat koneksi BLE antara dua papan ESP32. Satu ESP32 akan menjadi server BLE, dan ESP32 lainnya akan menjadi klien BLE.

Server ESP32 BLE terhubung ke sensor BME280 dan memperbarui nilai karakteristik suhu dan kelembapannya setiap 30 detik.

Klien ESP32 terhubung ke server BLE dan diberi tahu tentang nilai karakteristik suhu dan kelembapannya. ESP32 ini terhubung ke layar OLED dan mencetak pembacaan terbaru.

Proyek ini dibagi menjadi dua bagian:

    Bagian 1 – Server ESP32 BLE

    Bagian 2 – klien ESP32 BLE

Bagian yang Diperlukan

Berikut daftar bagian yang diperlukan untuk mengikuti proyek ini:

Server ESP32 BLE :

    ESP32 DOIT DEVKIT V1 Board (baca Papanpengembangan ESP32 Terbaik)

    Sensor BME280

    Kabel jumper

    Breadboard

    • Ponsel cerdas dengan Bluetooth (opsional)

Klien BLE ESP32 :

    ESP32 DOIT DEVKIT V1 Board (baca Papanpengembangan ESP32 Terbaik)

    layar OLED

    Kabel jumper

    Breadboard

1) Server ESP32 BLE

Di bagian ini, kami akan menyiapkan Server BLE yang mengiklankan layanan yang berisi dua karakteristik: satu untuk suhu dan lainnya untuk kelembaban. Karakteristik tersebut memiliki properti Notify untuk memberi tahu nilai baru kepada klien.

Diagram Skematik

Server ESP32 BLE akan mengiklankan karakteristik dengan suhu dan kelembaban dari sensor BME280. Anda dapat menggunakan sensor lain selama Anda menambahkan baris yang diperlukan dalam kode.

Kami akan menggunakan komunikasi I2C dengan modul sensor BME280. Untuk itu, hubungkan sensor ke pin ESP32 SCL (GPIO 22) dan SDA (GPIO 21) default, seperti yang ditunjukkan pada diagram skema berikut.

Menginstal Perpustakaan BME280

Seperti disebutkan sebelumnya, kami akan mengiklankan pembacaan sensor dari sensor BME280. Jadi, Anda perlu menginstal perpustakaan untuk berinteraksi dengan sensor BME280.

    Adafruit_BME280 perpustakaan

    Pustaka Adafruit_Sensor

Anda dapat menginstal perpustakaan menggunakan Arduino Library Manager. Buka Sketsa > Include Library > Manage Library dan cari nama perpustakaan.

Memasang Pustaka (Kode VS + PlatformIO)

Jika Anda menggunakan Kode VS dengan ekstensi PlatformIO, salin kode berikut ke file platformio.ini untuk menyertakan perpustakaan.

ESP32 BLE Server – Kode

Dengan sirkuit siap dan pustaka yang diperlukan terinstal, salin kode berikut ke Arduino IDE, atau ke file main.cpp jika Anda menggunakan Kode VS.







 


Anda dapat mengunggah kode, dan itu akan langsung berfungsi mengiklankan layanannya dengan karakteristik suhu dan kelembaban. Lanjutkan membaca untuk mempelajari cara kerja kode, atau lewati ke bagian Klien.

Ada beberapa contoh yang menunjukkan cara menggunakan BLE dengan ESP32 di bagian Contoh. Di Arduino IDE Anda, buka File > Example > ESP32 BLE Arduino. Sketsa server ini didasarkan pada contoh Notify.

Mengimpor Library

Kode dimulai dengan mengimpor perpustakaan yang diperlukan.

Memilih Satuan Suhu

Secara default, ESP mengirimkan suhu dalam derajat Celcius. Anda dapat mengomentari baris berikut atau menghapusnya untuk mengirim suhu dalam derajat Fahrenheit.

Nama Server BLE

Baris berikut mendefinisikan nama untuk server BLE kami. Biarkan nama server BLE default. Jika tidak, nama server dalam kode klien juga perlu diubah (karena harus cocok).

Sensor BME280

Buat objek Adafruit_BME280 yang disebut bme pada pin ESP32 I2C default.

Variabel temp, tempF dan hum akan menahan suhu dalam derajat Celcius, suhu dalam derajat Fahrenheit, dan kelembaban yang dibaca dari sensor BME280.

Variabel lainnya

Variabel pengatur waktu berikut menentukan seberapa sering kita ingin menulis karakteristik suhu dan kelembaban. Kami menyetel variabel timerDelay ke 30000 milidetik (30 detik), tetapi Anda dapat mengubahnya.

Variabel boolean deviceConnected memungkinkan kita untuk melacak jika klien terhubung ke server.

UUID BLE

Pada baris berikutnya, kami mendefinisikan UUID untuk layanan, untuk karakteristik suhu dalam celsius, untuk karakteristik suhu dalam Fahrenheit, dan untuk kelembaban.


Saya sarankan meninggalkan semua UUID default. Jika tidak, Anda juga perlu mengubah kode di sisi klien—sehingga klien dapat menemukan layanan dan mengambil nilai karakteristik.

setup()

Di setup(), inisialisasi Serial Monitor dan sensor BME280.

Buat perangkat BLE baru dengan nama server BLE yang telah Anda tentukan sebelumnya :

Atur perangkat BLE sebagai server dan tetapkan fungsi panggilan balik.

Fungsi panggilan balik MyServerCallbacks() mengubah variabel boolean deviceConnected menjadi benar atau salah sesuai dengan keadaan perangkat BLE saat ini. Ini berarti bahwa jika klien terhubung ke server, statusnya benar. Jika klien terputus, variabel boolean berubah menjadi false. Inilah bagian dari kode yang mendefinisikan fungsi MyServerCallbacks().

Mulai layanan BLE dengan layanan UUID yang ditentukan sebelumnya.

Kemudian, buat karakteristik suhu BLE. Jika Anda menggunakan derajat Celcius, ia menetapkan karakteristik dan deskriptor berikut :

Jika tidak, ia menetapkan karakteristik Fahrenheit :

Setelah itu, ia menetapkan karakteristik kelembaban :

Terakhir, Anda memulai layanan, dan server memulai iklan sehingga perangkat lain dapat menemukannya.

loop()

Fungsi loop() cukup mudah. Anda terus-menerus memeriksa apakah perangkat terhubung ke klien atau tidak. Jika terhubung, dan timerDelay telah berlalu, ia membaca suhu dan kelembaban saat ini.

Jika Anda menggunakan suhu dalam Celcius, ini menjalankan bagian kode berikut. Pertama, ia mengubah suhu menjadi variabel char (variabel temperaturCTemp). Kita harus mengonversi suhu ke tipe variabel char untuk menggunakannya dalam fungsi setValue().

Kemudian, ia menetapkan nilai bmeTemperatureCelsiusCharacteristic ke nilai suhu baru (temperatureCTemp) menggunakan fungsi setValue(). Setelah mengatur nilai baru, kami dapat memberi tahu klien yang terhubung menggunakan fungsi notify().

Kami mengikuti prosedur serupa untuk Suhu dalam Fahrenheit.

Mengirim kelembaban juga menggunakan proses yang sama.

Menguji Server ESP32 BLE

Unggah kode ke papan Anda dan kemudian, buka Serial Monitor. Maka akan muncul pesan seperti gambar dibawah ini.

Kemudian, Anda dapat menguji apakah server BLE berfungsi seperti yang diharapkan dengan menggunakan aplikasi pemindaian BLE di ponsel cerdas Anda seperti nRF Connect. Aplikasi ini tersedia untuk Android dan iOS.

Setelah menginstal aplikasi, aktifkan Bluetooth di ponsel cerdas Anda. Buka aplikasi nRF Connect dan klik tombol Pindai. Ini akan menemukan semua perangkat Bluetooth terdekat, termasuk perangkat BME280_ESP32 Anda (ini adalah nama server BLE yang Anda tentukan pada kode).

Hubungkan ke perangkat BME280_ESP32 Anda dan kemudian, pilih tab klien (antarmuka mungkin sedikit berbeda). Anda dapat memeriksa apakah itu mengiklankan layanan dengan UUID yang kami tetapkan dalam kode, serta karakteristik suhu dan kelembaban. Perhatikan bahwa karakteristik tersebut memiliki properti Notify.


Server BLE ESP32 Anda sudah siap!

Pergi ke bagian berikutnya untuk membuat klien ESP32 yang terhubung ke server untuk mendapatkan akses ke karakteristik suhu dan kelembaban dan mendapatkan pembacaan untuk menampilkannya pada layar OLED.

2) Klien BLE ESP32

Di bagian ini, kami akan membuat klien ESP32 BLE yang akan membuat koneksi dengan server ESP32 BLE, dan menampilkan pembacaan pada layar OLED.

Skema

Klien ESP32 BLE terhubung ke layar OLED. Layar menunjukkan pembacaan yang diterima melalui Bluetooth.

Hubungkan layar OLED Anda ke ESP32 dengan mengikuti diagram skema berikut. Pin SCL terhubung ke GPIO 22 dan pin SDA ke GPIO 21.

Memasang Pustaka SSD1306, GFX, dan BusIO

Anda perlu menginstal pustaka berikut untuk berinteraksi dengan tampilan OLED :

    Pustaka Adafruit_SSD1306

    Pustaka Adafruit GFX

    Pustaka Adafruit BusIO

Untuk menginstal perpustakaan, buka Sketsa> Include Library> Manage Libraries, dan cari nama perpustakaan.

Menginstal Perpustakaan (Kode VS + PlatformIO)

Jika Anda menggunakan Kode VS dengan ekstensi PlatformIO, salin kode berikut ke file platformio.ini untuk menyertakan perpustakaan.

Klien BLE ESP32 – Kode

Salin Sketsa klien BLE ke Arduino IDE Anda atau ke file main.cpp jika Anda menggunakan Kode VS dengan PlatformIO.

 





 


 


Lanjutkan membaca untuk mempelajari cara kerja kode atau lewati ke bagian Demonstrasi.

Mengimpor Libraries

Anda mulai dengan mengimpor perpustakaan yang diperlukan:

Memilih unit suhu

Secara default, klien akan menerima suhu dalam derajat Celcius, jika Anda mengomentari baris berikut atau menghapusnya, itu akan mulai menerima suhu dalam derajat Fahrenheit.

Nama Server BLE dan UUID

Kemudian, tentukan nama server BLE yang ingin kita sambungkan dan layanan serta karakteristik UUID yang ingin kita baca. Biarkan nama server BLE default dan UUID agar sesuai dengan yang ditentukan dalam sketsa server.

Mendeklarasikan Variabel

Kemudian, Anda perlu mendeklarasikan beberapa variabel yang akan digunakan nanti dengan Bluetooth untuk memeriksa apakah kita terhubung ke server atau tidak.

Buat variabel bertipe BLEAddress yang mengacu pada alamat server yang ingin kita hubungkan. Alamat ini akan ditemukan selama pemindaian.

Atur karakteristik yang ingin kita baca (suhu dan kelembaban).

Tampilan OLED

Anda juga perlu mendeklarasikan beberapa variabel untuk bekerja dengan OLED. Tentukan lebar dan tinggi OLED :

Buat tampilan OLED dengan lebar dan tinggi yang ditentukan sebelumnya.

Variabel Suhu dan Kelembaban

Tentukan variabel char untuk menampung nilai suhu dan kelembaban yang diterima oleh server.

Variabel berikut digunakan untuk memeriksa apakah pembacaan suhu dan kelembaban baru tersedia dan apakah sudah waktunya untuk memperbarui tampilan OLED.

printReadings()

Kami membuat fungsi yang disebut printReadings() yang menampilkan pembacaan suhu dan kelembaban pada layar OLED.

setup()

Di setup(), mulai tampilan OLED.

Kemudian, cetak pesan di baris pertama yang mengatakan "BME SENSOR".

Mulai komunikasi serial pada baud rate 115200.

Dan inisialisasi perangkat BLE.

Pindai perangkat terdekat

Metode berikut memindai perangkat terdekat.

Fungsi MyAdvertisedDeviceCallbacks()

Perhatikan bahwa fungsi MyAdvertisedDeviceCallbacks(), setelah menemukan perangkat BLE, memeriksa apakah perangkat yang ditemukan memiliki nama server BLE yang benar. Jika ya, itu akan menghentikan pemindaian dan mengubah variabel boolean doConnect menjadi true. Dengan cara ini kami tahu bahwa kami menemukan server yang kami cari, dan kami dapat mulai membuat koneksi.

Sambungkan ke server

Jika variabel doConnect benar, ia mencoba menyambung ke server BLE. Fungsi connectToServer() menangani koneksi antara klien dan server.

Itu juga menetapkan fungsi panggilan balik yang bertanggung jawab untuk menangani apa yang terjadi ketika nilai baru diterima.

Setelah klien BLE terhubung ke server, Anda perlu mengaktifkan properti notify untuk setiap karakteristik. Untuk itu, gunakan metode writeValue() pada deskriptor.

Beri tahu nilai baru

Saat klien menerima nilai notifikasi baru, ia akan memanggil dua fungsi ini: temperatureNotifyCallback() dan kelembabanNotifyCallback() yang bertanggung jawab untuk mengambil nilai baru, memperbarui OLED dengan pembacaan baru dan mencetaknya di Serial Monitor.


Kedua fungsi sebelumnya dijalankan setiap kali server BLE memberi tahu klien dengan nilai baru, yang terjadi setiap 30 detik. Fungsi-fungsi ini menyimpan nilai yang diterima pada variabel temperatureChar dan kelembapanChar. Ini juga mengubah variabel NewTemperature dan newHumidity menjadi true, sehingga kami tahu bahwa kami telah menerima pembacaan baru.

Tampilkan pembacaan suhu dan kelembaban baru

Di loop(), ada pernyataan if yang memeriksa apakah pembacaan baru tersedia. Jika ada pembacaan baru, kami menyetel variabel Suhu baru dan Kelembaban baru ke false, sehingga kami dapat menerima pembacaan baru nanti. Kemudian, kita memanggil fungsi printReadings() untuk menampilkan pembacaan pada OLED.

Menguji Proyek

Itu saja untuk kodenya. Anda dapat mengunggahnya ke papan ESP32 Anda.

Setelah kode diunggah. Nyalakan server ESP32 BLE, lalu aktifkan ESP32 dengan sketsa klien. Klien mulai memindai perangkat terdekat, dan ketika menemukan ESP32 lain, itu membuat koneksi Bluetooth. Setiap 30 detik, ini memperbarui tampilan dengan pembacaan terbaru.

Penting: jangan lupa untuk memutuskan koneksi smartphone Anda dari server BLE. Jika tidak, Klien BLE ESP32 tidak akan dapat terhubung ke server.

Membungkus

Dalam tutorial ini, Anda belajar cara membuat Server BLE dan Klien BLE dengan ESP32. Anda telah mempelajari cara menyetel nilai suhu dan kelembapan baru pada karakteristik server BLE. Kemudian, perangkat BLE lain (klien) dapat terhubung ke server tersebut dan membaca nilai karakteristik tersebut untuk mendapatkan nilai suhu dan kelembapan terbaru. Karakteristik tersebut memiliki properti notify, sehingga klien diberitahu setiap kali ada nilai baru.

Menggunakan BLE adalah protokol komunikasi lain yang dapat Anda gunakan dengan papan ESP32 selain Wi-Fi. Kami harap Anda menemukan tutorial ini bermanfaat. Kami memiliki tutorial untuk protokol komunikasi lain yang mungkin berguna bagi Anda.

    ESP32 Bluetooth Classic dengan ArduinoIDE – Memulai

    ESP32 Fungsi Pustaka Wi-Fi Berguna(Arduino IDE)

    ESP-MESH dengan ESP32 dan ESP8266:Memulai (pustaka painlessMesh)

    Memulai dengan ESP-NOW (ESP32 denganArduino IDE)

Pelajari lebih lanjut tentang ESP32 dengan sumber daya kami :

    Belajar ESP32 dengan Arduino IDE (eBook +Video Course)

    Lebih banyak proyek dan tutorial ESP32…

Sumber : randomnerdtutorials.com

Posting Komentar

0 Komentar