OpenMV MicroPython OpenMV MicroPython OpenMV MicroPython
  • Главная
  • Учебник
  • Основные библиотеки
  • Платы
  • Шилды
  • Датчики
  • Язык
  • CPython
  • Внутреннее устройство
  • История изменений
/
  • dev
  • English
  • العربية
  • 简体中文
  • 繁體中文
  • Hrvatski
  • Čeština
  • Nederlands
  • Suomi
  • Français
  • Deutsch
  • עברית
  • Magyar
  • Bahasa Indonesia
  • Italiano
  • 日本語
  • 한국어
  • Polski
  • Português (Brasil)
  • Português (Portugal)
  • Română
  • Русский
  • Español
  • Svenska
  • ไทย
  • Türkçe
  • Українська
  • Tiếng Việt
  • Обсуждение
  • Руководство
    • 1. Быстрый старт
    • 2. Обзор Python
    • 3. Управление оборудованием
    • 4. Датчики изображения
    • 5. Обработка изображений
    • 6. NumPy
    • 7. Машинное обучение
    • 8. Asyncio
    • 9. Сети
    • 10. Веб-серверы
    • 11. Bluetooth
      • 11.1. Зачем нужен Bluetooth
      • 11.2. Стек BLE
      • 11.3. Радиосвязь и канальный уровень
      • 11.4. Реклама и сканирование
      • 11.5. Соединения
      • 11.6. Сервисы и характеристики
      • 11.7. Операции GATT
      • 11.8. Модуль aioble
      • 11.9. Работа в роли периферийного устройства
      • 11.10. Работа в роли центрального устройства
      • 11.11. Каналы L2CAP
      • 11.12. Одновременные роли и несколько подключений
      • 11.13. Сопряжение и привязка
      • 11.14. Заключение
    • 12. Протокол хоста
    • 13. Инструменты
    • 14. Производство
  • Библиотеки
  • Платы
  • Шилды
  • Датчики
  • Язык
  • CPython
  • Внутреннее устройство
  • История изменений
  • Лицензия

На этой странице

  • 11.3.1. Радиосвязь
  • 11.3.2. Канальный уровень
  • 11.3.3. Что разделяют камера и одноранговое устройство
  • 11.3.4. Что из всего этого видит Python
micropython-doc 0 0
Редактировать страницу
  1. OpenMV MicroPython /
  2. Руководство по OpenMV Cam /
  3. 11. Bluetooth /
  4. 11.3. Радиосвязь и канальный уровень
Просмотреть источник Открыть в ChatGPT Открыть в Claude Открыть в Perplexity

11.3. Радиосвязь и канальный уровень¶

Два нижних уровня стека BLE почти полностью автоматичны с точки зрения Python – радиокремний и уровни, которые MicroPython запускает поверх него, обрабатывают всё, от выбора канала до повторной передачи потерянного пакета. Три из принимаемых ими решений всё же проявляются в обращённом к пользователю API: мощность, дальность и пропускная способность.

11.3.1. Радиосвязь¶

BLE использует тот же диапазон 2,4 ГГц промышленно-научно-медицинского назначения (ISM), что и Wi-Fi, микроволновые печи и большинство других маломощных беспроводных технологий малого радиуса действия. Диапазон разделён на 40 каналов шириной 2 МГц.

  • Три из 40 каналов зарезервированы для рекламы – коротких широковещательных сообщений, объявляющих о присутствии устройства всем, кто слушает. Они разнесены по диапазону, так что слушатель может быстро просканировать все три и так что помеха на любом одном из них вряд ли полностью выведет устройство из эфира.

  • Тридцать семь – это каналы данных. После того как два устройства соединяются, они обмениваются пакетами по этим каналам, перескакивая между ними по псевдослучайной последовательности, которую обе стороны согласуют во время установления соединения. Адаптивная перестройка частоты позволяет любой из сторон пометить канал как плохой (сильная помеха Wi-Fi, микроволновка, соседняя BLE-сеть), чтобы последовательность его пропускала.

A horizontal frequency axis from 2400 MHz to 2480 MHz with 40 narrow channel slots drawn on it. Three of the slots, at the bottom edge, middle, and upper edge of the band, are highlighted as "advertising channels". The remaining 37 are labelled "data channels".

40 каналов BLE в диапазоне 2,4 ГГц. Три предназначены для рекламы, остальные несут трафик по открытому соединению.¶

Радио передаёт короткие пакеты – длиной максимум пару миллисекунд – и спит в промежутках между ними. Именно этот сон делает технологию низкоэнергетической. Типичное периферийное устройство BLE проводит существенно менее одного процента времени за фактической передачей; остальное время радио выключено между запланированными событиями.

11.3.2. Канальный уровень¶

Канальный уровень – это наименьшая единица BLE, которая общается со своим аналогом на другом устройстве. Он выполняет четыре задачи.

  • Формирование кадров пакетов. Каждый пакет несёт короткий заголовок (адрес доступа к каналу, длину пакета, управляющие биты), полезную нагрузку и CRC. Приёмник проверяет CRC и отбрасывает всё повреждённое.

  • Адресация. У каждого BLE-устройства есть 48-битный адрес устройства, который идентифицирует его в эфире. Некоторые из них публичные – аппаратный идентификатор, назначенный производителем, прослеживаемый навсегда. Некоторые случайные – генерируются на устройстве, периодически меняются и опционально шифруются, так что перехватчик не может связать две передачи с одним и тем же физическим устройством. Адреса снова появляются в Реклама и сканирование.

  • Планирование соединения. После того как два устройства соединяются, канальный уровень планирует периодические радиособытия в последовательности перескоков – с фиксированным интервалом соединения между ними – и упаковывает в каждое из них любые данные, поставленные в очередь вышестоящим уровнем GATT. Обе стороны снова засыпают между событиями. Интервал соединения – это параметр, который приложение может запросить (см. Соединения).

  • Надёжность. Каждый пакет в соединении подтверждается другой стороной. Канальный уровень повторно передаёт всё, что не получило ответа, так что вышестоящие уровни видят упорядоченный поток байтов без потерь. В отличие от UDP – отправь пакет и надейся на лучшее на стороне сети, у BLE при обычном использовании нет отдельного ненадёжного режима – каждый пакет в открытом соединении повторяется до тех пор, пока не дойдёт или пока связь не будет объявлена потерянной.

Канальный уровень – это также место, где работает шифрование, после того как пара устройств согласовала ключ во время сопряжения (см. Сопряжение и привязка). Каждый пакет на зашифрованной связи расшифровывается на приёмнике прежде, чем вышестоящие уровни его увидят.

11.3.3. Что разделяют камера и одноранговое устройство¶

Радиомодули на обоих концах согласуют во время установления соединения горстку параметров, управляющих обменом:

  • Интервал соединения – как часто обе стороны просыпаются для обмена пакетами, в диапазоне от 7,5 мс до 4 с.

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

  • Тайм-аут наблюдения – как долго любая из сторон ждёт, прежде чем объявить связь потерянной, когда другая замолкает.

  • MTU – наибольший одиночный пакет, который любая из сторон доставит в GATT (по умолчанию 23 байта, может быть согласован в большую сторону).

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

11.3.4. Что из всего этого видит Python¶

Почти ничего. API bluetooth и aioble не предоставляют каналы, последовательности перескоков, CRC пакетов или таймеры повторной передачи; всё это обрабатывается внутри BLE-порта и радиомодуля. Те части, которые действительно проявляются, – это те, что раскрывает согласование во время установления соединения: интервал соединения, MTU, тип адреса.

Назад
11.2. Стек BLE
Вперёд
11.4. Реклама и сканирование

Для прошивки OpenMV v5.0.0 · на основе MicroPython v1.28 · документация собрана 19 июня 2026 г. · Авторские права © 2014-2026 OpenMV, Damien P. George и другие.

Создано с помощью Sphinx с использованием Shibuya theme.