- Prasyarat
- Bahan yang Dibutuhkan
- Perangkat keras
- Dapatkan Alamat Bluetooth Anda dari Server (Alamat band kebugaran)
- Memperoleh Layanan dan Karakteristik UUID server
- Memprogram ESP32 untuk bertindak sebagai klien untuk Aplikasi Proximity Switch
- Bekerja dan Menguji
Betapa kerennya menyalakan lampu secara otomatis segera setelah Anda masuk ke rumah dan mematikannya lagi ketika Anda pergi! Ya, aplikasi sederhana dapat melakukannya untuk Anda. Di sini, di proyek ini, kami akan menggunakan ESP32 sebagai klien BLE dan pita kebugaran sebagai server BLE, jadi setiap kali seseorang yang mengenakan tali kebugaran datang dalam jangkauan ESP32 Bluetooth, ESP32 mendeteksinya dan menyalakan Lampu. Perangkat Bluetooth apa pun yang memiliki kemampuan server BLE dapat digunakan sebagai perangkat pemicu untuk mengontrol peralatan rumah apa pun menggunakan ESP32.
Kami telah menjelajahi fungsionalitas BLE (Bluetooth Low Energy) dari modul ESP32 dan saya sangat senang karenanya. Sebagai ringkasan, modul ini memiliki Bluetooth klasik dan Bluetooth Hemat Energi (BLE), Bluetooth klasik dapat digunakan untuk mentransfer lagu atau file dan opsi BLE dapat digunakan untuk aplikasi yang dioptimalkan dengan baterai seperti suar Bluetooth, band kebugaran, proximity s, dll. Juga dimungkinkan untuk menggunakannya sebagai Bluetooth serial seperti modul HC-05 atau HC-06 untuk proyek mikrokontroler sederhana.
Seperti yang Anda ketahui, ESP32 BLE dapat beroperasi dalam dua mode berbeda. Salah satunya adalah mode server yang telah kita diskusikan dengan memanfaatkan layanan GATT untuk meniru layanan indikator level baterai. Dalam latihan itu, ESP32 bertindak sebagai server dan ponsel kami bertindak sebagai klien. Sekarang, mari kita mengoperasikan ESP32 sebagai klien dan mencoba menghubungkannya ke server BLE lain seperti gelang kebugaran saya.
Semua server BLE termasuk gelang kebugaran saya berada dalam mode periklanan konstan yang selalu dapat ditemukan saat dipindai oleh klien. Dengan memanfaatkan fitur ini, kami dapat menggunakan gelang kebugaran ini sebagai sakelar kedekatan, yang berarti gelang kebugaran ini selalu terikat ke tangan pengguna dan dengan memindai gelang kami dapat mendeteksi jika orang tersebut berada dalam jangkauan. Inilah yang akan kita lakukan di artikel ini. Kami akan memprogram ESP32 untuk bertindak sebagai klien BLE dan terus memindai perangkat BLE; jika kami menemukan band kebugaran dalam jangkauan kami akan mencoba menghubungkannya dan jika koneksi berhasil kami dapat memicu bola lampu dengan mengaktifkan salah satu pin GPIO di ESP32. Metode ini dapat diandalkan karena setiap server BLE(gelang kebugaran) akan memiliki ID perangkat keras yang unik sehingga tidak ada dua perangkat server BLE yang identik. Menarik kan? !!! Sekarang, mari kita mulai membangun
Prasyarat
Pada artikel ini, saya berasumsi bahwa Anda sudah terbiasa tentang cara menggunakan papan ESP32 dengan Arduino IDE, jika tidak kembali untuk memulai dengan tutorial ESP32.
Kami telah membagi ESP32 Bluetooth menjadi tiga segmen untuk kemudahan pemahaman. Jadi disarankan untuk melalui dua tutorial pertama sebelum memulai dengan yang satu ini.
- Serial Bluetooth pada ESP32 mengaktifkan LED dari Ponsel
- Server BLE untuk mengirim data level Baterai ke Ponsel menggunakan Layanan GATT
- Klien BLE untuk memindai perangkat BLE dan bertindak sebagai suar.
Kami telah membahas dua tutorial pertama, di sini kami melanjutkan dengan yang terakhir untuk menjelaskan ESP32 sebagai klien BLE.
Bahan yang Dibutuhkan
- Papan Pengembangan ESP32
- Beban AC (Lampu)
- Modul Relai
Perangkat keras
Perangkat keras untuk proyek Klien ESP32 BLE ini cukup sederhana karena sebagian besar keajaiban terjadi di dalam kode. ESP32 harus mengaktifkan lampu AC (Beban) ketika sinyal Bluetooth ditemukan atau hilang. Untuk mengubah beban ini kita akan menggunakan Relay, dan karena pin GPIO ESP32 hanya kompatibel dengan 3.3V, kita memerlukan modul Relay yang dapat digerakkan dengan 3.3V. Cukup periksa transistor apa yang digunakan dalam modul Relay jika itu BC548, Anda dapat melanjutkan yang lain membangun sirkuit Anda sendiri dengan mengikuti diagram rangkaian di bawah ini.
Peringatan: Sirkuit berhubungan dengan tegangan listrik AC 220V langsung. Hati-hati dengan kabel yang hidup dan pastikan Anda tidak membuat korsleting. Anda telah diperingatkan.
Alasan di balik penggunaan BC548 melalui BC547 atau 2N2222 adalah karena mereka memiliki tegangan basis-emitor rendah yang dapat dipicu hanya dengan 3,3V. The Relay digunakan di sini adalah sebuah relay 5V, jadi kita kekuasaan itu dengan Vin pin yang mendapat 5V membentuk kabel listrik. Pin arde terhubung ke arde sirkuit. The Resistor R1 1K digunakan sebagai dasar saat limiter resistor. Kabel Phase dihubungkan ke pin NO dari Relay dan pin Common dari Relay dihubungkan ke beban dan ujung beban lainnya dihubungkan ke Netral. Anda dapat menukar posisi Fase dan Netral tetapi berhati-hatilah agar Anda tidak menyingkatnya secara langsung. Arus harus selalu melewati Beban (Bulb).Saya telah menggunakan modul Relay agar semuanya tetap sederhana dan beban di sini adalah lampu LED Fokus. Pengaturan saya terlihat seperti ini di bawah
Jika Anda ingin melewatkan perangkat keras untuk saat ini, Anda dapat menggunakan pin GPIO 2 alih-alih pin GPIO 13 untuk mengaktifkan LED on-board pada ESP32. Metode ini direkomendasikan untuk pemula.
Dapatkan Alamat Bluetooth Anda dari Server (Alamat band kebugaran)
Seperti yang diceritakan sebelumnya, kami akan memprogram ESP32 untuk bertindak sebagai klien (mirip dengan telepon) dan terhubung ke server yang merupakan band kebugaran saya (Lenovo HW-01). Agar klien dapat terhubung ke server, ia harus mengetahui alamat Bluetooth dari server. Setiap server Bluetooth seperti gelang kebugaran saya di sini, memiliki alamat Bluetooth uniknya sendiri yang permanen. Anda dapat menghubungkan ini dengan alamat MAC Laptop atau ponsel Anda.
Untuk mendapatkan Alamat ini dari server kami menggunakan aplikasi bernama nRF connect dari semi-konduktor Nordic yang telah kami gunakan untuk tutorial sebelumnya. Ini tersedia secara gratis untuk pengguna iOS dan Android. Cukup unduh, luncurkan aplikasi, dan pindai perangkat Bluetooth terdekat. Aplikasi akan mencantumkan semua perangkat BLE yang ditemukannya. Milik saya bernama HW-01 cukup lihat di bawah namanya dan Anda akan menemukan alamat perangkat keras server seperti yang ditunjukkan di bawah ini.
Jadi alamat perangkat keras ESP32 BLE dari gelang kebugaran saya adalah C7: F0: 69: F0: 68: 81, Anda akan memiliki kumpulan angka yang berbeda dalam format yang sama. Catat saja karena kita akan membutuhkannya saat kita memprogram ESP32 kita.
Memperoleh Layanan dan Karakteristik UUID server
Oke, sekarang kami telah mengidentifikasi server kami menggunakan alamat BLE tetapi untuk berkomunikasi dengannya kami perlu berbicara bahasa Layanan dan karakteristik, yang akan Anda pahami jika Anda telah membaca tutorial sebelumnya. Dalam tutorial ini saya menggunakan karakteristik tulis dari server saya (gelang kebugaran) untuk dipasangkan dengannya. Jadi untuk memasangkan dengan perangkat kita membutuhkan Service ad Characteristic UUID yang bisa kita dapatkan lagi dengan aplikasi yang sama.
Cukup klik tombol hubungkan pada aplikasi Anda dan cari beberapa karakteristik tulis, di mana aplikasi akan menampilkan layanan UUID dan karakteristik UUID. Punyaku ditampilkan di bawah
Di sini Layanan UUID dan UUID Karakteristik saya sama, tetapi tidak harus sama. Catat UUID server Anda. Punyaku dicatat sebagai
Layanan UUID: 0000fee7-0000-1000-8000-00805f9b34fb Karakteristik UUID: 0000fee7-0000-1000-8000-00805f9b34fb
Tidak wajib menggunakan karakteristik tulis; Anda dapat menggunakan layanan valid dan karakteristik UUID dari server yang ditampilkan dalam aplikasi.
Memprogram ESP32 untuk bertindak sebagai klien untuk Aplikasi Proximity Switch
Ide dari program ini adalah untuk membuat ESP32 bertindak sebagai klien yang terus memindai perangkat Bluetooth ketika menemukan server kami (pita kebugaran), ia memverifikasi ID perangkat keras dan itu akan menyalakan lampu melalui pin GPIO 13. Baiklah! !, tapi ada satu masalah dengan itu. Semua server BLE akan memiliki jangkauan 10 meter yang terlalu banyak. Jadi jika kita mencoba membuat sakelar proximity untuk menyalakan lampu pintu yang terbuka, kisaran ini sangat tinggi.
Untuk mengurangi jangkauan server BLE kita dapat menggunakan opsi pemasangan. Server BLE dan klien akan tetap dipasangkan hanya jika keduanya berada dalam jarak 3-4 Meter. Itu sempurna untuk aplikasi kita. Jadi, kami membuat ESP32 tidak hanya untuk menemukan server BLE tetapi juga untuk menyambungkannya dan memastikan apakah itu tetap berpasangan. Selama dipasangkan, lampu AC akan tetap menyala, saat jangkauan melebihi pemasangan akan hilang dan lampu akan dimatikan. Program contoh ESP32 BLE lengkap untuk melakukan hal yang sama diberikan di akhir halaman ini. Di bawah ini, saya akan memecah kode menjadi potongan kecil dan mencoba menjelaskannya.
Setelah menyertakan file header, kami memberi tahu ESP32 tentang alamat BLE, Layanan, dan karakteristik UUID yang kami peroleh melalui aplikasi nRF connect seperti yang dijelaskan dalam judul di atas. Kodenya terlihat seperti di bawah ini
serviceUUID BLEUID statis ("0000fee7-0000-1000-8000-00805f9b34fb"); // Layanan UUID dari fitnessband diperoleh melalui aplikasi penghubung nRF statis BLEUUID charUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // Karakteristik UUID dari fitnessband yang diperoleh melalui aplikasi koneksi nRF String My_BLE_Address = "c7: f0: 69: f0: 68: 81"; // Hardware Bluetooth MAC dari band fitness saya , akan bervariasi untuk setiap band yang diperoleh melalui aplikasi nRF connect
Diikuti oleh itu dalam program kita memiliki connectToserver dan MyAdvertisedDeviceCallback yang akan kita bahas nanti. Kemudian di dalam fungsi pengaturan , kami menginisialisasi monitor serial dan membuat BLE di ESP untuk memindai perangkat. Setelah pemindaian selesai untuk setiap perangkat BLE menemukan fungsi MyAdvertisedDeviceCallbacks dipanggil.
Kami juga mengaktifkan pemindaian aktif karena kami menyalakan ESP32 dengan daya listrik, untuk aplikasi baterai dimatikan untuk mengurangi konsumsi saat ini. Pin pemicu Relay terhubung ke GPIO 13 di perangkat keras kami, jadi kami juga menyatakan bahwa pin GPIO 13 sebagai output.
void setup () { Serial.begin (115200); // Mulai monitor serial Serial.println ("program Server ESP32 BLE"); // Pesan intro BLEDevice:: init (""); pBLEScan = BLEDevice:: getScan (); // buat pBLEScan-> setAdvertisedDeviceCallbacks (new MyAdvertisedDeviceCallbacks ()); // Panggil kelas yang didefinisikan di atas pBLEScan-> setActiveScan (true); // pemindaian aktif menggunakan lebih banyak daya, tetapi dapatkan hasil lebih cepat pinMode (13, OUTPUT); // Deklarasikan pin LED built-in sebagai output }
Di dalam fungsi MyAdvertisedDeviceCallbacks , kami mencetak baris yang akan mencantumkan nama dan informasi lain dari perangkat BLE yang ditemukan. Kami membutuhkan ID perangkat keras dari perangkat BLE yang ditemukan sehingga kami dapat membandingkannya dengan yang diinginkan. Jadi kami menggunakan variabel Server_BLE_Address untuk mendapatkan alamat perangkat dan juga untuk mengubahnya dari tipe BLEAddress ke string.
kelas MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult (BLEAdvertisedDevice advertisedDevice) { Serial.printf ("Hasil Pindai:% s \ n", advertisedDevice.toString (). c_str ()); Server_BLE_Address = BLEAddress baru (advertisedDevice.getAddress ()); Scaned_BLE_Address = Server_BLE_Address-> toString (). C_str (); } };
Di dalam fungsi loop , kami memindai selama 3 detik dan meletakkan hasilnya di dalam foundDevices yang merupakan objek dari BLEScanResults. Jika kami menemukan satu atau lebih dari satu perangkat dengan memindai, kami mulai memeriksa apakah alamat BLE yang ditemukan cocok dengan yang kami masukkan dalam program. Jika kecocokannya positif dan perangkat tidak dipasangkan sebelumnya, kami mencoba memasangkannya menggunakan fungsi connectToserver. Kami juga telah menggunakan beberapa pernyataan Serial untuk tujuan pemahaman.
while (foundDevices.getCount ()> = 1) { if (Scaned_BLE_Address == My_BLE_Address && paired == false) { Serial.println ("Found Device: -)… connect to Server as client"); if (connectToserver (* Server_BLE_Address)) {
Di dalam fungsi connectToserver kami menggunakan UUID untuk dipasangkan dengan server BLE (band kebugaran). Untuk menyambung dengan server, ESP32 harus bertindak sebagai klien, jadi kami membuat klien dengan menggunakan fungsi createClient () dan kemudian menyambungkan ke alamat server BLE. Kemudian kami mencari layanan dan karakteristik menggunakan nilai UUID dan mencoba menghubungkannya. Ketika koneksi berhasil, fungsi mengembalikan nilai benar dan jika tidak, mengembalikan salah. Perhatikan bahwa tidak wajib memiliki layanan dan karakteristik UUID untuk dipasangkan dengan server, ini dilakukan hanya untuk pemahaman Anda.
bool connectToserver (BLEAddress pAddress) { BLEClient * pClient = BLEDevice:: createClient (); Serial.println ("- Klien yang dibuat"); // Hubungkan ke Server BLE. pClient-> menghubungkan (pAddress); Serial.println ("- Terhubung ke fitnessband"); // Dapatkan referensi ke layanan yang kita kejar di server BLE jarak jauh. BLERemoteService * pRemoteService = pClient-> getService (serviceUUID); if (pRemoteService! = nullptr) { Serial.println ("- Menemukan layanan kami"); kembali benar; } yang lain mengembalikan salah; // Dapatkan referensi ke karakteristik dalam layanan server BLE jarak jauh. pRemoteCharacteristic = pRemoteService->getCharacteristic (charUUID); if (pRemoteCharacteristic! = nullptr) Serial.println ("- Menemukan karakteristik kami"); kembali benar; }
Jika koneksi berhasil, GPIO pin 13 dibuat tinggi dan kontrol dikirim ke luar loop dengan menggunakan pernyataan break. Variabel Boolean yang dipasangkan juga disetel ke true.
if (connectToserver (* Server_BLE_Address)) { paired = true; Serial.println ("******************** LED AKTIF ********************** ** "); digitalWrite (13, TINGGI); istirahat; }
Setelah pemasangan berhasil dan pin GPIO dihidupkan kita harus memeriksa apakah perangkat masih dalam jangkauan. Karena, sekarang perangkat telah dipasangkan, layanan pemindaian BLE tidak lagi dapat melihatnya. Kami akan menemukannya lagi hanya ketika pengguna meninggalkan area tersebut. Jadi kita hanya perlu memindai server BLE dan jika kita menemukan kita harus mengatur pin GPIO ke rendah seperti yang ditunjukkan di bawah ini
if (Scaned_BLE_Address == My_BLE_Address && paired == true) { Serial. println ("Perangkat kami keluar dari jangkauan"); berpasangan = salah; Serial. println ("******************** LED OOOFFFFF ************************"); digitalWrite (13, LOW); ESP.restart (); istirahat; }
Bekerja dan Menguji
Setelah Anda siap dengan program dan pengaturan perangkat keras, cukup unggah kode ke ESP32 dan atur seluruh pengaturan seperti yang ditunjukkan di bawah ini.
Anda akan melihat Lampu dinyalakan segera setelah pita kebugaran (server) berpasangan dengan ESP32. Anda juga dapat memeriksanya dengan memperhatikan simbol koneksi Bluetooth pada gelang kebugaran. Setelah dipasangkan, coba berjalan menjauh dari ESP32 dan ketika Anda melintasi 3-4 meter Anda akan melihat bahwa simbol Bluetooth pada jam tangan menghilang dan koneksi terputus. Sekarang, jika Anda melihat lampu itu akan dimatikan. Saat Anda berjalan kembali, perangkat dipasangkan lagi dan lampu menyala. Pekerjaan lengkap proyek dapat ditemukan di video di bawah ini.
Semoga Anda menikmati proyek ini dan mempelajari sesuatu yang baru dalam perjalanan. Jika Anda menghadapi masalah untuk membuatnya berfungsi, jangan ragu untuk memposting masalah di forum atau bahkan di bagian komentar di bawah