- Потрібні компоненти
- Використання програми nRF Connect Android для ESP32 iBeacon
- Програмування ESP32 на роботу як BLE iBeacon
ESP32 - це дійсно потужний пристрій IoT, що має вбудовану підтримку Bluetooth і WiFi. ESP32 є вдосконаленою версією свого попередника ESP8266 з додатковими функціями, такими як оперативна пам'ять, ПЗУ, шпильки GPIO тощо. Модуль ESP32 підтримує як класичний Bluetooth, так і Bluetooth з низьким енергоспоживанням (BLE), класичний Bluetooth можна використовувати для передачі пісень або файлів та BLE Ця опція може бути використана для додатків, оптимізованих для батареї, таких як маяки Bluetooth, фітнес-смужки, наближення тощо. Також можна використовувати ESP32 як послідовний Bluetooth, як модулі HC-05 або HC-06, для простих проектів мікроконтролера.
Як ми знаємо, BLE може працювати в двох різних режимах - режимі сервера та режимі клієнта. Обидва режими обговорювались у наших попередніх підручниках з ESP32:
- Сервер ESP32 BLE - Служба GATT для індикації рівня заряду батареї
- Клієнт ESP32 BLE - підключення до фітнес-смужки для спрацьовування лампочки
У цьому посібнику ми створимо BLE iBeacon за допомогою ESP32, де ESP32 буде виконувати функції сервера, а смартфон - як клієнта. Я припускаю, що ви вже знайомі з тим, як користуватися платою ESP32 з Arduino IDE, якщо не повернутися до початку роботи з підручником ESP32.
Ви також можете дізнатися більше про те, що таке технологія Beacon / iBeacon, пройшовши наші попередні проекти iBeacon з використанням Raspberry Pi та HM-10 BLE iBeacon.
Потрібні компоненти
Обладнання:
- Рада з розробки ESP32
- Кабель Micro USB
Програмне забезпечення:
- IDE Arduino
- Додаток для Android: nRF Connect для мобільних пристроїв (від Nordic Semiconductor)
Існує багато програм для сканування BLE, одну з них ми використовували в попередньому проекті «Як використовувати модуль HM-10 BLE з Arduino». Ця програма для сканування BLE забезпечує хороший графічний інтерфейс (GUI), але не має додаткової інформації, тому в цьому проекті ми використовуємо програму NRF Connect для мобільних пристроїв.
Використання програми nRF Connect Android для ESP32 iBeacon
1. Завантажте програму nRF Connect із магазину Google Play і відкрийте її.
2. Екран виглядає, як показано нижче. Корисними параметрами для цього проекту будуть "Сканування", "Сканер" та "Інформація", коли пристрій буде знайдено.
Параметр "Сканувати" буде використаний для перегляду всіх доступних iBeacons. Щоб розпочати пошук iBeacon, або витягніть екран вниз, або перейдіть до опції «Сканувати» у верхньому правому куті екрана. Це розпочне пошук доступних iBeacons.
3.Після пошуку iBeacon ви зможете побачити RSSI, UUID, Major та Minor iBeacon. RSSI зміниться, якщо ви відберете мобільний телефон або iBeacon одне від одного. Тут, на цьому екрані, RSSI (-37). Крім цього, є деякі деталі, такі як фіктивна назва компанії, тип пристрою, довжина байтів, локальна назва ESP32. Тут це “ ESP32 як iBeacon ”. Ви можете змінити місцеву назву на ескізі.
4. Після вилучення смартфона з iBeacon значення RSSI змінюється з -37 на -58. Ці значення будуть постійно змінюватися, якщо ви перемістите один із пристроїв.
Прийнятні значення сигналу RSSI такі:
Сила сигналу | TL; DR | Потрібно для | |
---|---|---|---|
-30 дБм | Дивовижний | Максимально досяжна потужність сигналу. Клієнт може бути лише за кілька метрів від точки доступу, щоб досягти цього. Не типово чи бажано в реальному світі. | Не застосовується |
-67 дБм | Дуже добре | Мінімальна потужність сигналу для програм, які вимагають дуже надійної, своєчасної доставки пакетів даних. | VoIP / VoWiFi, потокове відео |
-70 дБм | добре | Мінімальна потужність сигналу для надійної доставки пакетів. | Електронна пошта, Інтернет |
-80 дБм | Не добре | Мінімальна потужність сигналу для базового підключення. Доставка пакетів може бути ненадійною. | Не застосовується |
-90 дБм | Непридатний для використання | Наближається або тоне в шумовій підлозі. Будь-яка функціональність дуже малоймовірна. | Не застосовується |
Програмування ESP32 на роботу як BLE iBeacon
Існує зразок програми ESP32 BLE iBeacon, доступний під час встановлення плати ESP32 в Arduino IDE. Але ми трохи відредагували цей ескіз у цьому навчальному посібнику. Повна відредагована версія зразка програми наведена в кінці цього посібника.
Щоб відкрити зразкову програму ESP32 BLE_iBeacon, просто виконайте кроки нижче.
- Відкрийте Arduino IDE і виберіть “ESP32 Dev Module”. (Якщо ви не знайдете цю плату, перевірте, чи встановлено пакет плати ESP32)
- Перейдіть у меню Файл > Приклади > ESP32 BLE Arduino > BLE_iBeacon
- Відкрийте ескіз “BLE_iBeacon”.
Зараз є невелика модифікація коду, яка зроблена в цьому посібнику. Назва ESP32 також буде оновлено в цьому ескізі. Тож почніть із включення необхідних бібліотек, які будуть використовуватися при створенні BLE Server та iBeacon.
#include "sys / time.h"
Це бібліотека часу для отримання поточного системного часу. Він містить такі функції, як tv_sec, gettimeofday () тощо. Щоб отримати додаткову інформацію, ви можете відвідати офіційний випуск UNIX " sys / time.h".
Потім включаються бібліотеки ESP32 BLE, які містять багато функцій, що використовуються для створення ESP32 у різних конфігураціях, таких як BLE Client або BLE Server.
#include "BLEDevice.h" #include "BLEUtils.h" #include "BLEServer.h"
Бібліотека IBeacon включена, який встановлює ESP32 як IBeacon. Поряд з цим для ESP32 включена бібліотека глибокого сну. Бібліотека буде використовуватися для надсилання ESP32 у режим глибокого сну протягом певного періоду часу.
#include "BLEBeacon.h" #include "esp_sleep.h"
Визначте тривалість сну для ESP32. Тут ESP32 буде знаходитись у глибокому сні протягом 10 секунд, він буде рекламувати, а потім знову перейде в глибокий сон на 10 секунд.
#define GPIO_DEEP_SLEEP_DURATION 10
Тут визначено RTC_DATA_ATTR. Зверніть увагу, що якщо ви визначите глобальну змінну з атрибутом RTC_DATA_ATTR, змінна буде поміщена в пам'ять RTC_SLOW_MEM. Отже, структура, оголошена як RTC_DATA_ATTR, і копіювання динамічної пам'яті в цю структуру перед глибоким сном допомагає відновити її в динамічну пам'ять після пробудження. Простими словами, ми економимо час у статичній пам’яті з динамічної, щоб відновити його знову після глибокого сну. Тут визначено дві змінні. " Останній " використовується, щоб отримати останній раз, коли ESP32 перейшов у глибокий режим сну, а кількість завантажень використовується підрахувати кількість скидів.
RTC_DATA_ATTR статичний time_t останній; RTC_DATA_ATTR статична кількість завантажень uint32_t;
Потім визначте тип реклами BLE. Визначення виконується наступним чином.
BLEAdvertising * pРеклама;
Формат: перший формат визначений як структура для доступу до поточного часу.
struct timeval зараз;
Також визначається UUID. UUID-адреси можна створити за цим посиланням .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Тепер створіть функцію, яка буде містити такі атрибути iBeacon, як UUID, Major, Minor тощо. У цій функції створіть екземпляр для BLE як iBeacon та встановіть підроблений ідентифікатор виробника, UUID, мажор і мінор для ESP32 як iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((кількість завантажень & 0xFFFF0000) >> 16); oBeacon.setMinor (кількість завантажень & 0xFFFF);
Встановіть прапор як 0x04 так, щоб він виводив BrEdrNotSupported в сканер.
oData.setFlags (0x04);
Встановити рекламні дані для публікації.
std:: string strServiceData = "";
Додайте рядок один за одним для реклами.
strServiceData + = (char) 26; // Len strServiceData + = (char) 0xFF; // Введіть strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Почніть рекламу, публікуючи дані.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Почніть серійний монітор зі швидкістю 115200 бод і отримайте час. Також збільште кількість завантажень, щоб зберегти кількість скидів .
Serial.begin (115200); gettimeofday (& зараз, NULL); Serial.printf ("запустити ESP32% d \ n", кількість завантажень ++);
Збережіть поточний час у статичній пам’яті.
останній = зараз.tv_sec;
Створіть пристрій BLE і назвіть його як завгодно. Тут ESP32 називається “ ESP2 як iBeacon ”. Зауважте, що імена можуть бути довгими, але ця версія коду розпочала підтримку довгих імен.
BLEDevice:: init ("ESP32 як iBeacon");
Створіть BLE-сервер для реклами та запуску.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Потім встановіть ESP32 в режим iBeacon.
setBeacon ();
Почніть рекламу, потім припиніть рекламу і перейдіть на глибокий сон на 10 секунд.
pРеклама-> start (); pРеклама-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Нарешті, підключіть плату розробки ESP32 до свого ноутбука за допомогою кабелю Micro USB і завантажте код у ESP32 за допомогою Arduino IDE. Потім відкрийте на смартфоні програму nRF Connect Android і починайте сканування. Ви знайдете ESP32 як трансляцію iBeacon, як показано на малюнку нижче:
Ось як ESP32 можна використовувати як маяк BLE для реклами UUID, Major і Minor. Якщо ви хочете дізнатись більше про iBeacon, дотримуйтесь нашого попереднього підручника з HM10 як iBeacon. Також якщо у вас є якісь сумніви, коментуйте нижче або задавайте питання на форумах.
Повний код із робочим відео наведено нижче.
/>