Ir al contenido principal

Hardware

Brazo robótico ESP8266 de código abierto con firmware Rust

El firmware abierto funciona en un brazo ESP8266 de cinco servos y aporta el modelo articular del simulador. El simulador no depende de una conexión serie, Bluetooth ni de red con ese brazo.

Diseño

Rust gobierna la lógica; C++ es una biblioteca de hardware

La dependencia va en una sola dirección. Solo un crate declara funciones de hardware importadas y la frontera transporta bytes, no cadenas de Arduino, objetos C++, rutas, JSON ni estado de la aplicación.

Rust se encarga de

  • Política de arranque y ejecutor cooperativo
  • Enrutamiento y protocolo Hotaru
  • Análisis y respuestas HTTP
  • Validación y estado de los servos

C++ se encarga de

Solo las operaciones que requieren símbolos de Arduino o ESP8266:

  • Relojes, enmascarado de interrupciones, watchdog, reinicio, heap, aleatoriedad y puerto serie
  • Modos de punto de acceso y estación Wi-Fi, y manejadores TCP y UDP sin procesar
  • Manejadores de DNS cautivo y SPIFFS
  • GPIO, PWM, escritura de pulsos de servo y escritura OTA sin procesar

Native WiFiClient, File, and Servo Los objetos permanecen tras manejadores enteros en el lado de C++. El firmware Arduino integrado no tiene una función Rust fn main(), , así que la pasarela exporta un único punto de entrada C que no retorna y que setup() calls once.

Espacio de trabajo

Los crates

hcr-gateway
La aplicación: política de arranque, enrutamiento y el único punto de entrada C que Arduino llama una vez.
hcr-http
Análisis y respuestas HTTP en no_std, además del protocolo Hotaru.
hcr-io-esp8266
Transporte Hotaru sobre el TCP de la plataforma.
hcr-rt-esp8266
Entorno de ejecución, tiempo y secciones críticas.
hcr-platform
Traits y valores de plataforma compartidos en todo el espacio de trabajo.
ffi/hcr-ffi
El único crate que declara funciones de hardware importadas y ofrece adaptadores seguros sobre ellas.

Protocolo

La API actual del dispositivo y el contrato hcr.v1

El servicio Rust usa el sobre aditivo hcr.v1 con JSON y CBOR. La pasarela ESP8266 actual ofrece una API HTTP/JSON acotada; MQTT aún no está implementado.

Vinculación de transporte y codificación por cliente
ClienteTransporteCodificación
Aplicación web (actual)HTTPS request–responseJSON
Contrato del servicio RustVinculación HTTP hcr.v1JSON y CBOR
Pasarela Rust ESP8266 (actual)HTTP en el punto de acceso del dispositivoJSON
Ruta MQTT del dispositivo (prevista)MQTT over TCP/TLSCBOR

Correlación en el sobre

La correlación no se guarda en propiedades de MQTT 5. Los dispositivos pueden negociar 3.1.1 y el enlace HTTP carece de propiedades. Un único mecanismo válido en todas partes es más fiable que dos mecanismos parciales.

Las marcas de tiempo no definen el orden

Los relojes de los dispositivos no son fiables; el ESP8266 solo llega a NTP cuando el router está activo. El orden procede del FIFO de cada tema, nunca del reloj del emisor.

Versiones menores solo aditivas

Se pueden añadir campos opcionales, tipos y temas. Si el receptor encuentra algo desconocido, lo registra y descarta en vez de fallar.