- Gerekli Bileşenler
- ESP32 iBeacon için nRF Connect Android Uygulamasını Kullanma
- ESP32'yi BLE iBeacon olarak çalışacak şekilde programlama
ESP32, Bluetooth ve WiFi için dahili desteğe sahip gerçekten güçlü bir IoT cihazıdır. ESP32, RAM, ROM, GPIO Pinleri vb. Gibi ekstra özelliklere sahip selefi ESP8266'nın gelişmiş sürümüdür. ESP32 modülü hem klasik Bluetooth hem de Bluetooth Düşük Enerji'yi (BLE) destekler, klasik Bluetooth şarkıları veya dosyaları ve BLE'yi aktarmak için kullanılabilir. seçeneği, Bluetooth işaretçileri, fitness bantları, yakınlık vb. pil optimizasyonlu uygulamalar için kullanılabilir. Basit mikro denetleyici projeleri için HC-05 veya HC-06 modülleri gibi bir seri Bluetooth olarak ESP32 kullanmak da mümkündür.
Bildiğimiz gibi BLE iki farklı modda çalışabilir - Sunucu modu ve İstemci modu. Her iki mod da önceki ESP32 Öğreticilerimizde tartışılmıştır:
- ESP32 BLE Sunucusu - Pil Seviyesi Göstergesi için GATT Hizmeti
- ESP32 BLE Client - Bir Ampulü Tetiklemek için Fitness Bandına Bağlanma
Bu eğitimde, ESP32'nin bir sunucu olarak hareket edeceği ve akıllı telefonun bir istemci olarak hareket edeceği ESP32'yi kullanarak bir BLE iBeacon oluşturacağız. ESP32 eğitimine geri dönmüyorsa, ESP32 kartını Arduino IDE ile nasıl kullanacağınıza zaten aşina olduğunuzu varsayıyorum.
Ayrıca Raspberry Pi ve HM-10 BLE iBeacon kullanarak önceki Bluetooth iBeacon projelerimizden geçerek Beacon / iBeacon Teknolojisinin ne olduğu hakkında daha fazla bilgi edinebilirsiniz.
Gerekli Bileşenler
Donanım:
- ESP32 Geliştirme Kurulu
- Mikro USB Kablosu
Yazılım:
- Arduino IDE
- Android Uygulaması: nRF Connect for Mobile (Nordic Semiconductor tarafından)
Arduino ile HM-10 BLE Modülünü Nasıl Kullanırım? Projemizde kullandığımız bir çok BLE tarayıcı uygulaması var. Bu BLE tarayıcı uygulaması, iyi bir Grafik Arayüz (GUI) sağlar, ancak ek bilgilerden yoksundur, bu nedenle bu projede Mobil için NRF Connect uygulamasını kullanıyoruz.
ESP32 iBeacon için nRF Connect Android Uygulamasını Kullanma
1. nRF Connect uygulamasını Google Play Store'dan indirin ve Açın.
2. Ekran aşağıdaki gibi görünür. Bu proje için faydalı seçenekler, cihazlar bulunduğunda 'Tara', 'Tarayıcı' ve 'Bilgi' olacaktır.
Mevcut tüm iBeacon'ları görmek için 'Tara' seçeneği kullanılacaktır. İBeacon'u aramaya başlamak için ya ekranı aşağı çekin ya da Ekranın sağ üst köşesindeki 'Tara' seçeneğine gidin. Bu, mevcut iBeacon'ları aramaya başlayacaktır.
3. iBeacon'u aradıktan sonra, RSSI, UUID, Major ve Minor iBeacon'u görebileceksiniz. Cep telefonunu veya iBeacon'u birbirinden uzaklaştırırsanız RSSI değişecektir. İşte bu ekranda RSSI (-37) 'dir. Bunun dışında Sahte Şirket Adı, Cihaz Tipi, Bayt Uzunluğu, ESP32'nin Yerel Adı gibi bazı detaylar vardır. İşte " iBeacon olarak ESP32 ". Çizimdeki yerel adı değiştirebilirsiniz.
4. Akıllı telefonu iBeacon'dan çıkardıktan sonra, RSSI değeri -37'den -58'e değişir. Cihazlardan birini hareket ettirirseniz bu değerler değişmeye devam edecektir.
RSSI sinyali kabul edilebilir değerleri aşağıdaki gibidir:
Sinyal gücü | TL; DR | İçin gerekli olan | |
---|---|---|---|
-30 dBm | İnanılmaz | Ulaşılabilir maksimum sinyal gücü. İstemci bunu başarmak için AP'den yalnızca birkaç metre uzakta olabilir. Gerçek dünyada tipik veya arzu edilmez. | Yok |
-67 dBm | Çok iyi | Veri paketlerinin çok güvenilir ve zamanında teslim edilmesini gerektiren uygulamalar için minimum sinyal gücü. | VoIP / VoWiFi, video akışı |
-70 dBm | Tamam | Güvenilir paket teslimi için minimum sinyal gücü. | E-posta, web |
-80 dBm | İyi değil | Temel bağlantı için minimum sinyal gücü. Paket teslimi güvenilmez olabilir. | Yok |
-90 dBm | Kullanılamaz | Gürültü zeminine yaklaşıyor veya boğuluyor. Herhangi bir işlevsellik pek olası değildir. | Yok |
ESP32'yi BLE iBeacon olarak çalışacak şekilde programlama
ESP32 Kartını Arduino IDE'ye kurduğunuzda kullanabileceğiniz örnek ESP32 BLE iBeacon programı bulunmaktadır. Ancak bu öğreticide bu taslağı biraz düzenledik , örnek programın tam düzenlenmiş versiyonu bu eğitimin sonunda verilmiştir.
ESP32 BLE_iBeacon'un Örnek Programını açmak için aşağıdaki Adımları izleyin.
- Arduino IDE'yi açın ve "ESP32 Dev Module" öğesini seçin. (Bu kartı bulamazsanız, lütfen ESP32 Kartı Paketini kurup kurmadığınızı kontrol edin)
- Git Dosya > Örnekler > ESP32 BLE Arduino > BLE_iBeacon
- "BLE_iBeacon" Taslağını açın.
Şimdi bu eğitimde yapılan kodda küçük bir değişiklik var. ESP32 Adı da bu taslakta güncellenecektir. Bu nedenle, BLE Sunucusu ve iBeacon Oluşturmada kullanılacak gerekli Kitaplıkları dahil ederek başlayın.
#include "sys / time.h"
Bu, geçerli sistem saatini almak için bir zaman kitaplığıdır. Bu, tv_sec, gettimeofday () vb. Gibi işlevleri içerir . Daha fazla bilgi için, ' sys / time.h'nin resmi UNIX sürümünü ziyaret edebilirsiniz.
Daha sonra ESP32'yi BLE İstemcisi veya BLE Sunucusu gibi farklı yapılandırmalarda yapmak için kullanılan birçok işlevi içeren ESP32 BLE kitaplıkları dahil edilir.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
İBeacon kütüphane dahildir iBeacon olarak ESP32 ayarlar hangi. Bununla birlikte, ESP32 için derin uyku kitaplığı dahildir. Kitaplık, ESP32'yi belirli bir süre derin uyku modunda göndermek için kullanılacaktır.
#include "BLEBeacon.h" #include "esp_sleep.h"
ESP32 için uyku süresini tanımlayın. Burada ESP32 10 saniye derin uykuda olacak ve reklamını yapacak ve sonra tekrar 10 saniye derin uykuya geçecek.
#define GPIO_DEEP_SLEEP_DURATION 10
Burada RTC_DATA_ATTR tanımlanır. RTC_DATA_ATTR özniteliğine sahip bir global değişken tanımlarsanız, değişkenin RTC_SLOW_MEM belleğine yerleştirileceğini unutmayın. Yani RTC_DATA_ATTR olarak tanımlanan yapı ve dinamik hafızayı derin bir uyku öncesi bu yapıya kopyalamak, uyandıktan sonra dinamik hafızaya geri kazanılmasına yardımcı olur. Basit bir deyişle, derin bir uykudan sonra onu tekrar kurtarmak için dinamik bellekten statik bellekteki zamandan tasarruf ediyoruz. Burada iki değişken tanımlanmıştır. ' Son ', ESP32 derin uykuya geçtiğinde ve önyükleme sayımı kullanıldığında, sıfırlama sayısını en son ne zaman almak için kullanılır.
RTC_DATA_ATTR statik süre_t son; RTC_DATA_ATTR statik uint32_t önyükleme sayısı;
Ardından BLE Reklam Türünü tanımlayın. Tanım şu şekilde yapılır.
BLEReklam * pReklamcılık;
Timeval şimdiki zaman erişmek için bir yapı olarak tanımlanmaktadır.
struct timeval şimdi;
Ayrıca UUID tanımlanmıştır. UUID'ler bu bağlantıdan oluşturulabilir .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Şimdi UUID, Major, Minor, Etc gibi iBeacon özniteliklerini içerecek bir işlev oluşturun. Bu işlevde, iBeacon olarak BLE için bir örnek oluşturun ve ESP32 için iBeacon olarak sahte bir üretici kimliği, UUID, major ve minor ayarlayın.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((bootcount & 0xFFFF0000) >> 16); oBeacon.setMinor (bootcount & 0xFFFF);
Tarayıcıda BrEdrNotSupported çıktı vermesi için bayrağı 0x04 olarak ayarlayın.
oData.setFlags (0x04);
Yayınlama için reklam verilerini ayarlayın.
std:: string strServiceData = "";
Reklam vermek için dizeyi art arda ekleyin.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // strServiceData + = oBeacon.getData () yazın; oData.addData (strServiceData);
Verileri yayınlayarak reklamcılığa başlayın.
pReklam-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Seri monitöre 115200 baud hızında başlayın ve zamanı öğrenin. Ayrıca Sıfırlama sayısını saklamak için önyükleme sayısını artırın .
Serial.begin (115200); gettimeofday (& şimdi, NULL); Serial.printf ("ESP32% d \ n'yi başlat, bootcount ++);
Geçerli saati statik bellekte saklayın.
last = now.tv_sec;
Bir BLE cihazı oluşturun ve istediğiniz gibi adlandırın. Burada ESP32, " iBeacon olarak ESP2 " olarak adlandırılır . İsimlerin uzun olabileceğini unutmayın, ancak bu kod sürümü uzun isimler için desteği başlattı.
BLEDevice:: init ("iBeacon olarak ESP32");
Reklam vermek ve başlamak için BLE sunucusu oluşturun.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Ardından ESP32'yi iBeacon moduna ayarlayın.
setBeacon ();
Reklam vermeye başlayın, ardından reklamları durdurun ve 10 saniye derin uykuya dalın.
pReklam-> başlangıç (); pReklam-> durdur (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Son olarak ESP32 Geliştirme Kartını bir Mikro USB kablosu kullanarak Dizüstü Bilgisayarınıza takın ve kodu Arduino IDE kullanarak ESP32'ye yükleyin. Ardından akıllı telefonunuzdaki nRF Connect Android Uygulamasını açın ve taramaya başlayın. ESP32'yi aşağıdaki resimde gösterildiği gibi iBeacon yayını olarak bulacaksınız:
Bu nasıl ESP32 BLE Beacon olarak kullanılabilir UUID, majör ve minör reklamını yapmak. İBeacon hakkında daha fazla bilgi edinmek istiyorsanız, iBeacon olarak HM10 ile ilgili önceki eğitimimizi takip edin. Ayrıca herhangi bir şüpheniz varsa, aşağıya yorum yapın veya forumlarda soru sorun.
Çalışan bir video ile eksiksiz kod aşağıda verilmiştir.
/>