Перейти к содержанию

Bluetooth PAN

Обзор

Bluetooth PAN (Personal Area Networking, персональная сеть) позволяет устройству SF32 подключаться к IP-сети по каналу классического Bluetooth. Для доступа в интернет обычно используется режим модема на телефоне. Это может позволить обойтись без отдельного радиомодуля Wi-Fi. PAN — один из профилей классического Bluetooth, описанных в статье Обзор Bluetooth, и один из вариантов транспорта OTA, рассмотренных в статье OTA и DFU.

Рассмотрите PAN для периодического или умеренного IP-трафика: прогноза погоды, синхронизации времени, вызовов облачных API, обмена данными голосового ассистента и загрузки прошивки. PAN позволяет обойтись без отдельной подсистемы Wi-Fi, если её стоимость, занимаемая площадь платы, затраты на интеграцию и энергопотребление перевешивают пользу для данного сценария. Оцените требования к соответствию нормам RF для выбранной аппаратуры и конечного изделия.

Как работает Bluetooth PAN

Bluetooth SIG определяет PAN как профиль классического Bluetooth (BR/EDR). Он передаёт пакеты Ethernet-типа по каналу Bluetooth ACL с помощью BNEP (Bluetooth Network Encapsulation Protocol). BNEP работает поверх L2CAP, а не RFCOMM. Для PAN нужны BR/EDR и совместимая реализация профиля, но поддержка BLE не обязательна. Поэтому PAN можно реализовать и на оборудовании, поддерживающем только классический Bluetooth.

PAN не работает поверх BLE. Однако отдельный профиль Internet Protocol Support Profile (IPSP) позволяет передавать IPv6 по BLE. Наличие такой возможности в протоколе не доказывает её поддержку в SiFli-SDK или сервисе раздачи интернета телефона. Ниже сравнивается передача данных GATT через приложение, а не IPSP.

Профиль определяет три роли:

Таблица: роли Bluetooth PAN
Роль Назначение
NAP (Network Access Point) Подключает устройства Bluetooth к внешней сети и пересылает пакеты между Bluetooth-пикосетью и этой сетью. Обычно эту роль выполняет телефон с включённой раздачей интернета/режимом Personal Hotspot.
PANU (PAN User) Клиентская роль. Устройство подключается к NAP (или GN) и использует предоставленный сетевой доступ. Именно эту роль выполняют устройства SF32.
GN (Group Ad-hoc Network) Пересылает пакеты между подключёнными устройствами PANU, не предоставляя доступа к внешней сети. Используется для одноранговой связи между устройствами, а не для выхода в интернет.

PANU может обнаруживать ближайшие устройства через inquiry и определять их сервис PAN и роль через SDP. Признак Networking в Class of Device — подсказка при поиске, а не доказательство доступности сервиса NAP. После установления ACL и BNEP поверх L2CAP точка NAP пересылает трафик во внешнюю сеть через мост или маршрутизатор, в зависимости от реализации. NAP может быть телефоном или шлюзом LAN, как описано в спецификации PAN. Любая сторона может завершить соединение; в рассматриваемой схеме с раздачей интернета телефоном изменение состояния раздачи может потребовать повторного подключения.

Почему стоит использовать PAN вместо Wi-Fi

Таблица: PAN, Wi-Fi и BLE для доступа к сети
Вариант Когда подходит Компромисс
Bluetooth PAN В изделии уже используется двухрежимный Bluetooth, нужен периодический или умеренный IP-трафик, а телефон обычно находится рядом. Пропускная способность и дальность связи зависят от BR/EDR и внешнего подключения NAP. Схема с раздачей интернета телефоном зависит от этого телефона; в других архитектурах можно использовать отдельный шлюз NAP.
Отдельный радиомодуль Wi-Fi Изделию нужна высокая постоянная пропускная способность или подключение, не зависящее от телефона. Добавляет радиомодуль, антенну, работы по интеграции и бюджет энергопотребления. Оцените требования к соответствию нормам RF для выбранного радиокомпонента или модуля и конечного изделия.
BLE GATT → приложение-компаньон → интернет Изделие передаёт небольшие объёмы данных, которые приложение может пересылать в облако. Такая собственная схема пересылки не даёт устройству прямого IP-подключения. BLE IPSP — отдельный вариант; нужно проверить его поддержку в стеке устройства и шлюзе. Это не PAN.

Для изделий, которым двухрежимный Bluetooth уже нужен для аудио, сервисов GATT или профилей классического Bluetooth, PAN часто позволяет добавить доступ к интернету с минимальными дополнительными затратами и без второй радиоподсистемы — если сценарий допускает зависимость от находящегося рядом телефона с включённой раздачей интернета.

Передача данных в iOS: ретрансляция через BLE, классический Bluetooth и PAN

Важно различать три архитектуры подключения iPhone. Без уточнений утверждение «для классического Bluetooth требуется MFi» слишком широкое: iOS поддерживает стандартные профили Bluetooth, а функция Personal Hotspot также может использовать Bluetooth. Ограничение относится к ситуации, когда приложению iOS нужен собственный канал передачи данных к аксессуару Bluetooth Classic через механизм External Accessory/iAP от Apple. Apple указывает, что External Accessory связывается по Bluetooth с аксессуарами MFi, а в техническом разъяснении уточняет, что BLE-аксессуары используют Core Bluetooth и им не требуется соответствие MFi.

Таблица: варианты подключения аксессуара к интернету в iOS
Архитектура Канал между устройством и телефоном Что это означает для изделия под iOS Скорость передачи данных и инженерные компромиссы
BLE → приложение → интернет Собственный протокол GATT; приложение iOS принимает данные устройства и пересылает их в облако. BLE может использовать Core Bluetooth без пути External Accessory/MFi. Приложение должно управлять сопряжением, формированием кадров, повторами, работой в фоне и передачей данных в облако. Объём полезных данных и расписание BLE ограничены параметрами подключения и поведением iOS/приложения. Этот вариант подходит для небольших периодических объёмов данных, но не обеспечивает общий IP-канал и может стать практическим узким местом при непрерывном или интенсивном трафике.
Собственный канал Classic Bluetooth → приложение Собственный канал данных между аксессуаром Bluetooth Classic и приложением iOS. Фреймворк External Accessory предназначен для аксессуаров MFi; Apple указывает, что он работает только с аппаратурой MFi. Стандартные поддерживаемые профили — отдельный случай. Для этого пути нужны аксессуар MFi и поддерживаемый им протокол аксессуара, а также интеграция приложения и проверка соответствия изделия требованиям. Сам по себе этот путь не обеспечивает устройству прямой IP-доступ к сети.
Bluetooth PAN → точка доступа телефона → интернет Стандартное соединение PANU–NAP; SF32 использует Bluetooth-сервис Personal Hotspot/раздачи интернета телефона. Устройство использует сетевой сервис телефона, а не собственный канал между приложением и аксессуаром. При этом необходимо проверить совместимость телефона, оператора и поведения режима раздачи. SF32 выполняет собственный IP-клиент без ретрансляции через приложение. Это не доказывает преимуществ перед BLE по скорости или энергопотреблению. На целевых телефонах сравните скорость передачи полезных данных, длительность обновления и затраченную энергию, используя одинаковые данные и сервер. Результаты зависят от Bluetooth-соединения, политики телефона, внешней сети и сервера назначения.

Для голосового ассистента, клиента OTA и других изделий, которым нужны непрерывная передача данных или прямой обмен по HTTP/WebSocket, PAN может избавить от промежуточного приложения-ретранслятора BLE, но рассматривайте его как кандидата сетевого пути в iOS только после проверки на целевом iPhone и в конфигурации SDK. В примере SiFli v2.5.1 также включён A2DP, чтобы обойти описанную проблему подключения только PAN в iOS; A2DP не является требованием протокола PAN. PAN не заменяет приложение для настройки изделия, аутентификации пользователя, уведомлений или локального управления; он лишь не даёт такой ретрансляции ограничивать канал передачи данных приложения. Голосовой помощник Xiaozhi на SF32 — работающий пример этой архитектуры.

Поддержка устройств SF32

Для SF32 выберите семейство с поддержкой классического Bluetooth и проверьте стек PAN, версию SDK и конфигурацию целевой платы. Семейства с поддержкой PAN в таблице используют двухрежимный Bluetooth; это свойство данных устройств SF32, а не требование протокола PAN.

Таблица: поддержка PAN семейством SF32
Семейство Возможности Bluetooth Поддержка PAN
SF32LB52x Двухрежимный Bluetooth Да
SF32LB55x Только BLE Нет — PAN требует классический Bluetooth
SF32LB56x Двухрежимный Bluetooth Да
SF32LB57x Двухрежимный Bluetooth Проверьте стек PAN и целевую плату; семейство не указано в примере PAN используемой здесь версии v2.5.1
SF32LB58x Двухрежимный Bluetooth Да

Общие рекомендации по выбору между BLE и двухрежимным Bluetooth см. в статье Обзор Bluetooth.

Пример PAN в SiFli-SDK

SiFli-SDK содержит работающую реализацию PANU в example/bt/pan. Она поддерживается на eh-lb52x, eh-lb56x, eh-lb58x и платах серии sf32lb52/56/58-lcd. Пример подключается к сервису PAN (NAP) телефона, а затем демонстрирует реальную работу с сетью с помощью команд оболочки Finsh, в том числе команды weather, которая получает текущий прогноз через установленное соединение PAN. На снимке README показаны поля ответа погодного сервиса: id, name, country, path, timezone, timezone_offset, txt, code, temperature и last_update. В примере указаны Чунцин (CN), Asia/Shanghai (+08:00), 多云 («облачно», код 4), температура 10 и время обновления 2025-01-13T15:54:09+08:00. Это данные прикладного уровня, а не поля PAN/BNEP; значения могут меняться.

При запуске пример включает Bluetooth inquiry и page scan, чтобы телефон мог обнаружить устройство и выполнить сопряжение с ним. Имя устройства Bluetooth по умолчанию — sifli_pan.

Для HTTPS настройте сертификаты по README примера PAN версии v2.5.1. Стандартные сертификаты CA находятся в external/mbedtls_228/certs/default; необходимые дополнительные сертификаты CA поместите в external/mbedtls_228/certs. Требуется формат PEM, а не DER: проверьте наличие -----BEGIN CERTIFICATE----- в содержимом, не полагаясь только на расширение файла. При включённом PKG_USING_MBEDTLS_USER_CERTS в proj.conf сборка объединяет файлы этого каталога в ports/src/tls_certificate.c. Проверьте доверенные корневые сертификаты для фактического сервера. Успешное подключение PAN не доказывает успешную проверку сертификата TLS; проверьте подлинность сервера и время устройства, если проверка срока действия сертификата зависит от него.

В README каталог назван mbedtls_288, но на снимках экрана и в коде генерации сертификатов версии v2.5.1 используется mbedtls_228. Выше указаны пути из реализации. Скрипт принимает только сертификаты, первая строка которых начинается с -----BEGIN CERTIFICATE; сохраняйте этот формат и проверяйте предупреждения сборки о пропущенных файлах.

Таблица: команды Finsh в примере PAN
Команда Действие
pan_cmd conn_pan Подключается к PAN после включения на телефоне раздачи сети.
pan_cmd ota_pan Загружает по каналу PAN и устанавливает образ прошивки, указанный в main.c.
pan_cmd set_retry_flag 1 / 0 Включает или отключает автоматическое повторное подключение к PAN.
pan_cmd set_retry_time N Задаёт максимальное число попыток автоматического повторного подключения.
pan_cmd autoconnect Вручную запускает попытку повторного подключения после того, как телефон отключил и снова включил раздачу сети.

Перед запуском примера проверьте следующие настройки по README указанной версии и для целевой платформы:

  • Включите CONFIG_BLUETOOTH, CONFIG_BT_PROFILE_CUSTOMIZE, CONFIG_CFG_PAN и CONFIG_BSP_BT_CONNECTION_MANAGER. В примере также включён A2DP для обхода описанной проблемы iOS с подключением только PAN; протокол PAN сам по себе не требует A2DP.
  • CONFIG_BT_FINSH включает необязательные команды управления Bluetooth. Сохраните функции оболочки, необходимые для команд, которые планируете проверять.
  • Настройте CONFIG_BSP_BLE_NVDS_SYNC в зависимости от процессора, на котором работает Bluetooth: README требует включать его для HCPU и отключать для LCPU. Не копируйте без изменений конфигурацию с другим распределением функций между процессорами.
  • Для повторного подключения к последнему устройству проверьте CONFIG_BT_AUTO_CONNECT_LAST_DEVICE и CONFIG_PKG_USING_FLASHDB. Убедитесь, что настройки сохраняются после перезагрузки, и ограничьте число попыток средствами управления повторным подключением из таблицы выше, вместо бесконечных повторов.

Поддержка и проверка мобильных операционных систем

Телефон выступает в роли PAN NAP и входит в сетевой тракт изделия; это не просто инструмент первоначальной настройки. Рассматривайте его операционную систему, модель, тарифный план оператора и правила раздачи интернета как часть конфигурации поддерживаемого изделия. Успешного сопряжения Bluetooth недостаточно: телефон должен предоставлять сервис раздачи интернета по Bluetooth (PAN) и маршрутизировать трафик после подключения PANU.

Таблица: поддержка Bluetooth PAN мобильными ОС
Мобильная ОС Что указано в документации платформы Рекомендации для запуска на SF32 Границы проверки изделия
iOS / iPadOS с сотовой связью В документации Apple по Personal Hotspot Bluetooth указан как способ подключения; также сказано, что Personal Hotspot раздаёт сотовый интернет телефона. Следуйте инструкции SiFli для Xiaozhi на iOS: используйте телефон с активной услугой сотовой связи, включите Personal Hotspot до сопряжения, не отключайте Bluetooth и выполните сопряжение/подключение устройства SF32. Если sifli-pan не отображается, в руководстве SiFli отмечено, что может помочь перезапуск телефона. Доступность Personal Hotspot, лимиты трафика и число подключённых устройств зависят от оператора и модели iPhone. Проверьте каждую поддерживаемую версию iOS/iPadOS, класс телефона и тарифный план; не делайте вывод о поддержке только по работе точки доступа Wi-Fi.
Android В справке Android сказано, что большинство телефонов Android могут раздавать мобильный интернет по Bluetooth: сначала выполните сопряжение, настройте сетевое Bluetooth-подключение на другом устройстве, затем включите Bluetooth tethering. До выполнения pan_cmd conn_pan включите раздачу интернета по Bluetooth. Названия параметров и расположение меню зависят от производителя, версии Android и корпоративных политик; зафиксируйте точный путь для каждого проверенного телефона. Google указывает, что функция доступна у большинства, но не у всех телефонов Android. Операторы могут ограничивать раздачу или взимать за неё плату, а производители — скрывать или изменять настройку. Проверьте планируемые к выпуску сочетания телефона, ОС и оператора, а не полагайтесь только на версию Android.
HarmonyOS и другие мобильные ОС на основе Android В этом руководстве нет утверждения о поддержке PAN всей платформой. Реализации Bluetooth и раздачи интернета могут быть основаны на Android, но различаться в зависимости от модели, рынка, версии, настроек оператора или политики управления устройством. Найдите настройку раздачи интернета по Bluetooth, выполните сопряжение телефона и устройства SF32, затем подтвердите реальный IP-трафик с помощью примера PAN. Считайте поддержку каждой конкретной комбинации модели телефона, сборки ОС, региона и оператора неподтверждённой, пока она не пройдёт ту же проверку, что и Android. Не заявляйте о поддержке только на основании марки телефона или успешного сопряжения Bluetooth.

Настройка телефона

Рисунок: примерное расположение переключателей Personal Hotspot в iOS и Bluetooth tethering в Android

Пример настроек Personal Hotspot в iOS и Bluetooth tethering в Android

Это иллюстративная справка по настройкам, а не точный снимок экрана операционной системы. Формулировки и расположение меню зависят от версии iOS/iPadOS, производителя Android и политики управления телефоном. В iOS/iPadOS ищите Allow Others to Join (разрешить подключение других), а в Android — Bluetooth tethering. На снимке iOS для SiFli v2.5.1 также включена Maximize Compatibility. Это пример настройки телефона, а не требование PAN; проверьте, нужна ли она на каждом целевом устройстве.

Для каждого проверяемого телефона выполните следующие действия:

  1. Проверьте внешнее подключение телефона. Personal Hotspot от Apple раздаёт мобильный интернет; убедитесь, что оператор разрешает раздачу. Некоторые телефоны Android также могут раздавать подключение Wi-Fi, но эту возможность нужно проверить на конкретной модели и сборке ОС.
  2. До запроса PAN со стороны SF32 включите на телефоне Bluetooth tethering или Personal Hotspot.
  3. Выполните сопряжение телефона с устройством; если ОС требует, оставьте телефон доступным для обнаружения.
  4. Выполните pan_cmd conn_pan, затем проверьте IP-обмен — например, команду weather из примера, — а не только успешное Bluetooth-подключение.
  5. Отключите раздачу, переведите телефон в спящий режим и разбудите его, затем унесите телефон за пределы радиуса действия; проверьте, соответствует ли повторное подключение требованиям изделия.

Если раздача включена только после установления Bluetooth-соединения, явно восстановите соединение PAN командой pan_cmd conn_pan.

Составление матрицы поддерживаемых телефонов

Для потребительского изделия публикуйте поддерживаемые сочетания модель телефона + версия ОС + оператор/регион, а не просто «iOS» или «Android». Для каждого телефона-кандидата фиксируйте как минимум модель, сборку ОС, оператора, активную услугу сотовой связи и состояние SIM/eSIM, название настройки раздачи, время первого подключения, поведение при повторном подключении после блокировки экрана и потери радиосвязи, результат длительной передачи данных и действия пользователя, необходимые для восстановления связи. Повторяйте проверку после изменения приложения, прошивки PAN, ОС телефона или профиля оператора.

Доставка OTA через PAN

В примере PAN поддержка OTA включена по умолчанию: команда pan_cmd ota_pan загружает и устанавливает по тому же каналу Bluetooth PAN, что используется для сетевого трафика, образ прошивки через путь OTA DFU_PAN, описанный вместе со службой обновления прошивки SiFli-SDK. Такой вариант подходит изделиям, которые уже используют PAN для передачи данных и не хотят добавлять второй транспорт OTA. Сравнение PAN с BLE и другими способами обновления см. в статье OTA и DFU; планируйте откат и восстановление независимо от выбранного транспорта.

README также описывает ошибку сборки, когда для выбранной платформы нет подходящего OTA-файла ptab.json. На снимках показано отключение подпроекта DFU и поддержки обновления прошивки в промежуточном ПО (middleware), чтобы проверить пример без OTA. Такой диагностический приём убирает OTA и не подходит для выпуска изделия, которому нужны обновления. Перед включением OTA подготовьте и проверьте правильную разметку разделов и конфигурацию обновления.

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

Пример реального изделия SF32 с PAN

Проект Голосовой помощник Xiaozhi на SF32 — конкретный работающий пример PAN на SF32: он получает доступ к интернету через сопряжённый телефон и передаёт голосовые данные облачному сервису по этому соединению. Это полезный пример того, как в полном изделии вместе работают сеть PAN, прикладной трафик WebSocket/HTTP и зависимость от раздачи интернета телефоном.

Устранение неполадок

README также рекомендует проверять выделение Bluetooth-адреса. Прочитайте адрес командой nvds get_mac. Используйте только OUI, выделенный вашей организации или разрешённый для изделия, и назначайте устройствам уникальные адреса; не копируйте OUI другого производителя из примера. В команде nvds update addr 6 xxxxxxYYYYYY значение YYYYYY означает OUI с обратным порядком байтов, а xxxxxx — остальные три байта адреса. Соблюдайте порядок байтов команды, а не вставляйте отображаемый MAC-адрес без изменений.

CONFIG_NVDS_AUTO_UPDATE_MAC_ADDRESS может перезаписать ручное изменение. Если разрешённый тестовый адрес не сохраняется, README рекомендует отключить эту настройку, пересобрать и записать прошивку, затем снова задать адрес. Это диагностический приём для тестирования, а не политика выделения адресов для производства: перед выпуском проверьте поведение выбранной автоматической или заводской настройки после перезагрузки.

Таблица: устранение неполадок Bluetooth PAN
Симптом Проверки и действия
PAN подключён, но сетевые команды (например, weather) завершаются ошибкой Проверьте установление BNEP, выделенный IP-адрес, маршрут, DNS, доступность сервера и при необходимости ошибки TLS. README также рекомендует проверять OUI Bluetooth MAC-адреса командой nvds get_mac; изменяйте его через nvds update addr 6 ... только в соответствии с разрешённой политикой выделения адресов. Некорректный OUI — не единственная возможная причина.
Телефон не видит устройство или не подключается к нему Убедитесь, что раздача сети на телефоне включена до подключения, а устройство доступно для обнаружения (активны inquiry/page scan).
Телефон сопряжён, но weather или другая IP-операция не работает Сопряжение не подтверждает наличие сервиса PAN NAP. Проверьте раздачу по Bluetooth/Personal Hotspot и внешнее подключение телефона. Для мобильного интернета нужно разрешение оператора; для раздачи Wi-Fi на Android — поддержка конкретной модели и ОС. Сверьте проверяемое сочетание со списком поддерживаемых.
PAN отключается после изменения сетевого состояния телефона Такое возможно; проверьте поведение на каждом поддерживаемом телефоне. Подключитесь повторно командой pan_cmd conn_pan или включите pan_cmd set_retry_flag 1, ограничив автоматические попытки описанной выше настройкой числа повторов.
OTA через PAN прерывается до завершения Действуйте как при сбое любого транспорта OTA: проверьте URL образа, разметку разделов и откат по инструкции OTA и DFU, а не считайте причиной сам PAN.

Контрольный список запуска

  • Проверьте поддержку классического Bluetooth аппаратурой и стек/конфигурацию PAN для конкретных SDK и платы. Пример перечисляет SF32LB52x/56x/58x; SF32LB57x требует отдельной проверки. SF32LB55x поддерживает только BLE.
  • Решите, подходит ли зависимость PAN от раздачи интернета телефоном модели подключения изделия или действительно нужен отдельный радиомодуль Wi-Fi.
  • Запустите example/bt/pan на целевой плате и проверьте настройку раздачи на телефоне (Personal Hotspot в iOS/iPadOS или Bluetooth tethering в Android).
  • Проверьте реальное соединение PAN и хотя бы одну сетевую операцию от начала до конца (например, команду weather из примера).
  • Проверьте каждую предполагаемую модель телефона, сборку ОС, регион/тарифный план оператора и путь к настройке раздачи; не выпускайте изделие с общей формулировкой «поддерживается iOS/Android».
  • До использования сетевых функций проверьте корректность OUI Bluetooth MAC-адреса устройства.
  • Если PAN используется для OTA, перед выпуском полностью проверьте путь pan_cmd ota_pan, включая откат.
  • Настройте повторное/автоматическое подключение (set_retry_flag, set_retry_time) с учётом того, как часто телефон будет находиться в радиусе действия.

Основные выводы

  • Bluetooth PAN передаёт IP-трафик Ethernet-типа по BR/EDR с помощью BNEP поверх L2CAP. Поддержка BLE не обязательна. Для IPv6 по BLE используется отдельный профиль IPSP, а не PAN; необходима проверенная поддержка в стеке и шлюзе.
  • Устройства SF32 используют клиентскую роль PANU и обычно подключаются к телефону в роли NAP через tethering/Personal Hotspot.
  • В iOS BLE-аксессуары могут использовать Core Bluetooth без MFi, но для собственного канала данных между приложением и аксессуаром Bluetooth Classic через External Accessory/iAP требуется MFi. PAN использует сервис раздачи телефона, поэтому SF32 может работать со своим IP-клиентом без ретрансляции через приложение BLE.
  • В примере PAN перечислены целевые устройства SF32LB52x/56x/58x. SF32LB57x имеет двухрежимную аппаратуру, но требует отдельной проверки стека PAN и платы; SF32LB55x поддерживает только BLE и не может использовать PAN.
  • example/bt/pan из SiFli-SDK — работающая эталонная реализация с командами Finsh для подключения, повторного подключения и доставки OTA через PAN.
  • PAN через телефон подходит для периодического или умеренного IP-трафика, если телефон обычно находится рядом. Для высокой постоянной скорости или работы независимо от телефона оцените отдельный Wi-Fi либо другой независимый сетевой канал; возможен и NAP-шлюз, не являющийся телефоном.

Последнее обновление: