
Электронные наборы LEGO давно переросли роль простых конструкторов. Современная линейка Powered Up представляет собой модульную робототехническую экосистему: интеллектуальные хабы, моторы, датчики и светодиоды, управляемые через Bluetooth и программируемые — ранее подобное было доступно лишь в Mindstorms и Education.
Но как взять «сырые» данные с этих умных блоков и использовать их в сторонних приложениях?
Стандартное приложение LEGO Powered Up предлагает визуальный редактор на основе блоков и виртуальные пульты. Оно позволяет объединять до четырёх хабов, выстраивать логику их работы и собирать сложные алгоритмы — от автономных роботов до беспилотных грузовиков и автоматизированных мини-железных дорог.
Однако у официального ПО есть два серьёзных ограничения:
1. Закрытый код: нет прямого доступа к телеметрии в реальном времени — нельзя выводить данные на ПК, строить графики или сохранять сигналы.
2. Постоянная привязка к смартфону или планшету: hub должен быть включён в приложение, что серьёзно ограничивает автономность.
К счастью, экосистема Powered Up построена на открытом BLE-протоколе, а LEGO опубликовала спецификацию LWP3 (LEGO Wireless Protocol v3) (lego.github.io/lego-ble-wireless-protocol-docs/), что позволяет сторонним разработчикам создавать свои решения.
Одним из ярких проектов стала прошивка и платформа PyBricks (pybricks.com), открывающие весь потенциал Powered Up. Вместо родной ОС хаб работает как автономный микроконтроллер с интерпретатором MicroPython и веб-IDE прямо в браузере.

Мы решили продемонстрировать, как организовать передачу данных с LEGO-хаба на ПК и использовать их для анализа.
Наш эксперимент:
- Перепрошили Technic Hub альтернативной прошивкой PyBricks.
- Собрали простую U-образную конструкцию с обратной связью.
- Написали скрипт на MicroPython, который регулярно выдаёт угол наклона.
- С помощью Python-библиотеки Bleak подключились к хабу по BLE.
- Считали и визуализировали данные в реальном времени.
В качестве датчика мы использовали наклон на ось из набора WeDo 2.0, закрепив его на «качели», приводимые в движение мотором. Датчик измеряет тангаж в диапазоне от –45° до +45°.

Далее — код, загружаемый в перепрошитый хаб. Он непрерывно считывает угол, вычисляет ошибку и управляет мотором по пропорциональному закону.
from pybricks.hubs import TechnicHub
from pybricks.pupdevices import Motor, TiltSensor
from pybricks.parameters import Port
from pybricks.tools import wait
hub = TechnicHub()
motor = Motor(Port.A)
tilt = TiltSensor(Port.B)
target = 0
Kp = 3
motor.run(30)
wait(1000)
while True:
angle = tilt.tilt()[0] - 2
error = angle - target
speed = max(min(Kp * error, 75), -75)
motor.run(speed)
print(angle)
if abs(angle) == target:
stable = sum((tilt.tilt()[0] - 2) for _ in range(10))
if stable == target * 10:
print("УСТОЙЧИВО, циклов:", _)
break
wait(50)
Команда motor.run(speed) задаёт скорость вращения в градусах в секунду. Небольшие скорости ощущаются рывками, но для демонстрации это не критично.

После отладки мы провели серию испытаний с разными значениями Kp, а в коде оставили только один print() для передачи угла на ПК.
Для приёма и визуализации телеметрии на компьютере использовали библиотеку Bleak. Алгоритм простой:
- Сканируем BLE-устройства (await BleakScanner.discover()).
- Находим хаб по имени.
- Нажатием кнопки стартуем код PyBricks на устройстве.
- Подписываемся на виртуальный UART-канал через BLE-уведомления.
- Декодируем строки, фильтруем числа и отправляем в очередь для графика.
Подробнее о PC-части
Подключившись, запускаем client.start_notify(CHAR_UUID, callback), где callback декодирует и очищает входящую строку, оставляя только число. Величина вместе с меткой времени помещается в очередь (queue.put((t, value))), а графический процесс через matplotlib в интерактивном режиме выводит живой график.

Можно выводить несколько значений через запятую, а на PC-стороне просто разбивать строку и преобразовывать компоненты в float.

Самая эффективная и быстрая стабилизация достигалась при Kₚ = 2. Более высокие коэффициенты приводили к выраженному перерегулированию и увеличению времени сходимости.
Таким образом, мы провели мини-лабораторную работу по автоматическому управлению, получив данные для анализа — от построения фазового портрета до бифуркационных диаграмм.
LEGO с прошивкой PyBricks и библиотекой Bleak превращается в полноценный исследовательский инструмент. При этом не нужны дорогие комплекты Education — достаточно доступных Technic или City Hub. Мы опробовали и Technic Hub Control+, и более простой City Hub (88009) — оба отлично работают.
Надеемся, эти материалы подскажут новые идеи для экспериментов с привычным конструктором.



