- Komponen Diperlukan
- Menggunakan Aplikasi Android nRF Connect untuk ESP32 iBeacon
- Pengaturcaraan ESP32 berfungsi sebagai BLE iBeacon
ESP32 benar-benar merupakan peranti IoT yang kuat yang mempunyai sokongan dalaman untuk Bluetooth dan WiFi. ESP32 adalah versi lanjutan dari pendahulunya ESP8266 dengan ciri tambahan seperti RAM, ROM, Pin GPIO dan lain-lain. Modul ESP32 menyokong kedua-dua Bluetooth klasik dan Bluetooth Tenaga Rendah (BLE), Bluetooth klasik boleh digunakan untuk memindahkan lagu atau fail dan BLE pilihan boleh digunakan untuk aplikasi yang dioptimumkan bateri seperti suar Bluetooth, jalur kecergasan, jarak dekat dan lain-lain. Juga boleh menggunakan ESP32 sebagai Bluetooth bersiri seperti modul HC-05 atau HC-06 untuk projek mikrokontroler sederhana.
Seperti yang kita ketahui, BLE boleh beroperasi dalam dua mod yang berbeza - mod Pelayan dan mod Pelanggan. Kedua-dua mod telah dibincangkan dalam Tutorial ESP32 kami sebelumnya:
- Pelayan ESP32 BLE - Perkhidmatan GATT untuk Petunjuk Tahap Bateri
- Pelanggan ESP32 BLE - Menyambung ke Jalur Kecergasan untuk Mencetuskan Mentol
Dalam tutorial ini kita akan membina BLE iBeacon menggunakan ESP32 di mana ESP32 akan bertindak sebagai pelayan dan telefon pintar akan bertindak sebagai pelanggan. Saya menganggap bahawa anda sudah mengetahui cara menggunakan papan ESP32 dengan Arduino IDE, jika tidak kembali ke tutorial ESP32.
Anda juga boleh mengetahui lebih lanjut mengenai apa itu Teknologi Beacon / iBeacon dengan melalui projek Bluetooth iBeacon kami sebelumnya menggunakan Raspberry Pi dan HM-10 BLE iBeacon.
Komponen Diperlukan
Perkakasan:
- Lembaga Pembangunan ESP32
- Kabel USB Mikro
Perisian:
- Arduino IDE
- Aplikasi Android: nRF Connect untuk Mudah Alih (Oleh Semikonduktor Nordik)
Terdapat banyak aplikasi pengimbas BLE, salah satunya telah kami gunakan dalam projek sebelumnya Cara Menggunakan Modul HM-10 BLE dengan Arduino. Aplikasi pengimbas BLE ini menyediakan Antaramuka Grafik (GUI) yang baik tetapi kekurangan maklumat tambahan sehingga dalam projek ini kami menggunakan aplikasi NRF Connect for Mobile.
Menggunakan Aplikasi Android nRF Connect untuk ESP32 iBeacon
1. Muat turun aplikasi nRF Connect dari Google Play Store dan Buka.
2. Skrin kelihatan seperti di bawah. Pilihan berguna untuk projek ini adalah 'Scan', 'Scanner' dan 'Info' apabila peranti dijumpai.
Pilihan 'Scan' akan digunakan untuk melihat semua iBeacons yang ada. Untuk mula mencari iBeacon, tarik ke bawah skrin atau pergi ke pilihan 'Scan' di sudut kanan atas Skrin. Ini akan mula mencari iBeacons yang tersedia.
3. Setelah mencari iBeacon, anda akan dapat melihat RSSI, UUID, Major dan Minor iBeacon. RSSI akan berubah jika anda mengambil telefon bimbit atau iBeacon dari satu sama lain. Di skrin ini, RSSI adalah (-37). Selain daripada ini terdapat beberapa perincian seperti Nama Syarikat Dummy, Jenis Peranti, Panjang Byte, Nama Tempatan ESP32. Inilah " ESP32 sebagai iBeacon ". Anda boleh menukar nama tempatan dalam lakaran.
4. Setelah mengambil telefon pintar dari iBeacon, nilai RSSI berubah dari -37 hingga -58. Nilai-nilai ini akan terus berubah jika anda memindahkan salah satu peranti.
Nilai yang boleh diterima isyarat RSSI adalah seperti berikut:
Kekuatan isyarat | TL; DR | Diperlukan untuk | |
---|---|---|---|
-30 dBm | Hebat | Kekuatan isyarat maksimum yang boleh dicapai. Pelanggan hanya beberapa meter dari AP untuk mencapainya. Tidak tipikal atau wajar di dunia nyata. | N / A |
-67 dBm | Sangat bagus | Kekuatan isyarat minimum untuk aplikasi yang memerlukan penghantaran paket data yang sangat dipercayai dan tepat pada masanya. | VoIP / VoWiFi, streaming video |
-70 dBm | baik | Kekuatan isyarat minimum untuk penghantaran paket yang boleh dipercayai. | E-mel, laman web |
-80 dBm | Tidak baik | Kekuatan isyarat minimum untuk penyambungan asas. Penghantaran paket mungkin tidak boleh dipercayai. | N / A |
-90 dBm | Tidak boleh digunakan | Mendekati atau lemas di tingkat kebisingan. Sebarang fungsi sangat tidak mungkin. | N / A |
Pengaturcaraan ESP32 berfungsi sebagai BLE iBeacon
Terdapat contoh program ESP32 BLE iBeacon yang tersedia semasa anda memasang Papan ESP32 di Arduino IDE. Tetapi kami sedikit mengedit sketsa ini dalam tutorial ini, versi contoh program yang diedit lengkap diberikan pada akhir tutorial ini.
Untuk membuka Contoh Program ESP32 BLE_iBeacon ikuti Langkah-langkah di bawah ini.
- Buka Arduino IDE dan Pilih "ESP32 Dev Module". (Sekiranya anda tidak menemui papan ini, sila periksa sama ada anda telah memasang Pakej Papan ESP32)
- Pergi ke Fail > Contoh > ESP32 BLE Arduino > BLE_iBeacon
- Buka Lakaran "BLE_iBeacon".
Sekarang terdapat sedikit pengubahsuaian dalam kod yang dilakukan dalam tutorial ini. Nama ESP32 juga akan dikemas kini dalam lakaran ini. Jadi mulakan dengan memasukkan Perpustakaan yang diperlukan yang akan digunakan dalam Membuat BLE Server dan iBeacon.
#sertakan "sys / time.h"
Ini adalah perpustakaan masa untuk mendapatkan masa sistem semasa. Ini mengandungi fungsi seperti tv_sec, gettimeofday () dll. Untuk maklumat lebih lanjut, anda boleh mengunjungi siaran rasmi UNIX ' sys / time.h'.
Kemudian perpustakaan ESP32 BLE disertakan yang mengandungi banyak fungsi yang digunakan untuk membuat ESP32 dalam konfigurasi yang berbeza seperti BLE Client atau BLE Server.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
The perpustakaan iBeacon termasuk yang menetapkan ESP32 sebagai iBeacon. Bersama ini, perpustakaan tidur nyenyak disertakan untuk ESP32. Perpustakaan akan digunakan untuk mengirim ESP32 dalam mod tidur dalam untuk jangka waktu yang ditentukan.
#sertakan "BLEBeacon.h" #masuk "esp_sleep.h"
Tentukan tempoh tidur untuk ESP32. Di sini ESP32 akan tidur nyenyak selama 10 saat dan ia akan mengiklankan dan sekali lagi tidur nyenyak selama 10 saat.
#tentukan GPIO_DEEP_SLEEP_DURATION 10
Di sini RTC_DATA_ATTR ditakrifkan. Perhatikan bahawa jika anda menentukan pemboleh ubah global dengan atribut RTC_DATA_ATTR, pemboleh ubah tersebut akan dimasukkan ke dalam memori RTC_SLOW_MEM. Oleh itu, struktur dinyatakan sebagai RTC_DATA_ATTR dan menyalin memori dinamik ke struktur ini sebelum tidur nyenyak membantu memulihkannya menjadi memori dinamik setelah bangun. Dengan kata mudah kami menjimatkan masa dalam memori statik dari memori dinamik untuk memulihkannya semula setelah tidur nyenyak. Di sini dua pemboleh ubah ditakrifkan. The ' terakhir ' digunakan untuk mendapatkan kali terakhir ketika ESP32 tidur nyenyak dan bootcount digunakan bilangan kiraan semula.
RTC_DATA_ATTR masa statik_t terakhir; RTC_DATA_ATTR static uint32_t bootcount;
Kemudian tentukan Jenis Iklan BLE. Definisi dilakukan seperti berikut.
BLEAdvertising * pAdvertising;
Jangka masa ditakrifkan sebagai struktur untuk mengakses waktu semasa.
jangka masa struktur sekarang;
UUID juga ditakrifkan. UUID boleh dihasilkan dari pautan ini .
#tentukan BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Sekarang buat fungsi yang akan mengandungi atribut iBeacon seperti UUID, Major, Minor, dll. Dalam fungsi ini buat instance untuk BLE sebagai iBeacon, dan tetapkan ID pengeluar palsu, UUID, utama dan kecil untuk ESP32 sebagai iBeacon.
batal setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((bootcount & 0xFFFF0000) >> 16); oBeacon.setMinor (bootcount & 0xFFFF);
Tetapkan bendera sebagai 0x04 sehingga akan mengeluarkan BrEdrNotSupported dalam pengimbas.
oData.setFlags (0x04);
Tetapkan data iklan untuk penerbitan.
std:: string strServiceData = "";
Tambahkan rentetan satu demi satu untuk diiklankan.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Taip strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Mulakan pengiklanan dengan menerbitkan data.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Mulakan monitor bersiri pada kadar baud 115200 dan dapatkan masa. Tambah pula jumlah boot untuk menyimpan bilangan Reset .
Serial.begin (115200); gettimeofday (& sekarang, NULL); Serial.printf ("mulakan ESP32% d \ n", bootcount ++);
Simpan masa semasa dalam memori statik.
terakhir = sekarang.tv_sec;
Buat peranti BLE dan beri nama seperti yang anda mahukan. Di sini ESP32 dinamakan sebagai " ESP2 sebagai iBeacon ". Perhatikan bahawa, nama boleh panjang tetapi versi kod ini telah memulakan sokongan untuk nama panjang.
BLEDevice:: init ("ESP32 sebagai iBeacon");
Buat pelayan BLE untuk mengiklankan dan memulakan.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Kemudian tetapkan ESP32 dalam mod iBeacon.
setBeacon ();
Mulakan iklan kemudian hentikan iklan dan tidur nyenyak selama 10 saat.
pAdvertising-> mula (); pAdvertising-> berhenti (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Akhirnya Pasangkan Papan Pembangunan ESP32 dengan Laptop anda menggunakan kabel Micro USB dan muat naik kodnya ke ESP32 menggunakan Arduino IDE. Kemudian buka Aplikasi Android nRF Connect di telefon pintar anda dan mulakan pengimbasan. Anda akan mendapat ESP32 sebagai siaran iBeacon seperti yang ditunjukkan dalam gambar di bawah:
Ini adalah bagaimana ESP32 dapat digunakan sebagai BLE Beacon untuk mengiklankan UUID, Major dan Minor. Sekiranya anda ingin mengetahui lebih lanjut mengenai iBeacon, ikuti tutorial kami sebelumnya mengenai HM10 sebagai iBeacon. Sekiranya anda mempunyai keraguan, maka komen di bawah atau ajukan soalan di forum.
Kod Lengkap dengan video berfungsi diberikan di bawah.
/>