Bluetooth на Raspberry Pi Pico W: чтение датчиков через BLE
Краткое определение терминов
- 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 или 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 в накопитель. Во время прошивки индикатор на плате будет быстро мигать; после записи плата автоматически перезагрузится.
При желании прошивку можно установить через Thonny (см. ниже).
Настройка Thonny и выбор интерпретатора
- Подключите Pico, удерживая BOOTSEL, если требуется.
- Запустите Thonny.
- В меню выберите Tools > Options.
- Во вкладке Interpreter выберите MicroPython (Raspberry Pi Pico).
- Порт — Try to detect automatically. Нажмите ссылку установки прошивки, Thonny предложит последнюю версию MicroPython для вашего Pico.
Сохранение необходимых модулей Bluetooth в MicroPython
Чтобы работать с BLE, поместите на плату два вспомогательных модуля:
- ble_advertising.py — помогает формировать рекламные пакеты BLE.
- ble_simple_peripheral.py — пример реализации простейшей периферийной роли (advertiser + UART‑псевдоинтерфейс).
Исходники можно взять из репозитория проекта (ссылка в оригинале). В Thonny создайте новый файл, вставьте содержимое и сохраните как ble_advertising.py на Raspberry Pi Pico (File > Save as > Raspberry Pi Pico). Повторите для ble_simple_peripheral.py.
Пример: чтение температуры и передача по 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 и каждая секунда будут приходить строки с показаниями.
Если вместо 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‑шлюз, если нужен централизованный сбор телеметрии.
Мини‑методология: быстрый план развертывания
- Скачайте MicroPython UF2 с поддержкой BLE.
- Включите Pico в режим BOOTSEL и скопируйте UF2.
- Откройте Thonny, выставьте MicroPython-интерпретатор.
- Скопируйте ble_advertising.py и ble_simple_peripheral.py на плату.
- Разместите main.py с логикой чтения/передачи.
- Тестируйте через мобильное приложение.
- Добавьте логирование и обработку ошибок.
Безопасность и приватность
- 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: если в проекте передаются персональные данные, продумайте шифрование и соответствие локальным нормам приватности.
Похожие материалы
RDP: полный гид по настройке и безопасности
Android как клавиатура и трекпад для Windows
Советы и приёмы для работы с PDF
Calibration в Lightroom Classic: как и когда использовать
Отключить Siri Suggestions на iPhone