El equipo de desarrollo de Espressif publicó un nuevo componente para el RTOS NuttX: se llama NuttX Web Panel y es una interfaz web self-hosted que corre íntegramente sobre el propio microcontrolador. Combina información del sistema, un terminal NSH en el navegador, un gestor de archivos y la posibilidad de subir y ejecutar scripts Python directamente desde la página, sin volver a compilar firmware.
El punto de partida es un experimento previo publicado en el blog de Espressif en marzo de 2025: correr Python sobre NuttX y controlar hardware con drivers POSIX-compatibles. En aquella prueba subieron un script por Wi-Fi a un ESP32-S3 y cambiaron el color del LED RGB según la carga de CPU, todo sin recompilar. La pregunta que quedó abierta era cómo hacer ese flujo aún más accesible; NuttX Web Panel es la respuesta oficial.
NuttX como plataforma de cómputo
El diferencial que Espressif destaca es la compatibilidad POSIX de NuttX, poco común entre los RTOS. Programas escritos para Linux u otros Unix pueden portearse con cambios mínimos, no solo en C sino también en lenguajes interpretados como Python. Eso convierte al microcontrolador en una plataforma donde los scripts se interpretan en vez de compilarse dentro del binario, y el ciclo de prueba se acorta: se escribe en el host, se transfiere, se ejecuta.
Qué ofrece el panel
Una vez que la placa arranca y toma IP en la red, cualquier browser accede al panel en http://webpanel.local gracias al descubrimiento por mDNS. La interfaz tiene cuatro secciones:
- Home: versión de NuttX, nombre de la placa, arquitectura, configuración de red y uptime.
- Terminal: sesión NSH via WebSockets. Es un shell real de NuttX en el navegador, equivalente al que se vería por consola serie.
- Files: gestor sobre el storage escribible (
/mnt). Permite navegar, subir, borrar y ejecutar scripts Python directamente desde la interfaz. - Network: detalles de las interfaces y renovación del lease DHCP.
Cómo está armado
NuttX Web Panel no depende de servicios externos ni de nubes. Todo el runtime vive en el dispositivo y reutiliza módulos que ya estaban en el repositorio de aplicaciones nuttx-apps:
- THTTPD: servidor HTTP liviano que sirve el HTML, CSS y JavaScript desde una partición ROMFS embebida en el firmware, y despacha los requests dinámicos a handlers CGI.
- CGI handlers: exponen información del sistema, listado y subida de archivos, y renovación DHCP. NuttX los invoca via BINFS (aplicaciones built-in como archivos virtuales) montado en UNIONFS junto al ROMFS estático.
- libwebsockets: recientemente habilitada para operación server-side en
nuttx-apps. Un daemon acepta la conexión, spawnea una sesión NSH atada a un PTY POSIX y traduce tráfico entre WebSocket y file descriptor. En el frontend usa xterm.js para el terminal. - mDNS: un starter event-based lanza el daemon mDNS cuando el equipo obtiene IP via DHCP, para publicarse como
webpanel.local. - SmartFS: sistema de archivos escribible respaldado por SPI flash, montado en
/mnt, que persiste tras un reboot.
Python integrado y control de periféricos
El defconfig webpanel para ESP32-P4 incluye el intérprete Python. Un ejemplo concreto que Espressif publica es un script task monitor que lee /proc/<pid>/status, /proc/<pid>/stack y /proc/meminfo de PROCFS y arma una tabla resumen de las tareas activas. Se sube desde la pestaña Files, y para archivos .py la lista incluye un botón Run que abre el terminal y ejecuta:
nsh> python /mnt/taskmon.py -vPara llegar más cerca del hardware, el paquete nuttx-periphery, aportado por Filipe Cavalcanti, entrega una API Python de alto nivel sobre los character drivers de NuttX. Controlar GPIO, I2C o SPI queda en pocas líneas:
from nuttx_periphery import GPIO, GPIOPinType
gpio = GPIO("/dev/gpio0")
gpio.set_pin_type(GPIOPinType.GPIO_OUTPUT_PIN)
gpio.write(True)Hardware y build
El panel fue desarrollado y validado sobre la ESP32-P4-Function-EV-Board. El ESP32-P4 es un SoC dual-core RISC-V con RAM suficiente para correr el servidor web junto al intérprete Python y trae soporte Ethernet, ideal para este caso de uso.
Compilar y flashear implica tres comandos:
make -j distclean && ./tools/configure.sh -S esp32p4-function-ev-board:webpanel
make flash ESPTOOL_PORT=/dev/ttyACM0 -s -j$(nproc)Tras el flash, la placa arranca, toma IP via DHCP, levanta el panel y el daemon mDNS gracias al init script rcS. El acceso queda en http://webpanel.local; si mDNS no está disponible en la red, la IP aparece por consola serie.
Qué sigue
Espressif califica este release como "muy primer esfuerzo" hacia una interfaz web para NuttX. Sin roadmap formal todavía, la lista de próximas direcciones incluye:
- Configuración de periféricos (GPIO, I2C, SPI) desde el navegador
- Monitoreo en tiempo real con gráficos de CPU, memoria y actividad de tareas
- Editor y entorno de ejecución más completo para scripts Python
- Autenticación básica para asegurar el panel
Contexto y comparación
El movimiento suma a NuttX una capa de administración parecida a la de routers de consumo o hubs IoT: un panel web que reemplaza el flujo típico de consola serie + toolchain de cross-compilation. Alternativas comparables en el mundo ESP32 son MicroPython con WebREPL (más ligero pero sin gestor de archivos ni terminal shell completo) o ESPHome (declarativo, enfocado en Home Assistant). Frente a esas opciones, el panel de Espressif se apoya en un RTOS POSIX-compatible con soporte real de Python interpretado sobre POSIX drivers, un stack más cercano a Linux que a un runtime embedded tradicional.
Espressif adelantó que la próxima nota de la serie profundizará en el control de periféricos con nuttx-periphery. Todos los componentes del panel ya están en el repositorio Apache nuttx-apps y la placa ESP32-P4-Function-EV-Board se consigue a través de distribuidores oficiales, incluida la red de MechatronicStore para la región.





