Как настроить Power-Saving в BLE-модулях, чтобы батарея держалась годами, а не месяцами

Ты собрал BLE-устройство — термометр, трекер, датчик давления в шинах — и хочешь, чтобы оно работало без замены батареи хотя бы год. Но уже через 2–3 месяца садится аккумулятор. Ты не один. Большинство разработчиков, даже опытные, настраивают BLE-модуль «по умолчанию» и потом удивляются, почему энергопотребление в 10 раз выше, чем в даташите. Секрет не в батарее. Секрет — в тонкой настройке параметров энергосбережения.

Я не буду рассказывать, что такое BLE или как работает адвертизинг. Если ты читаешь это — ты уже знаешь. Тебе нужно понять: какие именно параметры в твоём модуле (nRF52, CC2640, ESP32, HM-10 и т.д.) влияют на время работы от батареи, и как их настроить, чтобы не жертвовать надёжностью связи. Вот как это делается на практике.

Три ключевых параметра, которые решают всё

В BLE-модулях энергопотребление определяется тремя вещами: как часто устройство «кричит» (адвертизинг), как долго оно слушает (сканирование), и как долго спит между циклами. Остальное — мелочи. Но именно эти три параметра убивают батарею, если настроены неправильно.

1. Интервал адвертизинга

Это интервал, с которым твой модуль посылает пакеты в воздух — чтобы другие устройства (телефоны, шлюзы) его увидели. По умолчанию он часто стоит 100 мс. Это означает: 10 раз в секунду ты включаешь радио, греешь антенну, тратишь 15–30 мА на передачу. За час — 3600 пакетов. За день — 86 400.

Для датчика температуры, который обновляет данные раз в 5 минут, это — полный абсурд. Зачем кричать 10 раз в секунду, если никто не будет слушать чаще, чем раз в 30 секунд?

Реальный совет: Установи интервал адвертизинга в 1–5 секунд. Для устройств, которые редко обновляют данные — 10–30 секунд. Всё, что больше 60 секунд — уже рискованно: телефон может просто не успеть его найти.

Почему 1–5 секунд? Потому что:

  • Смартфон сканирует BLE-устройства раз в 1–3 секунды (в фоне).
  • Если ты кричишь раз в 5 секунд — шанс, что телефон тебя услышит, — 80–95%.
  • Если ты кричишь раз в 30 секунд — шанс падает до 40–60%. Телефон может пропустить тебя, особенно если у него включена экономия батареи.

2. Время ожидания соединения (Connection Interval)

Когда телефон подключился к твоему устройству — это не значит, что связь постоянная. BLE работает по таймерам. Ты задаёшь интервал, с которым устройство и телефон обмениваются данными. Это — connection interval.

По умолчанию он часто стоит 30 мс. Это звучит быстро — и это жестоко для батареи. Каждые 30 мс твой модуль просыпается, включает радио, принимает пакет, отправляет ответ, выключает радио. Это — 33 раза в секунду. Даже если ты не передаёшь данные, радио всё равно работает.

Реальный совет: Установи интервал соединения в 100–500 мс. Для датчиков — 200–500 мс. Для устройств, которые передают данные редко (раз в минуту), можно даже 1–2 секунды.

Почему не 1 секунда? Потому что:

  • Если ты передаёшь данные раз в 30 секунд, а интервал 1 секунда — ты 30 раз просыпаешься, чтобы сказать «ничего нового».
  • Если интервал 2 секунды — ты просыпаешься 15 раз, и 14 из них — «ничего нового».
  • Если интервал 10 секунд — ты просыпаешься 3 раза, и один раз — передаёшь данные. Это — оптимум.

Но есть нюанс: чем больше интервал, тем выше задержка. Если у тебя кнопка, которая должна включить свет в комнате — 2-секундная задержка неприемлема. Тогда берёшь 100–200 мс, но уменьшаешь объём передаваемых данных до минимума.

3. Период сна (Sleep/Deep Sleep)

Самый важный параметр. Большинство BLE-модулей умеют глубокий сон — когда радио выключено, CPU спит, потребление — 1–5 мкА. Но если ты не настроил таймер пробуждения — ты просто включаешь радио и забываешь выключить. Или пробуждаешься слишком часто.

Правило простое: устройство должно спать 99% времени. Если ты обновляешь данные раз в 10 минут — 99,8% времени ты должен быть в глубоком сне.

Как это сделать:

  1. Настрой таймер (RTC или внутренний таймер) на пробуждение раз в нужный интервал (например, 10 минут).
  2. Перед сном — выключи все датчики, периферию, LED.
  3. Запусти глубокий сон (deep sleep mode).
  4. При пробуждении — включи радио, отправь данные, подожди ответа (если нужно), выключи радио, снова засни.

Важно: не используй «light sleep» или «idle mode» — они не экономят энергию. Только глубокий сон с выключенным радио и периферией даёт реальный выигрыш.

Таблица: Как настроить параметры для разных сценариев

Тип устройства Интервал адвертизинга Интервал соединения Период сна Ожидаемый срок работы от CR2032
Термометр (раз в 5 мин) 5 сек 500 мс 5 мин 1–2 года
Трекер положения (раз в час) 30 сек 1 сек 1 час 3–5 лет
Кнопка управления (раз в 10 сек) 1 сек 100 мс 10 сек 6–12 месяцев
Умный браслет (постоянное соединение) не используется 30 мс 30 мс (всё время в соединении) 3–7 дней
Датчик давления в шинах (раз в 15 мин) 15 сек 2 сек 15 мин 5+ лет

Примечание: Расчёты основаны на типичных модулях nRF52832 с CR2032 (220 мА·ч), с учётом тока передачи ~15 мА, приёма ~5 мА, сна ~2 мкА. Реальные цифры могут отличаться на ±30% в зависимости от антенны, температуры и качества батареи.

Частые ошибки, которые убивают батарею

Я видел десятки проектов, где всё было сделано правильно — кроме одного момента. Вот что ломает энергопотребление:

  • Не выключаешь радио после передачи. Модуль «забыл» выключить радио после соединения — и тратит 5–10 мА в режиме ожидания. Это как оставить свет в комнате на месяц.
  • Используешь «адвертизинг без соединения» для постоянной передачи данных. Адвертизинг — это для «найти и подключиться». Если ты хочешь передавать данные чаще, чем раз в 5 секунд — подключайся. Адвертизинг с частым обновлением — это пустая трата энергии.
  • Включаешь LED, датчики, UART в режиме сна. Даже если датчик потребляет 100 мкА — это в 50 раз больше, чем глубокий сон. Выключи всё, что не нужно.
  • Слишком короткий интервал пробуждения. Если ты просыпаешься каждые 10 секунд, чтобы проверить датчик — ты не экономишь, а убиваешь батарею. Датчики не требуют постоянного опроса. Достаточно 1–2 раза в минуту.
  • Используешь Bluetooth 5.0 Long Range (LE Coded) без необходимости. Это увеличивает время передачи в 8 раз. Потребление растёт в 5–7 раз. Нужно только если ты на расстоянии 100+ метров. Для помещений — это перебор.

Как лучше сделать: пошаговая инструкция

Вот что делать, если ты хочешь добиться максимального срока службы от батареи:

  1. Определи частоту обновления данных. Раз в минуту? Раз в час? Раз в день? Это твой главный ориентир.
  2. Выбери интервал адвертизинга: 1–5 сек — если устройство должно быть найдено быстро; 10–30 сек — если можно подождать.
  3. Подключи устройство к телефону и измерь ток в режиме соединения. Используй мультиметр на токовой шкале (последовательно с батареей). Запиши средний ток при передаче и при ожидании.
  4. Установи интервал соединения в 200–500 мс. Если данные передаются редко — увеличь до 1–2 сек.
  5. Настрой таймер пробуждения на интервал обновления данных + 10% запаса. Например, если данные раз в 10 минут — пробуждение каждые 10 минут 30 секунд.
  6. Включи глубокий сон. Выключи все датчики, LED, UART, SPI, I2C. Только RTC и кнопка пробуждения остаются включены.
  7. Проверь, что радио выключается после передачи. Используй осциллограф или логический анализатор — посмотри, есть ли импульс тока после передачи. Если есть — ты не выключил радио.
  8. Проведи тест на 24 часа. Запусти устройство, засеки время, через которое батарея сядет на 10%. Умножь на 10 — получишь оценку срока службы.

Что выбрать в зависимости от ситуации

Нет универсальных настроек. Вот как принимать решения:

  • Если устройство должно быть обнаружено мгновенно (например, умная кнопка двери, которая должна включить свет при нажатии) — используй адвертизинг 1 сек, соединение 100 мс, но не спи между нажатиями. Это — не экономия, а надёжность. Батарея продержится 6–12 месяцев.
  • Если устройство передаёт данные раз в 5–15 минут (температура, влажность, давление) — адвертизинг 5–15 сек, соединение 200–500 мс, сон 15 минут. Это — идеальный баланс. Батарея — 1–5 лет.
  • Если устройство передаёт данные раз в час или реже (счётчик воды, датчик в гараже) — адвертизинг 30 сек, соединение 1–2 сек, сон 1 час. Батарея — 3–10 лет. Можно даже на литиевой батарее 1000 мА·ч.
  • Если устройство должно быть всегда доступно (умный браслет, гарнитура) — ты не можешь использовать сон. Тогда фокус на минимизации трафика: передавай только изменения, не отправляй лишние данные, отключай BLE, когда не используешь.

Как проверить, что ты всё сделал правильно

Практический тест: включи устройство, подключи мультиметр к батарее в режиме измерения тока (10 мА диапазон). Запусти запись тока на 10 минут.

Если ты видишь:

  • Короткие импульсы тока (15–20 мА) раз в 5 секунд — это адвертизинг. Нормально.
  • После подключения — импульсы раз в 200–500 мс — это соединение. Нормально.
  • Между импульсами — ток падает до 5–10 мкА — это глубокий сон. Отлично.

Если ты видишь:

  • Постоянный ток 1–5 мА — радио не выключено. Ошибка.
  • Ток 50–100 мА — ты забыл выключить датчик или LED.
  • Ток 2–3 мА между импульсами — ты используешь light sleep, а не deep sleep. Плохо.

Если ток в сне — меньше 5 мкА, а импульсы передачи — короткие и редкие — ты на правильном пути.

Что делать дальше

Ты не должен просто «настроить параметры и забыть». Ты должен тестировать. В реальных условиях. В холоде. В жаре. В металлической коробке. С разными телефонами.

Возьми 3 одинаковых устройства. Настрой каждое по-разному:

  • Первое — по умолчанию (100 мс адвертизинг, 30 мс соединение, без сна).
  • Второе — с оптимизированными параметрами (5 сек, 500 мс, сон 10 мин).
  • Третье — с агрессивной экономией (30 сек, 2 сек, сон 1 час).

Помести их в одинаковые условия. Запусти на 30 дней. Запиши, какая батарея села первой. Это — твой лучший гид.

Помните: оптимизация энергопотребления — это не про «сделать быстрее», а про «сделать меньше». Меньше передач. Меньше времени в работе. Больше времени в сне. Это — философия BLE-дизайна.

Если ты сделаешь это правильно — твоя батарея прослужит в 10–50 раз дольше, чем у конкурентов. И ты не будешь получать звонки от клиентов: «Почему у меня устройство раз в 2 месяца садится?»

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

Radio-Blog.ru