- Необходимые компоненты
- Использование приложения nRF Connect Android для ESP32 iBeacon
- Программирование ESP32 для работы как BLE iBeacon
ESP32 - действительно мощное IoT-устройство со встроенной поддержкой Bluetooth и WiFi. ESP32 - это усовершенствованная версия своего предшественника ESP8266 с дополнительными функциями, такими как RAM, ROM, контакты GPIO и т. Д. Модуль ESP32 поддерживает как классический Bluetooth, так и Bluetooth Low Energy (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, просмотрев наши предыдущие проекты Bluetooth 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 for Mobile.
Использование приложения nRF Connect Android для ESP32 iBeacon
1. Загрузите приложение nRF Connect из Google Play Store и откройте его.
2. Экран выглядит как показано ниже. Полезными опциями для этого проекта будут «Сканировать», «Сканер» и «Информация» при обнаружении устройств.
Опция «Сканировать» будет использоваться для просмотра всех доступных iBeacon. Чтобы начать поиск iBeacon, потяните экран вниз или перейдите к опции «Сканировать» в правом верхнем углу экрана. Начнется поиск доступных iBeacon.
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 в Arduino IDE доступен образец программы ESP32 BLE iBeacon. Но мы немного отредактировали этот набросок в этом уроке, полная отредактированная версия программы-примера приведена в конце этого урока.
Чтобы открыть пример программы 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 пошел в глубокий сон и bootcount используется подсчет количества возвратов.
RTC_DATA_ATTR static time_t last; RTC_DATA_ATTR static uint32_t bootcount;
Затем определите Тип рекламы BLE. Определение делается следующим образом.
BLEAdvertising * pAdvertising;
Формат: первый формат определен как структура для доступа к текущему времени.
struct timeval сейчас;
Также определяется UUID. UUID могут быть сгенерированы по этой ссылке .
#define BEACON_UUID "87b99b2c-9XXd-11e9-bXX2-526XXXX64f64"
Теперь создайте функцию, которая будет содержать атрибуты iBeacon, такие как UUID, Major, Minor и т. Д. В этой функции создайте экземпляр для BLE как iBeacon и установите поддельный идентификатор производителя, UUID, major и minor для ESP32 как iBeacon.
void setBeacon () { BLEBeacon oBeacon = BLEBeacon (); oBeacon.setManufacturerId (0x4C00); oBeacon.setProximityUUID (BLEUUID (BEACON_UUID)); oBeacon.setMajor ((bootcount & 0xFFFF0000) >> 16); oBeacon.setMinor (загрузочный счет & 0xFFFF);
Установите флаг как 0x04, чтобы он выводил BrEdrNotSupported в сканере.
oData.setFlags (0x04);
Установите рекламные данные для публикации.
std:: string strServiceData = "";
Добавьте строки одну за другой для рекламы.
strServiceData + = (символ) 26; // Len strServiceData + = (char) 0xFF; // Тип strServiceData + = oBeacon.getData (); oData.addData (strServiceData);
Начните рекламу с публикации данных.
pAdvertising-> setData (oData); pAdvertising-> setScanResponseData (oScanResponseData);
Запустите последовательный монитор со скоростью 115200 бод и узнайте время. Также увеличьте загрузочное число, чтобы сохранить количество сбросов.
Serial.begin (115200); gettimeofday (& now, NULL); Serial.printf ("запустить ESP32% d \ n", bootcount ++);
Сохраните текущее время в статической памяти.
last = now.tv_sec;
Создайте устройство BLE и назовите его как хотите. Здесь ESP32 называется « ESP2 as iBeacon ». Обратите внимание, что имена могут быть длинными, но в этой версии кода началась поддержка длинных имен.
BLEDevice:: init («ESP32 как iBeacon»);
Создайте сервер BLE для рекламы и запуска.
BLEServer * pServer = BLEDevice:: createServer (); pAdvertising = BLEDevice:: getAdvertising (); BLEDevice:: startAdvertising ();
Затем установите ESP32 в режим iBeacon.
setBeacon ();
Начните рекламу, затем прекратите рекламу и погрузитесь в глубокий сон на 10 секунд.
pAdvertising-> start (); pAdvertising-> stop (); esp_deep_sleep (1000000LL * GPIO_DEEP_SLEEP_DURATION);
Наконец, подключите плату разработки ESP32 к ноутбуку с помощью кабеля Micro USB и загрузите код в ESP32 с помощью Arduino IDE. Затем откройте приложение nRF Connect Android на своем смартфоне и начните сканирование. Вы найдете ESP32 как трансляцию iBeacon, как показано на рисунке ниже:
Вот как ESP32 можно использовать как BLE Beacon для рекламы UUID, Major и Minor. Если вы хотите узнать больше об iBeacon, следуйте нашему предыдущему руководству по HM10 как iBeacon. Также, если у вас есть сомнения, оставьте комментарий ниже или задавайте вопросы на форумах.
Полный код с рабочим видео приведен ниже.
/>