Использование Bluetooth в ESP32-S3 с помощью ESP-IDF (урок 7)


До настоящего момента мы изучали работу ESP32-S3 с проводными протоколами связи, такими как UART, I²C и SPI . Эти протоколы являются важными инструментами в арсенале разработчика встроенных систем. Они позволяют нам расширять возможности микроконтроллера, добавлять внешние датчики, взаимодействовать с дисплеями и соединять несколько микроконтроллеров вместе по общей шине.

Однако проводная связь вносит существенные ограничения:

  • Ограниченная мобильность: устройства должны оставаться физически соединенными между собой.
  • Протоколы ближнего действия: протоколы, такие как I²C и SPI, предназначены для передачи данных на короткие расстояния (обычно на одной печатной плате). Передача данных по длинным проводам приводит к появлению шума и ухудшению качества сигнала.
  • Масштабируемость и стоимость: прокладка физических проводов между десятками датчиков окружающей среды, разбросанных по зданию, является дорогостоящим и непрактичным решением.

Протоколы беспроводной связи решают эти проблемы, передавая и принимая данные с помощью радиочастотных (РЧ) волн по воздуху. Это устраняет необходимость в физических кабелях, обеспечивая настоящую мобильность, большую дальность действия и упрощая развертывание сложных сенсорных сетей. Двумя наиболее распространенными беспроводными протоколами в области встраиваемых систем являются Wi-Fi (работу с ним мы изучали в прошлом уроке), отлично подходящий для высокоскоростного подключения к интернету, и Bluetooth, идеально подходящий для маломощной связи между устройствами.

Протокол Bluetooth

Bluetooth — это стандарт беспроводной связи ближнего радиуса действия, работающий в радиодиапазоне ISM (промышленный, научный и медицинский) 2,4 ГГц. Он предназначен для обмена данными между устройствами на коротких расстояниях с использованием маломощной радиосвязи.

Вместо передачи непрерывного сигнала Bluetooth разделяет данные на небольшие блоки, называемые пакетами. Эти пакеты передаются по воздуху с использованием метода, называемого скачкообразным переключением частот, при котором радиомодуль быстро переключается между различными частотами в диапазоне 2,4 ГГц. Это уменьшает помехи от других устройств, таких как Wi-Fi-роутеры и микроволновые печи, работающие в том же диапазоне.

Диапазон 2,4 ГГц разделен на несколько каналов. Bluetooth Classic использует 79 каналов, расположенных на расстоянии 1 МГц друг от друга, в то время как Bluetooth Low Energy (BLE) использует 40 каналов, расположенных на расстоянии 2 МГц друг от друга. Во время связи устройства следуют общей последовательности переключения каналов и передают каждый пакет по отдельному каналу в этой последовательности.

Для обмена данными Bluetooth обычно использует архитектуру «центр-периферия»:

  • Периферийное устройство (сервер): устройство, которое сообщает о своем присутствии и хранит данные.
  • Центральный узел (клиент): устройство, которое сканирует периферийные устройства, подключается к ним и запрашивает или отправляет данные.

Архитектура сети Bluetooth

Пикосети

Когда устройства подключаются через Bluetooth, они образуют крошечную, самоорганизующуюся сеть, называемую пикосетью. В пикосети устройства выполняют определенные функции:

  1. Ведущее устройство (Master): устройство, инициирующее соединение и определяющее последовательность и синхронизацию переключения частот (например, ваш смартфон).
  2. Подчиненные (ведомые) устройства (Slave): устройства, которые следуют правилам Главного устройства и синхронизируются с его часами (например, ваши беспроводные наушники и умные часы).

В одной пикосети может быть одновременно подключен одно ведущее и до семи активных ведомых устройств. Ведущее устройство общается с ведомыми, но ведомые не общаются напрямую друг с другом; вся информация передается через ведущее устройство.

Архитектура пикосети Bluetooth

Скаттернеты (Scatternets)

Для скаттернетов также используют следующие названия:

  • Рассеянные сети
  • Децентрализованные пико-сети
  • Объединенные пикосети

Скаттернет формируется, когда несколько пикосетей соединяются через устройства, участвующие более чем в одной пикосети, что позволяет более крупной сети бесперебойно функционировать.

Архитектура скаттернета Bluetooth

В скаттернете устройство может быть ведомым (Slave) в одном пикосети, но выступать в качестве ведущего (Master) в другом, создавая сеть взаимосвязанных беспроводных узлов.

Процесс подключения в Bluetooth

Для того чтобы два устройства могли установить сеть и обмениваться данными, они проходят определенный процесс подключения:

  • Запрос (Inquiry): Если устройство хочет найти другие устройства, оно отправляет запрос на поиск. Устройство, которое хочет быть найденным, должно находиться в «режиме обнаружения», то есть активно отслеживать эти запросы и отвечать на них.
  • Пейджинг (Paging): После того, как устройства обнаружат друг друга, они устанавливают соединение. Это включает в себя синхронизацию их тактовых сигналов и согласование схемы скачкообразного изменения частоты.
  • Сопряжение (безопасность) (Pairing): Чтобы предотвратить случайное подключение соседа к вашим колонкам, устройства обычно требуют процесса сопряжения. Они генерируют и обмениваются защищенным цифровым ключом (часто проверяемым путем ввода PIN-кода или подтверждения запроса). После сопряжения устройства запоминают этот ключ и могут автоматически подключаться в будущем, используя зашифрованные сигналы, обеспечивая безопасность данных от прослушивания.

Варианты Bluetooth

По мере развития Bluetooth был представлен новый, важный вариант, призванный устранить критическое ограничение: энергопотребление.

Bluetooth классический

Оригинальный Bluetooth, часто называемый Bluetooth Classic или BR/EDR (Basic Rate / Enhanced Data Rate), предназначен для непрерывной потоковой передачи данных. Он обеспечивает скорость передачи данных до 3 Мбит/с и идеально подходит для таких приложений, как потоковая передача аудио (наушники, колонки) или быстрая передача файлов. Однако он потребляет относительно много энергии, что является проблемой для небольших устройств с батарейным питанием, таких как фитнес-браслеты или умные датчики, которым необходимо работать в течение нескольких месяцев от батарейки-таблетки.

Bluetooth Low Energy (BLE)

Технология Bluetooth Low Energy (BLE), представленная в Bluetooth 4.0 (2010), была разработана с нуля с приоритетом на энергоэффективность. BLE обеспечивает значительно меньшее энергопотребление благодаря ряду конструктивных решений:

  • Короткие пакеты передачи: вместо поддержания непрерывного соединения устройства BLE большую часть времени находятся в спящем режиме и пробуждаются лишь на короткое время для отправки или получения небольших пакетов данных.
  • Меньшее количество каналов: BLE использует всего 40 каналов (каждый шириной 2 МГц), из которых 3 являются выделенными рекламными каналами, используемыми для обнаружения.
  • Упрощенный процесс подключения: соединения BLE устанавливаются и завершаются быстрее.
  • Оптимизированная структура пакетов: пакеты BLE меньше по размеру и проще.

Устройство на основе технологии BLE может работать месяцами или даже годами от небольшой батарейки-таблетки, что делает его идеальным для:

  • фитнес-трекеры и умные часы;
  • медицинские датчики (пульсометры, глюкометры);
  • устройства для умного дома (замки, освещение, термостаты);
  • технология маяков (геолокационные сервисы в магазинах)
  • датчики промышленного интернета вещей.

Стек протоколов Bluetooth

Bluetooth — это не один протокол, а набор протоколов, организованных по уровням. Каждый уровень обрабатывает определенную часть связи, от физической радиопередачи до приложения, с которым взаимодействует пользователь.

Стек протоколов Bluetooth

Протокол Bluetooth состоит из двух основных частей: стека хоста и стека контроллера.

Стек контроллеров

Стек контроллеров управляет операциями на аппаратном уровне и низкоуровневым управлением каналами связи. Он включает в себя:

Физический уровень (радио)

В самом низу стека находится радиоуровень. Это собственно аппаратная часть: антенна, которая передает и принимает радиоволны, и схемы, которые выполняют модуляцию и демодуляцию. Этот уровень обрабатывает передачу битов по воздуху с использованием модуляции GFSK и FHSS.

Базовый слой

Непосредственно над физическим радиомодулем находится базовый уровень. Этот уровень управляет синхронизацией и структурой группировки и передачи битов. Он отвечает за:

  • Формирование пакетов: данные группируются в пакеты (небольшие группы), заголовки которых содержат адресную и управляющую информацию.
  • Обнаружение ошибок: для обнаружения ошибок передачи используются такие методы, как CRC (циклическая избыточность).
  • Синхронизация: часы ведущего устройства используются для синхронизации всех устройств в пикосети.
  • Типы соединений: Bluetooth поддерживает два типа соединений:
    • SCO (Synchronous Connection-Oriented): используется для передачи аудио в реальном времени, где допустима некоторая потеря данных, но синхронизация должна быть точной; применяется, например, для телефонных звонков.
    • ACL (асинхронный бессоединительный протокол): используется для передачи данных общего назначения, при которой данные не могут быть потеряны; применяется для передачи файлов, датчиков.

LMP: протокол управления каналами связи

Протокол управления каналами связи (LMP) отвечает за установление и управление Bluetooth-соединениями. Он обрабатывает:

  • Сопряжение и аутентификация: проверка того, что оба устройства действительно являются теми, за кого себя выдают.
  • Шифрование: кодирование данных таким образом, чтобы они не могли быть прочитаны посторонними лицами.
  • Управление энергопотреблением: переключение в режим сна с низким энергопотреблением для экономии заряда батареи.
  • Переключение ролей: при необходимости устройство может запросить переключение с ведомого на ведущее устройство.

Интерфейс контроллера хоста

Интерфейс HCI (Host Controller Interface) — это стандартизированная граница между аппаратным обеспечением Bluetooth (радио + базовая полоса + LMP) и программным обеспечением, работающим на процессоре хоста, обычно микроконтроллере или ЦП. Он определяет набор команд, которые хост может отправлять контроллеру, и событий, которые контроллер отправляет обратно.

Такое разделение означает, что модуль Bluetooth может представлять собой отдельный чип, взаимодействующий с основным процессором через простой интерфейс, такой как UART или USB.

Стек хостов

L2CAP: Протокол управления и адаптации логической связи

L2CAP — это уровень в Bluetooth, который позволяет различным приложениям совместно использовать одно и то же Bluetooth-соединение. Он работает как промежуточный слой между приложением и нижестоящей системой Bluetooth.

Его основная задача — мультиплексирование, что означает, что он позволяет нескольким потокам данных использовать одно соединение одновременно, не смешивая их. Каждое приложение получает свой собственный логический канал.

L2CAP также обрабатывает разделение и объединение пакетов. Если данные слишком велики, он разбивает их на более мелкие части перед отправкой. На стороне получателя он объединяет эти части, чтобы исходные данные были восстановлены корректно.

Он также поддерживает качество обслуживания (QoS), которое помогает определять, как следует обрабатывать данные в зависимости от приложения. Например, для передачи аудио требуется быстрая доставка, а для передачи файлов — более высокая точность.

Протоколы Bluetooth верхнего уровня

Поверх уровня L2CAP Bluetooth использует несколько протоколов верхнего уровня, которые предоставляют различные коммуникационные услуги, такие как последовательная связь, передача файлов, доступ в Интернет, потоковая передача аудио и телефония. Эти протоколы позволяют устройствам Bluetooth поддерживать множество типов приложений и сервисов.

RFCOMM — это протокол Bluetooth, который служит простой заменой последовательному кабелю. Он имитирует традиционную последовательную связь (RS-232), поэтому старые приложения, разработанные для проводных последовательных портов, могут легко работать через Bluetooth. Он работает поверх L2CAP и широко используется в таких устройствах, как модули Bluetooth в проектах на микроконтроллерах, GPS-устройства и простые беспроводные датчики. Он также основан на стандарте ETSI TS 07.10, который определяет, как обрабатывается последовательная связь.

OBEX (Object Exchange) используется для передачи объектов, таких как файлы, изображения и контакты, между устройствами. Он часто встречается в функциях обмена файлами и синхронизации контактов.

Протокол WAP (Wireless Application Protocol) использовался в первых мобильных устройствах для доступа к базовым интернет-сервисам через Bluetooth и другие беспроводные сети, хотя сейчас он в основном устарел.

Протокол TCS (Telephony Control Protocol) используется для управления услугами голосовой связи, такими как установление и завершение вызовов, и в основном применяется в беспроводных телефонных системах и голосовых шлюзах.

К другим протоколам этого уровня относятся:

  • BNEP (Bluetooth Network Encapsulation Protocol): протокол для организации сети по Bluetooth.
  • AVDTP (Audio/Video Distribution Transport Protocol): для потоковой передачи аудио.
  • AVCTP: для дистанционного управления аудио/видео.

Слой профилей

На вершине стека находятся профили. Профиль — это спецификация, которая точно определяет, какие протоколы и функции должно поддерживать устройство для выполнения определенной задачи. Профили обеспечивают совместимость: если два устройства реализуют один и тот же профиль, гарантируется их совместная работа.

К числу важных профилей Bluetooth относятся:

Профиль Сокращение Использование
Serial Port Profile (профиль последовательного порта) SPP Беспроводное последовательное соединение
Hands-Free Profile (профиль "Без рук") HFP Телефонные звонки через автомобильную аудиосистему или гарнитуру
Advanced Audio Distribution Profile (расширенный профиль распределения аудиосигнала) A2DP Высококачественная потоковая передача стереозвука
Audio/Video Remote Control Profile (профиль дистанционного управления аудио/видео) AVRCP Управление воспроизведением мультимедиа (воспроизведение, пауза, пропуск)
Human Interface Device Profile (профиль устройства пользовательского интерфейса) HID Клавиатуры, мыши, игровые контроллеры
File Transfer Profile (профиль передачи файлов) FTP Передача файлов между устройствами
Health Device Profile (профиль медицинского устройства) HDP Данные медицинских датчиков (измерение артериального давления, уровня глюкозы в крови)

Как видим, состав профилей достаточно обширный.

Архитектура BLE

Bluetooth Low Energy (BLE) вносит ряд улучшений и модификаций по сравнению с Bluetooth Classic, особенно на уровне хоста, благодаря определению собственной облегченной и энергоэффективной структуры протокола. BLE специально разработан для беспроводной связи с низким энергопотреблением, используемой в устройствах IoT, таких как датчики, интеллектуальные переключатели, носимые устройства и медицинские приборы.

Архитектура BLE разделена на несколько уровней, каждый из которых отвечает за определенные функции связи. Уровень хоста включает в себя важные протоколы, такие как:

  • SMP (Security Manager Protocol) для обеспечения безопасности и сопряжения.
  • GAP (Generic Access Profile) — профиль общего доступа для обнаружения устройств и управления подключениями.
  • ATT/GATT (Attribute Protocol / Generic Attribute Profile) — протокол атрибутов для организации и обмена данными.
  • Механизмы обнаружения сервисов для выявления доступных сервисов и их характеристик.

Bluetooth в ESP32-S3

ESP32-S3 поддерживает только Bluetooth Low Energy (BLE). Общая реализация BLE аналогична той, что мы обсуждали ранее, но фреймворк ESP-IDF предоставляет два встроенных стека для хоста, упрощающих разработку (Bluedroid и NimBLE). Кроме того, ESP-IDF предлагает несколько готовых к использованию профилей и сервисов BLE, таких как BluFi, HID и ESP-BLE-MESH, которые можно использовать поверх этих стеков для ускорения разработки приложений.

Архитектура Bluetooth Low Energy в ESP32-S3

Стеки хостов

ESP-Bluedroid ESP-NimBLE

ESP-Bluedroid — это стек Bluetooth по умолчанию, предоставляемый ESP-IDF. Он основан на стеке Android Bluedroid и поддерживает как классический Bluetooth, так и Bluetooth Low Energy (BLE) на совместимых устройствах ESP. Для ESP32-S3, который поддерживает только BLE, ESP-Bluedroid предоставляет полную реализацию BLE-хоста с поддержкой GAP, GATT, функций безопасности и различных профилей BLE. Он обладает богатым функционалом и хорошо интегрирован с экосистемой ESP-IDF, что делает его подходящим для сложных BLE-приложений.

ESP-NimBLE

ESP-NimBLE — это легковесный и ресурсоэффективный стек BLE-хостинга, доступный в ESP-IDF. Он основан на проекте Apache NimBLE и оптимизирован для низкого потребления памяти и повышения производительности по сравнению с Bluedroid. ESP-NimBLE поддерживает стандартные функции BLE, такие как GAP, GATT, реклама, сканирование и защищенные соединения, потребляя при этом меньше системных ресурсов. Благодаря своим компактным размерам и эффективности, он часто предпочтителен для встраиваемых приложений, где важны такие параметры, как память и энергопотребление.

Профили

Над стеками хоста находятся реализации профилей от Espressif, а также некоторые распространенные профили. В зависимости от вашей конфигурации, эти профили могут работать на ESP-Bluedroid или ESP-NimBLE.

Профиль ESP-BLE-MESH

ESP-BLE-MESH — это платформа для создания ячеистых сетей на основе Bluetooth Low Energy, предоставляемая ESP-IDF. Она позволяет нескольким устройствам BLE взаимодействовать друг с другом в топологии «многие ко многим», обеспечивая передачу сообщений по большой сети узлов. Это делает ESP-BLE-MESH подходящим для таких приложений, как «умный дом», промышленная автоматизация, сенсорные сети и интеллектуальные системы освещения. Платформа поддерживает инициализацию, безопасную связь, передачу сообщений и управление узлами на основе официального стандарта Bluetooth Mesh. Используя ESP-BLE-MESH, разработчики могут создавать масштабируемые и надежные сети IoT с расширенным диапазоном связи, выходящим за рамки стандартных соединений BLE «точка-точка».

Профиль BluFi

BluFi — это запатентованный профиль Bluetooth Low Energy, разработанный компанией Espressif для упрощения настройки Wi-Fi для устройств ESP. Он позволяет смартфону или другому устройству с поддержкой BLE безопасно передавать учетные данные Wi-Fi, такие как SSID и пароль, на устройство ESP по BLE-соединению. После получения учетных данных устройство ESP может автоматически подключиться к целевой сети Wi-Fi. BluFi широко используется в продуктах IoT для обеспечения простого и удобного процесса настройки без необходимости использования временной точки доступа или ручной конфигурации. ESP-IDF включает встроенную поддержку профиля BluFi, что упрощает интеграцию для разработчиков.

Работа с Bluedroid

Теперь, когда мы знаем основы, давайте создадим простой пример управления светодиодом с помощью Bluetooth.

Схема проекта

Сначала соберем схему. Для этого проекта нам понадобится только один светодиод и один резистор на 220 Ом. Мы подключим короткий вывод (катод) светодиода к GND, длинный вывод (анод) светодиода к одному из концов резистора на 220 Ом, а другой конец резистора — к выводу GPIO 1.

Схема проекта для демонстрации использования Bluetooth в ESP32-S3

Структура проекта

Файл main/main.c

Файл main/CMakeLists.txt

Файл CMakeLists.txt (корневой)

Настройка через idf.py menuconfig

Перед сборкой выполните конфигурацию:

Обязательно проверьте или настройте следующие параметры:

  1. Bluetooth включен:

    • Component config → Bluetooth → Bluetooth controller mode → BR/EDR only

    • Или выберите Bluetooth enable

  2. Выбор чипа:

    • Component config → ESP32-S3 Specific → Target ESP32-S3

  3. Размер ОЗУ и кэша:

    • Убедитесь, что настройки соответствуют вашей версии ESP32-S3.

Сборка и прошивка

Подключение и использование

  1. На телефоне:

    • Включите Bluetooth

    • Найдите устройство ESP32_S3_LED_Control

    • Подключитесь к нему

    • Используйте любое Bluetooth Serial приложение (например: "Serial Bluetooth Terminal" для Android)

  2. Доступные команды:

    • ON или 1 - включить светодиод

    • OFF или 0 - выключить светодиод

    • STATUS или ? - узнать текущий статус

    • HELP - показать справку

  3. При подключении:

    • ESP32-S3 будет виден как последовательный Bluetooth порт

    • Отправляйте команды через терминал

Важные замечания

1. ESP32-S3 требует явного указания target при первом использовании:

2. Пин GPIO 1 может использоваться для Serial логирования на некоторых платах - убедитесь, что это не конфликтует

3. Для стабильной работы убедитесь, что антенна ESP32-S3 подключена (на некоторых dev-платах нужен внешний разъем)

Код включает полную обработку команд, логирование и индикацию запуска светодиодом. Устройство будет видимо для любых Bluetooth устройств и принимает текстовые команды для управления LED.

(Проголосуй первым!)
Загрузка...
1 просмотров

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *