Гид по технологиям

Bluetooth на Raspberry Pi Pico W: чтение датчиков через BLE

7 min read IoT Обновлено 22 Dec 2025
Bluetooth на Raspberry Pi Pico W — чтение датчиков
Bluetooth на Raspberry Pi Pico W — чтение датчиков

Краткое определение терминов

  • BLE: Bluetooth Low Energy — профиль Bluetooth для низкоэнергопотребляющей передачи данных.
  • UF2: формат прошивки для Raspberry Pi Pico, который записывается как USB-накопитель.
  • CYW43439: радиочип Infineon, установлены в Pico W/WH, поддерживает Wi‑Fi и Bluetooth 5.2.

Почему это важно

Bluetooth на Pico W открывает простую и энергоэффективную передачу данных от датчиков к смартфонам, шлюзам и другим микроконтроллерам — удобно для прототипов и конечных IoT-решений. Часто достаточно лишь обновить прошивку и поместить пару модулей MicroPython на плату.

Аппаратная сводка

Raspberry Pi Pico W/WH — это микроконтроллерная плата с той же формой и распиновкой, что и оригинальная Pico, но с добавленным модулем беспроводной связи. Плата использует радиочип Infineon CYW43439, который поддерживает 802.11n Wi‑Fi и Bluetooth 5.2.

Raspberry Pi Pico W with Bluetooth logo

Raspberry Pi Pico W's WiFi chip with antenna trace

Что понадобится

  • Raspberry Pi Pico W или WH (WH имеет пины для заголовков).
  • USB‑кабель для подключения к компьютеру.
  • Компьютер с Windows/macOS/Linux.
  • Thonny IDE (или uPyCraft/ampy/rshell).
  • MicroPython UF2 с поддержкой Bluetooth (скачать с официальной страницы MicroPython для Pico).

Установка Pico C/C++ SDK (кратко)

Если вы планируете разрабатывать на C/C++, установите набор инструментов: ARM GCC, CMake, Git, Python 3.9+, и, при желании, Visual Studio (Build Tools). Для этого руководства достаточно MicroPython, но знание SDK полезно для расширённых проектов и отладки низкоуровневого BLE.

Установка MicroPython и прошивка UF2

Вход в режим загрузчика

Есть два способа попасть в режим загрузчика (bootloader):

  • В MicroPython REPL выполнить machine.bootloader().
  • Нажать и удерживать кнопку BOOTSEL, подключая плату к USB.

Плата появится как USB‑накопитель. Скопируйте UF2‑файл MicroPython в накопитель. Во время прошивки индикатор на плате будет быстро мигать; после записи плата автоматически перезагрузится.

File Explorer showing raspberry pi pico connected

При желании прошивку можно установить через Thonny (см. ниже).

Настройка Thonny и выбор интерпретатора

  1. Подключите Pico, удерживая BOOTSEL, если требуется.
  2. Запустите Thonny.
  3. В меню выберите Tools > Options.
  4. Во вкладке Interpreter выберите MicroPython (Raspberry Pi Pico).
  5. Порт — Try to detect automatically. Нажмите ссылку установки прошивки, Thonny предложит последнюю версию MicroPython для вашего Pico.

Thonny IDE screenshot

Thonny IDE Tools Section

Thonny IDE interpreter tab

Сохранение необходимых модулей Bluetooth в MicroPython

Чтобы работать с BLE, поместите на плату два вспомогательных модуля:

  1. ble_advertising.py — помогает формировать рекламные пакеты BLE.
  2. ble_simple_peripheral.py — пример реализации простейшей периферийной роли (advertiser + UART‑псевдоинтерфейс).

Исходники можно взять из репозитория проекта (ссылка в оригинале). В Thonny создайте новый файл, вставьте содержимое и сохраните как ble_advertising.py на Raspberry Pi Pico (File > Save as > Raspberry Pi Pico). Повторите для ble_simple_peripheral.py.

MUO GitHub repo

MUO GitHub Repo for Bluetooth Support on Rapsberry Pi Pico W and WH

Пример: чтение температуры и передача по BLE

Ниже — рабочий пример на MicroPython. Он считывает внутренний АЦП (используется ADC(4) у Pico для внутреннего датчика температуры/напряжения) и отправляет строку через BLE каждый 1 с, если соединение установлено.

from machine import ADC
import time
import bluetooth
from ble_simple_peripheral import BLESimplePeripheral

# Создаём BLE-объект
ble = bluetooth.BLE()
sp = BLESimplePeripheral(ble)

# Встроенный АЦП (канал 4) для внутреннего датчика
adc = ADC(4)

while True:
    try:
        if sp.is_connected():
            # Считываем 16‑битное значение и преобразуем в напряжение
            raw = adc.read_u16()
            voltage = raw * 3.3 / 65535
            # Встроенный датчик температуры требует калибровки; здесь передаём напряжение
            temperature_data = "{:.3f}".format(voltage)
            sp.send(temperature_data.encode())
    except Exception as e:
        # Ошибки не должны прерывать основной цикл
        print("BLE send error:", e)
    time.sleep(1)

Сохраните этот файл как main.py на плате — при следующем запуске он будет автоматически выполняться.

Настройка Android‑приложения для приёма

Установите на телефон приложение Serial Bluetooth Terminal из Google Play. Включите Bluetooth и в приложении откройте вкладку Devices, затем Bluetooth LE и нажмите SCAN. В списке появится устройство с именем mpy-uart — подключитесь к нему. В терминале появится статус Connected и каждая секунда будут приходить строки с показаниями.

Serial Bluetooth Terminal App on Playstore

Serial Bluetooth Terminal Devices tab

Serial Bluetooth BLE tab

Serial Bluetooth Terminal BLE client list

Serial Bluetooth Terminal Receiving Sensor Data

Если вместо mpy-uart вы не видите устройство, убедитесь, что модуль ble_simple_peripheral действительно выполняется и что плата не в состоянии сна.

Когда это может не работать (типичные причины)

  • Неправильная версия MicroPython без поддержки BLE — скачайте релиз с поддержкой Bluetooth.
  • Модули не сохранены на плате или ошибочный путь/имя файлов.
  • Устройство уже подключено по Wi‑Fi и у вас отсутствует свободное время/ресурс для BLE (редкие случаи конфликта стека).
  • Низкая мощность питания USB или плохой кабель — плата может перезагружаться.

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

  • Убедитесь в наличии последней MicroPython UF2 с BLE.
  • Перезапустите Pico и Thonny.
  • В Thonny откройте Shell и проверьте вывод при запуске main.py.
  • Попробуйте подключиться к другому телефону/компьютеру с BLE‑сканером.
  • Проверьте, что файл main.py действительно выполняется (print сообщения в Shell).

Альтернативные подходы

  • Использовать C/C++ SDK и NimBLE или другой стек для более тонкой настройки BLE (более высокая сложность, лучшая производительность).
  • Применить внешний Bluetooth‑модуль (например, модуль на базе nRF52840) для специальных профилей или длинного времени автономной работы.
  • Передавать данные через Wi‑Fi на MQTT‑шлюз, если нужен централизованный сбор телеметрии.

Мини‑методология: быстрый план развертывания

  1. Скачайте MicroPython UF2 с поддержкой BLE.
  2. Включите Pico в режим BOOTSEL и скопируйте UF2.
  3. Откройте Thonny, выставьте MicroPython-интерпретатор.
  4. Скопируйте ble_advertising.py и ble_simple_peripheral.py на плату.
  5. Разместите main.py с логикой чтения/передачи.
  6. Тестируйте через мобильное приложение.
  7. Добавьте логирование и обработку ошибок.

Безопасность и приватность

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

Проверка приёмки и тестовые случаи

Критерии приёмки:

  • main.py запускается автоматически и начинается реклама BLE.
  • Устройство обнаруживается приложением как mpy-uart.
  • Значения появляются в терминале не реже, чем раз в 2 с.

Тестовые сценарии:

  • Холодный старт: подключение питания и автоматический запуск main.py.
  • Повторное подключение: отключение Bluetooth на телефоне и повторное подключение.
  • Ошибка передачи: имитация исключения в sp.send() и проверка устойчивости цикла.

Совместимость и миграция

  • Pico WH и Pico W используют тот же радиочип и программную основу — модули и примеры одинаковы для обоих.
  • При миграции с оригинального Pico (без W) необходим внешний радиомодуль или переход на Pico W/WH.

Чеклист для ролей

Maker (энтузиаст):

  • Нужен рабочий кабель и Thonny.
  • Скопировать UF2 и модули, вставить main.py, тестировать с телефоном.

Developer (инженер):

  • Установить CI для прошивки, версионировать main.py, покрыть обработку ошибок.
  • Продумать метод обновления OTA (через USB, через файловый менеджер, через свой загрузчик).

Ops (развёртывание):

  • План резервного восстановления (BOOTSSEL + UF2).
  • Мониторинг стабильности питания и логов.

Шаблон диагностики (короткая таблица)

  • Плата не видна как USB‑накопитель: проверьте BOOTSEL и кабель.
  • Прошивка не устанавливается: скачайте UF2 заново и попробуйте другой порт.
  • Нет BLE в списке: проверьте версию MicroPython и наличие модулей на плате.

Примеры альтернативных приложений и инструментов

  • nRF Connect — мощный BLE‑сканер (iOS/Android) для диагностики GATT.
  • BLE Peripheral Simulator — для тестирования центральной роли.
  • Использование ESP‑плат для Wi‑Fi + BLE (если нужен более мощный контроллер).

Decision flow (Mermaid)

flowchart TD
  A[Начать: есть Pico W?] -->|Да| B{Прошивка MicroPython с BLE установлена?}
  A -->|Нет| Z[Купить Pico W или добавить BLE-модуль]
  B -->|Да| C[Скопировать модули ble_*.py на плату]
  B -->|Нет| D[Скачать UF2 и прошить через BOOTSEL]
  D --> C
  C --> E[Разместить main.py]
  E --> F{Устройство видно в телефоне как mpy-uart?}
  F -->|Да| G[Готово: принимать данные]
  F -->|Нет| H[Устранение неполадок: проверить питание, версии, перезапуск]

Короткий глоссарий

  • BLE: Bluetooth Low Energy.
  • UF2: прошивочный файл для Pico.
  • REPL: Read-Eval-Print Loop — интерактивная консоль Python.
  • GATT: профиль и набор сервисов/характеристик BLE.

Часто задаваемые вопросы

Как понять, что MicroPython поддерживает BLE?

В релизных заметках MicroPython для Pico указываются поддерживаемые возможности — ищите упоминание Bluetooth/BLE и версию прошивки.

Можно ли использовать внешний датчик вместо внутреннего ADC?

Да. Подключите датчик к любому доступному GPIO/ADC и считывайте значения так же, как и встроенный ADC.

Нужно ли явно выключать рекламирование (advertising)?

В простых сценариях это не обязательно, но для экономии энергии и безопасности рекомендуется управлять рекламой программно.

Итог и дальнейшие шаги

Bluetooth добавляет гибкости в работу с Pico W: вы можете быстро прототипировать беспроводные датчики, заменять USB‑кабель мобильным интерфейсом и интегрировать данные в приложения. Следующие шаги: добавить аппаратную калибровку датчика, внедрить шифрование приложения и подготовить OTA‑механизм для массовых развёртываний.

Important: если в проекте передаются персональные данные, продумайте шифрование и соответствие локальным нормам приватности.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

RDP: полный гид по настройке и безопасности
Инфраструктура

RDP: полный гид по настройке и безопасности

Android как клавиатура и трекпад для Windows
Гайды

Android как клавиатура и трекпад для Windows

Советы и приёмы для работы с PDF
Документы

Советы и приёмы для работы с PDF

Calibration в Lightroom Classic: как и когда использовать
Фото

Calibration в Lightroom Classic: как и когда использовать

Отключить Siri Suggestions на iPhone
iOS

Отключить Siri Suggestions на iPhone

Рисование таблиц в Microsoft Word — руководство
Office

Рисование таблиц в Microsoft Word — руководство