Создание бессерверного дистанционно управляемого робота Lego с помощью Twilio Sync и Runtime

Автор: | 07.08.2026

Мир подключенных к Интернету устройств стремительно растет, и уже миллиарды «вещей» находятся в сети. Сегодня мы пропустим умные термостаты и холодильники и сразу перейдем к программируемым дроидам.

*В этом проекте мы используем Twilio Sync для IoT, который сейчас находится на стадии Developer Preview. **Зарегистрируйтесь для участия в предварительном доступе**, и команда подключит вас.*

Чтобы сделать проект увлекательным, многоразовым и расширяемым, мы будем использовать набор Lego Mindstorms EV3 — популярную платформу для создания базовых роботов. Мы создадим робота Lego, управляемого через Интернет, с веб-панелью реального времени и даже продемонстрируем сенсорное управление.

Основные компоненты:

— Набор Lego Mindstorms EV3

— Совместимый WiFi USB-адаптер (из этого списка; мы использовали Edimax EW-7811UN)

— MicroSD карта объемом 2 ГБ (или больше) для установки образа EV3dev

— Запасные батарейки AA

Следуйте онлайн-инструкциям Lego, чтобы собрать дроида EV3D4. После завершения подключите WiFi USB-адаптер для обеспечения прямого подключения к Интернету.

Когда все будет собрано, у вас должно получиться следующее:

**Выходной порт A:** малый мотор для поворота головы

**Выходной порт B:** правый большой мотор для движения и управления дроидом

**Выходной порт C:** левый большой мотор

**Входной порт 1:** датчик переключателя

**Входной порт 3:** датчик цвета для распознавания объектов

**Входной порт 4:** ультразвуковой датчик расстояния для измерения дистанции

Мы будем использовать EV3dev для развертывания пользовательских приложений на вашем дроиде. *EV3dev* — это операционная система на базе Debian Linux, которая превращает блоки Mindstorms в гибкую платформу для приложений. Не беспокойтесь, оригинальная прошивка EV3 останется нетронутой. Вы сможете вернуться к обычному режиму работы в любой момент, просто удалив загрузочную microSD-карту с образом EV3dev.

Следуйте пошаговым инструкциям на сайте EV3dev, чтобы загрузить и установить образ ОС на microSD-карту. Загрузите систему в первый раз и подключитесь к локальной сети WiFi через меню Brickman «Wireless and Networks > Wi-Fi».

Нашим первым приложением станет базовый скрипт на Python, который подключается к Twilio Sync для IoT, управляет моторами и считывает данные с датчиков с помощью привязок Python для EV3.

Сначала клонируйте наш скрипт *client.py* с GitHub на свой компьютер. На вашем рабочем устройстве (не на дроиде) выполните следующую команду, чтобы получить код и скопировать его на робота:

Затем установите зависимости. Большинство необходимых компонентов уже установлены, но нам понадобится компактный MQTT-клиент для подключения к облаку Twilio. Подключившись к ev3dev, выполните следующую команду:

EV3 — не самая быстрая Linux-платформа, так как работает на довольно маломощном микроконтроллере. Дайте ей время завершить установку и выпейте кофе или чай в ожидании. Хорошая новость в том, что это нужно сделать только один раз.

Чтобы подключить дроида к сети и сделать его работоспособным, нам понадобятся несколько инструментов и сервисов Twilio.

— Сначала вам понадобится учетная запись Twilio. Перейдите по этой ссылке, чтобы создать ее, если вы еще этого не сделали, или войдите в Twilio Console.

— Для синхронизации данных вы будете использовать Twilio Sync:

— Объект Sync Document для управления состоянием моторов дроида.

— Sync Message Stream для получения обновлений с датчиков дроида.

— Вместо сервера вы будете использовать Twilio Runtime:

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

Перейдите в консоль Sync для IoT и нажмите «Visit the Device Manager». Для вас автоматически создан пустой флот под названием «Default Fleet».

— В разделе «Default Fleet» нажмите кнопку «Create a Device».

— Укажите понятное имя, например «EV3D4 droid», и убедитесь, что установлен флажок «Enabled».

— Нажмите «Create», чтобы завершить.

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

Подключившись к ev3dev, перейдите в домашнюю директорию, где находится скрипт *client.py*, и сгенерируйте новый закрытый ключ. Сохраните его в файл *ev3d4.key.pem*. Храните этот ключ в секрете — он никогда не должен покидать устройство.

Затем, находясь в той же директории, создайте самоподписанный сертификат на основе этого ключа и сохраните его в файл *ev3d4.cert.pem*. При запросе атрибутов сертификата введите любые данные — это не имеет значения для управления устройством.

Эта часть сертификата является публичной, и мы скопируем ее в Device Manager Sync для IoT. Вернитесь к устройству «EV3D4 droid» в консоли Twilio.

— В меню «EV3D4 droid» выберите «Certificates» и нажмите «Create a Certificate».

— Укажите имя (например, «Droid certificate») в поле Friendly name.

— Оставьте Device SID без изменений.

— Нажмите «Create».

Наше приложение-контроллер будет браузерным, обеспечивая двустороннюю связь между оператором и удаленным дроидом. Мы будем использовать несколько объектов Twilio Sync для передачи обновлений состояния в обоих направлениях.

— Sync *Document* с именем «*motors*». Как только стик контроллера начинает двигаться, моторы приводятся в движение вперед или назад, а их желаемая скорость сохраняется в JSON-документе. Вот пример снимка состояния моторов:

— Sync *Message Stream* с именем «*sensors*». После запуска приложение Python на ev3dev начнет передавать показания инфракрасного, сенсорного и цветового датчиков. Поскольку эти отчеты периодические и временные по своей природе, мы не хотим, чтобы они сохранялись. Вот пример JSON-сообщения, отправляемого потоком:

JavaScript-приложение контроллера упаковано в один HTML-файл в нашем репозитории GitHub. Оно использует SDK twilio-sync.js для выполнения всей низкоуровневой работы по репликации состояния и обмену сообщениями через WebSocket, чтобы приложение оставалось простым и легким.

Мы также сделаем приложение-контроллер *бессерверным* и запустим его с помощью Twilio Assets и Functions. Сначала загрузим HTML/JS-код и сделаем его активом:

— Перейдите в консоль Runtime Assets и нажмите «Add an Asset».

— Выберите файл *twilio-mindstorms/controller/index.html* в проекте.

— Вы увидите несколько уведомлений, последнее из которых сообщит: «Your Asset has successfully been deployed».

— Запомните ваш персональный URL актива, он должен выглядеть примерно так: https://amazing-owl-4242.twil.io/

Нам нужно еще кое-что, чтобы сделать наш контроллер дроида полностью функциональным. Twilio аутентифицирует ваше браузерное приложение, работающее на произвольном устройстве, с помощью JWT-токена доступа и авторизует доступ к ресурсам Sync с помощью грантов. Мы создадим генератор токенов Sync и разместим его как функцию.

— Перейдите в консоль Runtime Functions и нажмите «Create a Function».

— Выберите шаблон «Blank» и нажмите «Create».

— Имя функции: введите «Sync Token Generator».

— Путь: введите «/token».

— Скопируйте и вставьте содержимое файла *twilio-mindstorms/token-generator/token.js*.

— Нажмите «Save» и дождитесь уведомлений. Последнее должно сообщить: «Your Function has successfully been deployed».

Чтобы генератор токенов мог применять действительную подпись, нам также понадобится *ключ подписи API*.

— Перейдите в консоль Sync Tools и нажмите «Create new API Key».

— Friendly name: введите «Droid controller key».

— Тип ключа: оставьте «Standard».

— Запомните полученные поля SID и Secret. Они понадобятся нам для генератора токенов.

— Перейдите в консоль Functions Configuration.

— В разделе «Environment Variables» нажмите кнопку «(+)» и установите **TWILIO_API_KEY** в качестве имени. В качестве значения вставьте SID ключа API, который мы только что сгенерировали.

— Добавьте еще одну переменную с именем **TWILIO_API_SECRET** и вставьте секрет ключа API в качестве значения.

— Нажмите «Save» и дождитесь подтверждающего уведомления.

Мы почти у цели — давайте соберем все компоненты вместе и проведем окончательное испытание.

— На вашем рабочем компьютере откройте URL актива в браузере. Это автоматически создаст список Sync и поток сообщений, которые будут использоваться для взаимодействия с дроидом.

— Подключившись к ev3dev, запустите клиентское приложение.

— Теперь нажмите и удерживайте область «Control stick pad», чтобы управлять дроидом. Следите за датчиком расстояния, чтобы изменить курс, если впереди появится препятствие.

Это также работает с тачпадом или сенсорным экраном! Откройте приложение на телефоне и наблюдайте за изменением состояния моторов и датчиков в реальном времени во всех приложениях.

Хотя этот проект был посвящен созданию дроида, вы сделали гораздо больше. Вы создали веб-панель и решили общие проблемы дистанционного управления и синхронизации состояния. Теперь вы можете расширить его еще дальше. Например, рассмотрите следующие улучшения:

— Восстановите отсутствующий датчик цвета в интерфейсе контроллера и начните отслеживать его в реальном времени.

— Добавьте второй обработчик «стика» на панель управления и поворачивайте голову дроида с помощью мультитач.

— Прикрепите специальный триггер к сенсорному датчику и подключите его к другой функции с помощью вебхуков; заставьте его отправлять SMS или звонить на телефон.

— Разверните флот дроидов и создайте панель для их мониторинга в реальном времени.

Многие IoT-проекты сталкиваются с одними и теми же базовыми проблемами. Им необходимо обеспечить надежный, безопасный и низколатентный обмен информацией между разнородными конечными точками: встраиваемыми устройствами, серверными бэкендами, клиентами первого лица, такими как браузеры и мобильные телефоны. Twilio упрощает разработку ваших IoT-приложений, предоставляя набор базовых строительных блоков, похожих на Lego. Комбинируя эти блоки и API, вы можете снизить затраты и быстрее перейти от *концепции* к *прототипу* и *готовому приложению*.

Нам не терпится увидеть, что вы создадите дальше!

*Андрей Бирюков — технический руководитель в Twilio, живет и работает в Таллине, Эстония. Будучи давним энтузиастом аппаратного обеспечения и системного программного обеспечения, Андрей ранее работал инженером и руководителем разработки в Skype и Microsoft. Связаться с ним можно по электронной почте: andrei@twilio.com.*