Перейти к основному содержанию

Оборудование

Манипулятор ESP8266 с открытым исходным кодом и прошивкой Rust

Открытая прошивка работает на манипуляторе ESP8266 с пятью сервоприводами и задаёт модель суставов симулятора. Сам симулятор не зависит от последовательного порта, Bluetooth или сети физического робота.

Архитектура

Политика принадлежит Rust; C++ служит аппаратной библиотекой

Зависимость направлена только в одну сторону. Импортированные аппаратные функции объявляет один crate, а через границу передаются байты, но не строки Arduino, объекты C++, маршруты, JSON или состояние приложения.

За что отвечает Rust

  • Политика запуска и кооперативный исполнитель
  • Маршрутизация и протокол Hotaru
  • Разбор HTTP и ответы
  • Проверка и состояние сервоприводов

C++ отвечает за

Только операции, которым нужны символы Arduino или ESP8266:

  • Тактовые часы, маскирование прерываний, сторожевой таймер, перезапуск, куча, случайные числа, последовательный порт
  • Режимы точки доступа и станции Wi-Fi, низкоуровневые дескрипторы TCP и UDP
  • Дескрипторы captive DNS и SPIFFS
  • GPIO, PWM, запись импульсов сервопривода, низкоуровневая запись OTA

Native WiFiClient, File, and Servo Объекты остаются за целочисленными дескрипторами на стороне C++. Во встроенной прошивке Arduino нет обычной функции Rust fn main(), , поэтому шлюз экспортирует единственную невозвращающую точку входа C, которую setup() calls once.

Рабочая область

Крейты

hcr-gateway
Приложение: политика запуска, маршрутизация и единственная точка входа C, которую Arduino вызывает один раз.
hcr-http
Разбор HTTP и ответы в no_std, а также протокол Hotaru.
hcr-io-esp8266
Передача Hotaru поверх TCP платформы.
hcr-rt-esp8266
Среда выполнения, время и критические секции.
hcr-platform
Платформенные трейты и значения, общие для всей рабочей области.
ffi/hcr-ffi
Единственный crate, объявляющий импортированные аппаратные функции и предоставляющий безопасные адаптеры над ними.

Протокол

Текущий API устройства и контракт сервиса hcr.v1

Сервис Rust использует расширяемый конверт hcr.v1 с JSON и CBOR. Текущий шлюз ESP8266 предоставляет ограниченный HTTP/JSON API сервоприводов; MQTT пока не реализован.

Привязка транспорта и кодирование по клиентам
КлиентТранспортКодирование
Браузерное приложение (сейчас)HTTPS request–responseJSON
Контракт сервиса RustHTTP-привязка hcr.v1JSON и CBOR
Шлюз ESP8266 на Rust (сейчас)HTTP в точке доступа устройстваJSON
MQTT-путь устройства (планируется)MQTT over TCP/TLSCBOR

Корреляция внутри конверта

Связь сообщений не хранится в свойствах MQTT 5. Устройства могут согласовать версию 3.1.1, а в HTTP-привязке свойств нет. Один универсальный механизм надёжнее двух частичных.

Метки времени не задают порядок

Часы устройств ненадёжны; ESP8266 получает доступ к NTP только при работающем маршрутизаторе. Порядок задаётся FIFO каждого топика, а не часами отправителя.

Минорные версии только расширяют протокол

Можно добавлять необязательные поля, виды сообщений и топики. Получатель записывает и отбрасывает незнакомое содержимое, а не завершает работу с ошибкой.