- Komponen Diperlukan
- Menggunakan Aplikasi Android nRF Connect untuk ESP32 iBeacon
- Pemrograman ESP32 untuk bekerja sebagai BLE iBeacon
ESP32 benar-benar perangkat IoT yang kuat yang memiliki dukungan bawaan untuk Bluetooth dan WiFi. ESP32 adalah versi lanjutan dari pendahulunya ESP8266 dengan fitur tambahan seperti RAM, ROM, GPIO Pin dll. Modul ESP32 mendukung Bluetooth klasik dan Bluetooth Hemat Energi (BLE), Bluetooth klasik dapat digunakan untuk mentransfer lagu atau file dan BLE opsi dapat digunakan untuk aplikasi yang dioptimalkan dengan baterai seperti suar Bluetooth, pita kebugaran, proximity s, dll. Dimungkinkan juga untuk menggunakan ESP32 sebagai Bluetooth serial seperti modul HC-05 atau HC-06 untuk proyek mikrokontroler sederhana.
Seperti yang kita ketahui, BLE dapat beroperasi dalam dua mode berbeda - mode Server dan mode Klien. Kedua mode telah dibahas dalam Tutorial ESP32 kami sebelumnya:
- Server ESP32 BLE - Layanan GATT untuk Indikasi Level Baterai
- ESP32 BLE Client - Menghubungkan ke Band Kebugaran untuk Memicu Bulb
Dalam tutorial ini kita akan membangun iBeacon BLE menggunakan ESP32 di mana ESP32 akan bertindak sebagai server dan smartphone akan bertindak sebagai klien. Saya berasumsi bahwa Anda sudah terbiasa tentang cara menggunakan papan ESP32 dengan Arduino IDE, jika tidak kembali ke tutorial memulai ESP32.
Anda juga dapat mengetahui lebih banyak tentang apa itu Teknologi Beacon / iBeacon dengan melalui proyek Bluetooth iBeacon kami sebelumnya menggunakan Raspberry Pi dan HM-10 BLE iBeacon.
Komponen Diperlukan
Perangkat keras:
- Papan Pengembangan ESP32
- Kabel Mikro USB
Perangkat lunak:
- IDE Arduino
- Aplikasi Android: nRF Connect for Mobile (Oleh Nordic Semiconductor)
Ada banyak aplikasi pemindai BLE, salah satunya telah kami gunakan di proyek kami sebelumnya yaitu Cara Menggunakan Modul HM-10 BLE dengan Arduino. Aplikasi pemindai BLE ini menyediakan Antarmuka Grafis (GUI) yang baik tetapi kurang informasi tambahan sehingga dalam proyek ini kami menggunakan aplikasi NRF Connect untuk Seluler.
Menggunakan Aplikasi Android nRF Connect untuk ESP32 iBeacon
1. Unduh aplikasi nRF Connect dari Google Play Store dan Buka.
2. Layarnya terlihat seperti di bawah ini. Opsi yang berguna untuk proyek ini adalah 'Scan', 'Scanner' dan 'Info' ketika perangkat ditemukan.
Opsi 'Pindai' akan digunakan untuk melihat semua iBeacons yang tersedia. Untuk mulai mencari iBeacon, tarik layar ke bawah atau buka opsi 'Pindai' di sudut kanan atas Layar. Ini akan mulai mencari iBeacons yang tersedia.
3. Setelah mencari iBeacon, Anda akan dapat melihat RSSI, UUID, Major dan Minor iBeacon. RSSI akan berubah jika Anda menjauhkan ponsel atau iBeacon dari satu sama lain. Di sini, di layar ini, RSSI adalah (-37). Selain ini ada beberapa detail seperti Dummy Company Name, Device Type, Length of the Bytes, The Local Name of ESP32. Ini dia " ESP32 sebagai iBeacon ". Anda dapat mengubah nama lokal di sketsa.
4. Setelah melepas smartphone dari iBeacon, nilai RSSI berubah dari -37 menjadi -58. Nilai-nilai ini akan terus berubah jika Anda memindahkan salah satu perangkat.
Nilai sinyal RSSI yang dapat diterima adalah sebagai berikut:
Kekuatan sinyal | TL; DR | Dibutuhkan untuk | |
---|---|---|---|
-30 dBm | Luar biasa | Kekuatan sinyal yang dapat dicapai maks. Klien hanya berjarak beberapa meter dari AP untuk mencapai ini. Tidak khas atau diinginkan di dunia nyata. | T / A |
-67 dBm | Baik sekali | Kekuatan sinyal minimum untuk aplikasi yang membutuhkan pengiriman paket data yang sangat andal dan tepat waktu. | VoIP / VoWiFi, streaming video |
-70 dBm | baik | Kekuatan sinyal minimum untuk pengiriman paket yang andal. | Email, web |
-80 dBm | Tidak baik | Kekuatan sinyal minimum untuk konektivitas dasar. Pengiriman paket mungkin tidak dapat diandalkan. | T / A |
-90 dBm | Tidak dapat digunakan | Mendekati atau tenggelam di lantai kebisingan. Fungsi apa pun sangat tidak mungkin. | T / A |
Pemrograman ESP32 untuk bekerja sebagai BLE iBeacon
Ada contoh program ESP32 BLE iBeacon yang tersedia saat Anda menginstal Papan ESP32 di Arduino IDE. Tapi kami telah sedikit mengedit sketsa ini dalam tutorial ini, versi lengkap program contoh diberikan di akhir tutorial ini.
Untuk membuka Program Contoh ESP32 BLE_iBeacon cukup ikuti Langkah-langkah di bawah ini.
- Buka Arduino IDE dan Pilih "ESP32 Dev Module". (Jika Anda tidak menemukan papan ini, silakan periksa apakah Anda telah menginstal Paket Papan ESP32)
- Buka File > Contoh > ESP32 BLE Arduino > BLE_iBeacon
- Buka Sketch “BLE_iBeacon”.
Sekarang ada sedikit modifikasi pada kode yang dilakukan di tutorial ini. Nama ESP32 juga akan diperbarui dalam sketsa ini. Jadi mulailah dengan memasukkan Pustaka yang diperlukan yang akan digunakan dalam Membuat BLE Server dan iBeacon.
#include "sys / time.h"
Ini adalah pustaka waktu untuk mendapatkan waktu sistem saat ini. Ini berisi fungsi seperti tv_sec, gettimeofday () dll. Untuk informasi lebih lanjut, Anda dapat mengunjungi rilis resmi UNIX dari ' sys / time.h'.
Kemudian pustaka ESP32 BLE disertakan yang berisi banyak fungsi yang digunakan untuk membuat ESP32 dalam konfigurasi yang berbeda seperti BLE Client atau BLE Server.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
The perpustakaan iBeacon termasuk yang menetapkan ESP32 sebagai iBeacon. Bersamaan dengan ini, perpustakaan tidur nyenyak disertakan untuk ESP32. Pustaka akan digunakan untuk mengirim ESP32 dalam mode tidur nyenyak untuk jangka waktu tertentu.
#include "BLEBeacon.h" #include "esp_sleep.h"
Tentukan durasi tidur untuk ESP32. Di sini ESP32 akan tidur nyenyak selama 10 detik dan akan beriklan dan kemudian tidur nyenyak selama 10 detik.
#Tentukan GPIO_DEEP_SLEEP_DURATION 10
Di sini RTC_DATA_ATTR didefinisikan. Perhatikan bahwa jika Anda menentukan variabel global dengan atribut RTC_DATA_ATTR, variabel tersebut akan ditempatkan ke dalam memori RTC_SLOW_MEM. Jadi struktur dideklarasikan sebagai RTC_DATA_ATTR dan menyalin memori dinamis ke struktur ini sebelum tidur nyenyak membantu memulihkan ini ke dalam memori dinamis setelah bangun. Dengan kata sederhana kami menghemat waktu dalam memori statis dari memori dinamis untuk memulihkannya kembali setelah tidur nyenyak. Di sini kedua variabel tersebut didefinisikan. ' Terakhir ' digunakan untuk mendapatkan waktu terakhir saat ESP32 masuk ke mode tidur nyenyak dan jumlah boot digunakan menghitung jumlah setel ulang.
RTC_DATA_ATTR static time_t last; RTC_DATA_ATTR statis uint32_t bootcount;
Kemudian tentukan Jenis Iklan BLE. Definisi tersebut dilakukan sebagai berikut.
BLEAdvertising * pAdvertising;
The timeval didefinisikan sebagai struktur untuk mengakses waktu saat ini.
struct timeval sekarang;
UUID juga ditentukan. UUID dapat dibuat dari tautan ini .
#tentukan BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Sekarang buat fungsi yang akan berisi atribut iBeacon seperti UUID, Major, Minor, Dll. Dalam fungsi ini, buat instance untuk BLE sebagai iBeacon, dan setel ID pabrikan palsu, UUID, mayor dan minor untuk ESP32 sebagai iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((akun boot & 0xFFFF0000) >> 16); oBeacon.setMinor (akun boot & 0xFFFF);
Setel flag sebagai 0x04 sehingga ia akan menampilkan BrEdrNotSupported di pemindai.
oData.setFlags (0x04);
Atur data periklanan untuk penerbitan.
std:: string strServiceData = "";
Tambahkan string satu demi satu untuk beriklan.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Ketik strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Mulailah beriklan dengan menerbitkan data.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Mulailah monitor serial pada baud rate 115200 dan dapatkan waktu. Tingkatkan juga jumlah boot untuk menyimpan jumlah Reset.
Serial.begin (115200); gettimeofday (& now, NULL); Serial.printf ("mulai ESP32% d \ n", bootcount ++);
Simpan waktu saat ini di memori statis.
terakhir = sekarang.tv_sec;
Buat perangkat BLE dan beri nama sesuai keinginan Anda. Di sini ESP32 dinamai sebagai " ESP2 sebagai iBeacon ". Perhatikan bahwa, nama bisa panjang tetapi versi kode ini telah mulai mendukung nama yang panjang.
BLEDevice:: init ("ESP32 sebagai iBeacon");
Buat server BLE untuk beriklan dan memulai.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Kemudian atur ESP32 dalam mode iBeacon.
setBeacon ();
Mulai beriklan kemudian hentikan iklan dan tidur nyenyak selama 10 detik.
pAdvertising-> start (); pAdvertising-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Terakhir, Colokkan Papan Pengembangan ESP32 dengan Laptop Anda menggunakan kabel Micro USB dan unggah kode ke ESP32 menggunakan Arduino IDE. Kemudian buka Aplikasi Android nRF Connect di smartphone Anda dan mulai memindai. Anda akan menemukan ESP32 sebagai siaran iBeacon seperti yang ditunjukkan pada gambar di bawah ini:
Ini adalah bagaimana ESP32 dapat digunakan sebagai Beacon BLE untuk mengiklankan UUID, Major dan Minor. Jika Anda ingin tahu lebih banyak tentang iBeacon, ikuti tutorial kami sebelumnya tentang HM10 sebagai iBeacon. Juga jika Anda ragu, beri komentar di bawah atau ajukan pertanyaan di forum.
Kode Lengkap dengan video kerja diberikan di bawah ini.
/>