ZeroClaw en Nucleo-F401RE: Guía paso a paso
Ejecuta ZeroClaw en tu host de Mac o Linux. Conecta un Nucleo-F401RE mediante USB. Controla GPIO (LED, pines) a través de Telegram o CLI.
Obtener información de la placa a través de Telegram (sin necesidad de firmware)
ZeroClaw puede leer la información del chip desde el Nucleo a través de USB sin necesidad de cargar ningún firmware. Envía un mensaje a tu bot de Telegram:
- “¿Qué información de la placa tengo?”
- “Información de la placa”
- “¿Qué hardware está conectado?”
- “Información del chip”
El agente utiliza la herramienta hardware_board_info para devolver el nombre del chip, la arquitectura y el mapa de memoria. Con la función probe, lee datos en tiempo real a través de USB/SWD; de lo contrario, devuelve información estática del datasheet.
Configuración: Usa zeroclaw config set peripherals.boards.0.board nucleo-f401re, transport serial y path <your-serial-port>. Consulta la referencia de Config para ver todos los campos.
Alternativa de CLI:
sh
cargo build --features hardware,probe
zeroclaw hardware info
zeroclaw hardware discover
Qué incluye (sin necesidad de cambios en el código)
ZeroClaw incluye todo lo necesario para Nucleo-F401RE:
| Componente | Ubicación | Propósito |
|---|---|---|
| Firmware | firmware/nucleo/ | Embassy Rust: USART2 (115200), gpio_read, gpio_write |
| Periférico serie | crates/zeroclaw-hardware/src/peripherals/serial.rs | Protocolo JSON sobre serie (igual que Arduino/ESP32) |
| Comando de flash | zeroclaw peripheral flash-nucleo | Compila el firmware y lo flashea mediante probe-rs |
Protocolo: JSON delimitado por saltos de línea. Solicitud: {"id":"1","cmd":"gpio_write","args":{"pin":13,"value":1}}. Respuesta: {"id":"1","ok":true,"result":"done"}.
Requisitos previos
- Placa Nucleo-F401RE
- Cable USB (USB-A a Mini-USB; Nucleo tiene ST-Link integrado)
- Para flashear:
cargo install probe-rs-tools --locked(o utiliza el script de instalación)
Fase 1: Flash del firmware
1.1 Conectar Nucleo
- Conecta el Nucleo a tu Mac/Linux mediante USB.
- La placa aparece como un dispositivo USB (ST-Link). No se necesita un controlador separado en sistemas modernos.
1.2 Flash a través de ZeroClaw
Desde la raíz del repositorio de zeroclaw:
sh
zeroclaw peripheral flash-nucleo
Esto compila firmware/nucleo y ejecuta probe-rs run --chip STM32F401RETx. El firmware se ejecuta inmediatamente después de flashearlo.
1.3 Flash manual (alternativa)
sh
cd firmware/nucleo
cargo build --release --target thumbv7em-none-eabihf
probe-rs run --chip STM32F401RETx target/thumbv7em-none-eabihf/release/nucleo
Fase 2: Buscar puerto serie
- macOS:
/dev/cu.usbmodem*o/dev/tty.usbmodem*(por ejemplo,/dev/cu.usbmodem101) - Linux:
/dev/ttyACM0(o revisadmesgdespués de conectarlo)
USART2 (PA2/PA3) está conectado al puerto COM virtual del ST-Link, por lo que el host ve un único dispositivo serie.
Fase 3: Configurar ZeroClaw
Habilita [peripherals] y añade una entrada [[peripherals.boards]] para la Nucleo (board = "nucleo-f401re", transport = "serial", path = "/dev/cu.usbmodem101", ajústalo a tu puerto serie). Consulta la referencia de configuración para ver todos los campos.
Fase 4: Ejecutar y probar
sh
zeroclaw daemon --host 127.0.0.1 --port 42617
O usa el agente directamente:
sh
zeroclaw agent -a assistant --message "Encender el LED en el pin 13"
El pin 13 = PA5 = LED de usuario (LD2) en Nucleo-F401RE.
Resumen: Comandos
| Paso | Comando |
|---|---|
| 1 | Conectar Nucleo mediante USB |
| 2 | cargo install probe-rs-tools --locked |
| 3 | zeroclaw peripheral flash-nucleo |
| 4 | zeroclaw config set peripherals.boards.0.path <serial-port> (y board, transport si aún no están configurados) |
| 5 | zeroclaw daemon o zeroclaw agent -a assistant -m "Turn on LED" |
Solución de problemas
- flash-nucleo no reconocido: Compila desde el repositorio:
cargo run --features hardware -- peripheral flash-nucleo. El subcomando solo está disponible en la compilación desde el repositorio, no en las instalaciones desde crates.io. - probe-rs no encontrado:
cargo install probe-rs-tools --locked(el crateprobe-rses una biblioteca; la CLI está enprobe-rs-tools) - No se detectó la sonda: Asegúrese de que el Nucleo esté conectado. Pruebe con otro cable/puerto USB.
- Puerto serie no encontrado: En Linux, agregue el usuario a
dialout:sudo usermod -a -G dialout $USER, luego cierre sesión y vuelva a iniciarla. - Comandos GPIO ignorados: Verifique que
pathen la configuración coincida con su puerto serie. Ejecutezeroclaw peripheral listpara verificarlo.