- Pra-syarat
- Bahan yang Diperlukan
- Perkakasan
- Dapatkan Alamat Pelayan Bluetooth anda (Alamat jalur kecergasan)
- Mendapatkan UUID Perkhidmatan dan Ciri pelayan
- Memprogram ESP32 untuk bertindak sebagai pelanggan untuk Proximity Switch Application
- Bekerja dan Menguji
Betapa hebatnya menyalakan lampu secara automatik sebaik sahaja anda memasuki rumah anda dan mematikannya semula semasa anda pergi! Ya, aplikasi mudah boleh melakukannya untuk anda. Di sini, dalam projek ini, kami akan menggunakan ESP32 sebagai klien BLE dan jalur kecergasan sebagai pelayan BLE, jadi setiap kali seseorang yang memakai jalur kecergasan hadir dalam rangkaian Bluetooth ESP32, ESP32 akan mengesannya dan menyalakan Lampu. Mana-mana peranti Bluetooth yang mempunyai keupayaan pelayan BLE dapat digunakan sebagai alat pemicu untuk mengendalikan perkakas rumah menggunakan ESP32.
Kami telah meneroka fungsi BLE (Tenaga Rendah Bluetooth) modul ESP32 dan saya sangat gembira dengannya. Untuk memberikan rangkuman, modul ini mempunyai Bluetooth klasik dan Bluetooth Rendah Tenaga (BLE), Bluetooth klasik boleh digunakan untuk memindahkan lagu atau fail dan pilihan BLE dapat digunakan untuk aplikasi yang dioptimumkan dengan bateri seperti suar Bluetooth, jalur kecergasan, jarak dekat, dll. Anda juga boleh menggunakannya sebagai Bluetooth bersiri seperti modul HC-05 atau HC-06 untuk projek mikrokontroler sederhana.
Seperti yang anda ketahui, ESP32 BLE boleh beroperasi dalam dua mod yang berbeza. Salah satunya ialah mod pelayan yang telah kita bincangkan dengan menggunakan perkhidmatan GATT untuk meniru perkhidmatan penunjuk tahap bateri. Dalam latihan itu, ESP32 bertindak sebagai pelayan dan telefon bimbit kami bertindak sebagai pelanggan. Sekarang, mari kita kendalikan ESP32 sebagai pelanggan dan cuba menyambungkannya ke pelayan BLE lain seperti kumpulan kecergasan saya.
Semua pelayan BLE termasuk kumpulan kecergasan saya berada dalam mod pengiklanan berterusan sehingga selalu dapat ditemui semasa diimbas oleh pelanggan. Dengan memanfaatkan ciri ini, kita dapat menggunakan jalur kecergasan ini sebagai suis jarak, yang bermaksud jalur kecergasan ini selalu terikat pada tangan pengguna dan dengan mengimbas jalur tersebut, kita dapat mengesan jika orang itu berada dalam jangkauan. Inilah yang akan kita lakukan dalam artikel ini. Kami akan memprogramkan ESP32 untuk bertindak sebagai pelanggan BLE dan sentiasa mengimbas peranti BLE; jika kita menjumpai jalur kecergasan, kita akan cuba menyambungnya dan jika sambungannya berjaya, kita boleh mencetuskan lampu dengan menukar salah satu pin GPIO pada ESP32. Kaedahnya boleh dipercayai kerana setiap pelayan BLE(jalur kecergasan) akan mempunyai ID perkakasan yang unik sehingga tidak ada dua peranti pelayan BLE yang serupa. Menarik kan? !!! Sekarang, mari kita membina
Pra-syarat
Dalam artikel ini, saya menganggap bahawa anda sudah mengetahui cara menggunakan papan ESP32 dengan Arduino IDE, jika tidak kembali untuk memulakan tutorial ESP32.
Kami telah membahagikan ESP32 Bluetooth yang lengkap menjadi tiga segmen untuk kemudahan memahami. Oleh itu, disyorkan untuk menjalani dua tutorial pertama sebelum memulakannya.
- Bluetooth bersiri pada ESP32 beralih LED dari Telefon bimbit
- Pelayan BLE untuk menghantar data tahap Bateri ke Telefon bimbit menggunakan Perkhidmatan GATT
- Pelanggan BLE untuk mengimbas peranti BLE dan bertindak sebagai suar.
Kami telah membahas dua tutorial pertama, di sini kami meneruskan yang terakhir untuk menjelaskan ESP32 sebagai klien BLE.
Bahan yang Diperlukan
- Lembaga Pembangunan ESP32
- Beban AC (Lampu)
- Modul Relay
Perkakasan
Perkakasan untuk projek Klien ESP32 BLE ini cukup jelas kerana kebanyakan keajaiban berlaku di dalam kod. ESP32 harus menukar lampu AC (Beban) apabila isyarat Bluetooth ditemui atau hilang. Untuk menukar beban ini, kami akan menggunakan Relay, dan kerana pin GPIO ESP32 hanya bersesuaian dengan 3.3V, kami memerlukan modul Relay yang dapat dipacu dengan 3.3V. Cukup periksa transistor apa yang digunakan dalam modul Relay jika ia adalah BC548, anda boleh membina litar anda sendiri dengan mengikuti gambarajah litar di bawah.
Amaran: Litar berkenaan dengan voltan utama AC 220V. Hati-hati dengan wayar langsung dan pastikan anda tidak membuat litar pintas. Anda telah diberi amaran.
Sebab di sebalik penggunaan BC548 di atas BC547 atau 2N2222 adalah kerana mereka mempunyai voltan pemancar asas rendah yang dapat dipicu dengan hanya 3.3V. The relay digunakan di sini ialah relay 5V, jadi kita menghidupkannya dengan Vin pin yang mendapat 5V Borang kabel kuasa. Pin tanah disambungkan ke tanah litar. The perintang R1 1K digunakan sebagai perintang penghad arus tapak. Kawat Fasa disambungkan ke pin Relay NO dan pin Umum Relay disambungkan ke beban dan hujung beban yang lain disambungkan ke Neutral. Anda boleh menukar kedudukan Fasa dan Neutral tetapi berhati-hati anda tidak memendekkannya secara langsung. Arus harus selalu melalui Beban (Mentol).Saya telah menggunakan modul Relay untuk memastikan semuanya mudah dan beban di sini adalah lampu Focus LED. Persediaan saya kelihatan seperti ini di bawah
Sekiranya anda ingin melangkau perkakasan buat masa ini, anda boleh menggunakan pin GPIO 2 dan bukan pin GPIO 13 untuk menukar LED on-board pada ESP32. Kaedah ini disyorkan untuk pemula.
Dapatkan Alamat Pelayan Bluetooth anda (Alamat jalur kecergasan)
Seperti diberitahu sebelumnya, kami akan memprogramkan ESP32 untuk bertindak sebagai pelanggan (serupa dengan telefon) dan menyambung ke pelayan yang merupakan jalur kecergasan saya (Lenovo HW-01). Untuk pelanggan menyambung ke pelayan, ia harus mengetahui alamat Bluetooth pelayan. Setiap pelayan Bluetooth seperti jalur kecergasan saya di sini, mempunyai alamat Bluetooth tersendiri yang kekal. Anda boleh mengaitkannya dengan alamat MAC Laptop atau telefon bimbit anda.
Untuk mendapatkan Alamat ini dari pelayan, kami menggunakan aplikasi bernama nRF connect dari semi-konduktor Nordik yang telah kami gunakan untuk tutorial kami sebelumnya. Ia tersedia secara percuma untuk pengguna IOS dan Android. Cukup muat turun, lancarkan aplikasi dan imbas peranti Bluetooth yang berdekatan. Aplikasi ini akan menyenaraikan semua peranti BLE yang dijumpainya. Mine saya bernama HW-01 cukup lihat di bawah namanya dan anda akan menemui alamat perkakasan pelayan seperti yang ditunjukkan di bawah.
Jadi alamat perkakasan ESP32 BLE band kecergasan saya ialah C7: F0: 69: F0: 68: 81, anda akan mempunyai satu set nombor yang berbeza dalam format yang sama. Cukup perhatikan kerana kita akan memerlukan semasa memprogram ESP32 kita.
Mendapatkan UUID Perkhidmatan dan Ciri pelayan
Baiklah, sekarang kami telah mengenal pasti pelayan kami menggunakan alamat BLE tetapi untuk berkomunikasi dengannya, kami perlu menggunakan bahasa Perkhidmatan dan ciri-ciri, yang akan anda fahami sekiranya anda telah membaca tutorial sebelumnya. Dalam tutorial ini saya menggunakan ciri tulis pelayan saya (jalur kecergasan) untuk memasangkannya. Oleh itu, untuk memasangkan dengan peranti, kita memerlukan UUID Karakteristik iklan Perkhidmatan yang dapat kita dapatkan lagi dengan aplikasi yang sama.
Cukup klik pada butang sambung pada aplikasi anda dan cari beberapa ciri tulis, di mana aplikasi tersebut akan memaparkan perkhidmatan UUID dan UUID khas. Tambang ditunjukkan di bawah
Di sini UUID Perkhidmatan dan UUID Karakteristik saya sama, tetapi tidak semestinya sama. Catat UUID pelayan anda. Tambang saya dicatat sebagai
UUID Perkhidmatan: 0000fee7-0000-1000-8000-00805f9b34fb Ciri UUID: 0000fee7-0000-1000-8000-00805f9b34fb
Tidak wajib menggunakan ciri penulisan; anda boleh menggunakan UUID perkhidmatan dan ciri sah dari pelayan yang ditunjukkan dalam aplikasi.
Memprogram ESP32 untuk bertindak sebagai pelanggan untuk Proximity Switch Application
Idea program ini adalah menjadikan ESP32 bertindak sebagai pelanggan yang terus mengimbas peranti Bluetooth apabila mendapati pelayan kami (jalur kecergasan) ia mengesahkan ID perkakasan dan ia akan menukar cahaya melalui pin GPIO 13. Baiklah!, tetapi ada satu masalah dengan itu. Semua pelayan BLE mempunyai jarak 10 meter yang terlalu banyak. Oleh itu, jika kita berusaha untuk membuat suis jarak untuk menyalakan lampu buka pintu, julat ini sangat tinggi.
Untuk mengurangkan jangkauan pelayan BLE kita dapat menggunakan pilihan pasangan. Pelayan dan pelanggan BLE akan dipasangkan hanya jika kedua-duanya berada dalam jarak 3-4 Meter. Itu sesuai untuk aplikasi kami. Oleh itu, kami membuat ESP32 bukan sahaja untuk menemui pelayan BLE tetapi juga untuk menyambung ke sana dan memastikan ia tetap berpasangan. Selagi dipasangkan lampu AC akan tetap menyala, bila jarak melebihi pasangan akan hilang dan lampu akan dimatikan. Program contoh ESP32 BLE yang lengkap untuk melakukan perkara yang sama diberikan di akhir halaman ini. Di bawah ini, saya akan membahagikan kod tersebut menjadi potongan kecil dan cuba menerangkannya.
Setelah memasukkan fail tajuk, kami memberitahu ESP32 mengenai alamat BLE, Perkhidmatan dan UUID ciri yang kami perolehi melalui aplikasi sambungan nRF seperti yang dijelaskan dalam tajuk di atas. Kodnya seperti di bawah
perkhidmatan BLEUUID statikUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // UUID perkhidmatan jalur kecergasan yang diperoleh melalui aplikasi sambungan NRF menghubungkan BUUUID statik charUUID ("0000fee7-0000-1000-8000-00805f9b34fb"); // UUID ciri jalur kecergasan yang diperoleh melalui aplikasi sambungan nRF String My_BLE_Address = "c7: f0: 69: f0: 68: 81"; // Hardware Bluetooth MAC dari jalur kecergasan saya , akan berbeza untuk setiap jalur yang diperoleh melalui aplikasi sambungan nRF
Diikuti dengan program ini, kita mempunyai connectToserver dan MyAdvertisedDeviceCallback yang akan kita kembali kemudian. Kemudian di dalam fungsi persediaan , kami menginisialisasi monitor bersiri dan membuat BLE pada ESP untuk mengimbas peranti. Setelah imbasan selesai untuk setiap peranti BLE ditemui fungsi MyAdvertisedDeviceCallbacks dipanggil.
Kami juga mengaktifkan imbasan aktif kerana kami menghidupkan ESP32 dengan kuasa utama, untuk aplikasi bateri ia dimatikan untuk mengurangkan penggunaan semasa. Pin pemicu Relay disambungkan ke GPIO 13 dalam perkakasan kami, jadi kami juga menyatakan bahawa pin GPIO 13 sebagai output.
persediaan tidak sah () { Serial.begin (115200); // Mulakan monitor bersiri Serial.println ("Program Server ESP32 BLE"); // Mesej pengenalan BLEDevice:: init (""); pBLEScan = BLEDevice:: getScan (); // buat imbasan baru pBLEScan-> setAdvertisedDeviceCallbacks (MyAdvertisedDeviceCallbacks baru ()); // Panggil kelas yang ditentukan di atas pBLEScan-> setActiveScan (true); // imbasan aktif menggunakan lebih banyak kuasa, tetapi hasilnya lebih cepat pinMode (13, OUTPUT); // Nyatakan pin LED bawaan sebagai output }
Di dalam fungsi MyAdvertisedDeviceCallbacks , kami mencetak baris yang akan menyenaraikan nama dan maklumat lain dari peranti BLE yang ditemui. Kami memerlukan ID perkakasan peranti BLE yang ditemui supaya kami dapat membandingkannya dengan yang diinginkan. Oleh itu, kami menggunakan pemboleh ubah Server_BLE_Address untuk mendapatkan alamat peranti dan kemudian juga untuk menukarnya dari jenis BLEAddress ke rentetan.
kelas MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult (BLEAdvertisedDevice advertisedDevice) { Serial.printf ("Hasil Imbasan:% s \ n", advertisedDevice.toString (). c_str ()); Pelayan_BLE_Address = BLEAddress baru (advertisedDevice.getAddress ()); Scaned_BLE_Address = Server_BLE_Address-> toString (). C_str (); } };
Di dalam fungsi gelung , kami mengimbas selama 3 saat dan memasukkan hasilnya ke dalam foundDevices yang merupakan objek dari BLEScanResults. Sekiranya kita menjumpai satu atau lebih dari satu peranti dengan mengimbas, kita mula memeriksa apakah alamat BLE yang ditemui sesuai dengan yang kita masukkan dalam program ini. Sekiranya kecocokan itu positif dan peranti tidak dipasangkan lebih awal, kami cuba menandinginya menggunakan fungsi connectToserver. Kami juga telah menggunakan beberapa penyataan Bersiri untuk tujuan pemahaman.
while (foundDevices.getCount ()> = 1) { if (Scaned_BLE_Address == My_BLE_Address && paired == false) { Serial.println ("Found Device: -)… menyambung ke Pelayan sebagai pelanggan"); jika (connectToserver (* Server_BLE_Address)) {
Di dalam fungsi connectToserver kita menggunakan UUID untuk berpasangan dengan pelayan BLE (jalur kecergasan). Untuk berhubung dengan pelayan, ESP32 harus bertindak sebagai klien, jadi kami membuat klien dengan menggunakan fungsi createClient () dan kemudian menyambung ke alamat pelayan BLE. Kemudian kami mencari perkhidmatan dan ciri menggunakan nilai UUID dan cuba menghubungkannya. Apabila sambungan berjaya, fungsi mengembalikan yang benar dan jika tidak, ia mengembalikan yang salah. Perhatikan bahawa UUID perkhidmatan dan ciri tidak wajib dipasangkan dengan pelayan, ia hanya dibuat untuk pemahaman anda.
bool connectToserver (BLEAddress pAddress) { BLEClient * pClient = BLEDevice:: createClient (); Serial.println ("- Pelanggan yang dibuat"); // Sambungkan ke Pelayan BLE. pClient-> sambung (pAddress); Serial.println ("- Disambungkan ke jalur kecergasan"); // Dapatkan rujukan ke perkhidmatan yang kami cari di pelayan BLE jauh. BLERemoteService * pRemoteService = pClient-> getService (serviceUUID); if (pRemoteService! = nullptr) { Serial.println ("- Menemui perkhidmatan kami"); kembali benar; } lain kembali palsu; // Dapatkan rujukan mengenai ciri dalam perkhidmatan pelayan BLE yang jauh. pRemoteCharacteristic = pRemoteService->getCharacteristic (charUUID); if (pRemoteCharacteristic! = nullptr) Serial.println ("- Temui ciri kami"); kembali benar; }
Sekiranya sambungan berjaya, pin GPIO 13 dibuat tinggi dan kawalan dihantar di luar gelung dengan menggunakan pernyataan putus. Pemboleh ubah Boolean berpasangan juga ditetapkan sebagai benar.
if (connectToserver (* Server_BLE_Address)) { berpasangan = benar; Serial.println ("******************** LED dihidupkan ********************** ** "); digitalWrite (13, TINGGI); rehat; }
Setelah pasangan berjaya dan pin GPIO dihidupkan, kita harus memeriksa apakah peranti masih dalam jangkauan. Oleh kerana sekarang peranti dipasangkan, perkhidmatan imbasan BLE tidak lagi dapat melihatnya. Kami akan menemuinya hanya apabila pengguna meninggalkan kawasan tersebut. Oleh itu, kita hanya perlu mencari pelayan BLE dan jika kita mengetahui bahawa kita harus menetapkan pin GPIO ke rendah seperti yang ditunjukkan di bawah
if (Scaned_BLE_Address == My_BLE_Address && paired == true) { Bersiri. println ("Peranti kami berada di luar jangkauan"); berpasangan = palsu; Bersiri. println ("******************** LED OOOFFFFF ************************"); digitalWrite (13, RENDAH); ESP.mulakan semula (); rehat; }
Bekerja dan Menguji
Setelah anda bersedia dengan program dan perkakasan, cukup muat naik kod ke ESP32 dan susun keseluruhan penyediaan seperti ditunjukkan di bawah.
Anda harus melihat Lampu menyala sebaik sahaja jalur kecergasan (pelayan) berpasangan dengan ESP32. Anda juga boleh memeriksa ini dengan melihat simbol Bluetooth sambungan pada jalur kecergasan. Setelah dipasangkan, cubalah berjalan jauh dari ESP32 dan apabila anda melintasi 3-4 meter anda akan melihat bahawa simbol Bluetooth pada jam tangan hilang dan sambungan terputus. Sekarang, jika anda melihat lampu akan dimatikan. Apabila anda berjalan kembali, peranti akan dipasangkan semula dan lampu menyala. Penyelesaian projek yang lengkap dapat dilihat dalam video di bawah.
Semoga anda menikmati projek ini dan mempelajari sesuatu yang baru dalam perjalanan. Sekiranya anda menghadapi masalah untuk membuatnya berfungsi, silakan hantar masalah tersebut di forum atau bahkan di bahagian komen di bawah