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.
| Cliente | Transporte | Codificación |
|---|---|---|
| Aplicación web (actual) | HTTPS request–response | JSON |
| Contrato del servicio Rust | Vinculación HTTP hcr.v1 | JSON y CBOR |
| Pasarela Rust ESP8266 (actual) | HTTP en el punto de acceso del dispositivo | JSON |
| Ruta MQTT del dispositivo (prevista) | MQTT over TCP/TLS | CBOR |
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.