Встраиваемые системы

Беспроводные протоколы: BLE, WiFi, LoRa

Цели урока

  • Понять архитектуру BLE стека и механизм экономии энергии через duty cycle
  • Настроить WiFi на ESP32 и выбрать правильный режим сна для батарейных устройств
  • Выбрать Spreading Factor для LoRa под конкретное расстояние и duty cycle
  • Реализовать publish/subscribe IoT топологию через MQTT с QoS гарантиями

Датчик температуры на складе, GPS трекер на корове, датчик уровня воды в реке - все это IoT устройства с одной проблемой: как передать данные на сотни метров или километров, проработав годы от одной батарейки? Выбор протокола меняет всё.

  • **Умные весы / фитнес-трекеры:** BLE к смартфону - данные раз в секунду, батарея на неделю
  • **Умный дом ESP32:** WiFi + MQTT - управление розетками, мониторинг потребления
  • **Агро IoT:** LoRaWAN датчики влажности почвы - батарея на 5 лет, данные раз в 15 минут
  • **Умный счётчик воды:** NB-IoT / LoRa - данные в облако раз в день через бетонные стены

BLE: Bluetooth Low Energy стек

Фитнес-браслет работает неделями от маленькой батарейки и при этом передаёт данные на смартфон. Секрет - **BLE (Bluetooth Low Energy)**: протокол спроектирован так, чтобы radio включалось на миллисекунды, передавало пакет и засыпало обратно. Classic Bluetooth держит соединение постоянно, BLE - нет.

Стек BLE состоит из двух слоёв: **Controller** (radio, Link Layer) и **Host** (L2CAP, ATT, GATT, GAP). Большинство embedded устройств используют внешний модуль (HC-08, HM-10) или встроенное radio (nRF52, ESP32), предоставляющий API поверх HCI.

**Connection interval vs Advertisement interval:** до соединения устройство шлёт advertisement пакеты (100-2000 мс). После соединения - connection events по connection interval (7.5 мс - 4 с). Чем реже - тем меньше потребление, но больше задержка данных.

BLE устройство потребляет значительно меньше, чем Classic Bluetooth, потому что:

WiFi в embedded: ESP32

ESP32 - это MCU с встроенным WiFi и BLE в одном чипе. Он использует FreeRTOS и предоставляет высокоуровневый API через ESP-IDF, скрывая сложность 802.11 стека. В отличие от BLE, WiFi обеспечивает высокую пропускную способность (до 20 Мбит/с), но ценой значительно большего потребления.

**Modem sleep** - критичный режим для батарейных устройств на ESP32. WiFi radio выключается между connection interval'ами DTIM beacon, а CPU продолжает работать. **Light sleep** добавляет остановку CPU. **Deep sleep** отключает почти всё - просыпание занимает ~100 мс, но потребление падает до единиц мкА.

**Потребление ESP32:** активный WiFi - 200-300 мА. Modem sleep - 20-30 мА. Light sleep - 800 мкА. Deep sleep - 10-150 мкА. Для батарейных устройств нужно проектировать под deep sleep с редкими пробуждениями.

ESP32 работает от батареи. Данные нужно отправлять раз в минуту. Лучший режим сна:

LoRa и LoRaWAN

Датчик на поле фермы за 15 км от ближайшего WiFi. BLE - 10-100 м. WiFi - 100 м. **LoRa (Long Range)** - до 15 км в открытом пространстве при мощности 20-100 мВт. Работает в нелицензируемых ISM полосах (868 МГц в Европе, 915 МГц в США). Компромисс: очень низкая пропускная способность (300 бит/с - 50 кбит/с).

**LoRa** - физический слой (chirp spread spectrum модуляция). **LoRaWAN** - протокол поверх LoRa: адресация, шифрование (AES-128), duty cycle ограничения (1% в Европе), three device classes (A, B, C).

**LoRaWAN Class A (по умолчанию):** устройство отправляет данные, затем открывает два коротких окна для downlink от сервера. Между передачами - deep sleep. Идеально для датчиков с редкими измерениями.

Датчик на поле должен отправлять 10 байт данных раз в 10 минут на расстояние 8 км. Правильный выбор:

MQTT поверх беспроводных сетей

HTTP хорош для веб-браузеров: запрос-ответ, большие заголовки, постоянное соединение. Для IoT нужно другое: сотни устройств шлют данные в разное время, сервер рассылает команды конкретным устройствам. **MQTT (Message Queuing Telemetry Transport)** - протокол publish/subscribe для таких задач: заголовок пакета всего 2 байта.

**Will message (LWT):** при подключении MQTT-клиент может зарегистрировать «завещание» - сообщение, которое брокер отправит автоматически, если клиент отключится без чистого disconnect. Идеально для отслеживания онлайн-статуса устройств.

100 устройств одновременно публикуют данные в MQTT брокер. Сколько активных TCP соединений с брокером?

Беспроводные протоколы в embedded

  • BLE: 10-100 м, мкА между connection events - идеален для носимых устройств
  • WiFi (ESP32): 100 м, 200-300 мА активно / 10 мкА deep sleep - нужен duty cycle
  • LoRa: до 15 км, SF регулирует дальность vs скорость, duty cycle 1% в EU
  • LoRaWAN добавляет адресацию, AES-128 и классы устройств поверх LoRa физики
  • MQTT: publish/subscribe, 2 байта минимальный заголовок, QoS 0/1/2, идеален для IoT

Связанные темы

Беспроводные протоколы - вершина стека, ниже которой лежат физические интерфейсы.

  • UART и SPI — WiFi/BLE модули подключаются через UART или SPI
  • DMA и оптимизация — DMA для приёма WiFi/UART данных без CPU участия
  • RTOS и многозадачность — ESP-IDF использует FreeRTOS: WiFi и app задачи параллельно

Вопросы для размышления

  • Почему LoRa с SF12 работает дальше SF7, хотя передаёт медленнее?
  • Как MQTT LWT (Last Will Testament) помогает детектировать offline устройства без polling?
  • В каком сценарии BLE Mesh предпочтительнее классической топологии Central/Peripheral?

Связанные уроки

  • net-01-intro
Беспроводные протоколы: BLE, WiFi, LoRa

0

1

Войти