El equipo de desarrollo de Espressif publico un nuevo componente para el RTOS NuttX: se llama NuttX Web Panel y es una interfaz web self-hosted que corre integramente sobre el propio microcontrolador. Combina informacion del sistema, un terminal NSH en el navegador, un gestor de archivos y la posibilidad de subir y ejecutar scripts Python directamente desde la pagina, 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 segun la carga de CPU, todo sin recompilar. La pregunta que quedo abierta era como hacer ese flujo aun mas accesible; NuttX Web Panel es la respuesta oficial.
NuttX como plataforma de computo
El diferencial que Espressif destaca es la compatibilidad POSIX de NuttX, poco comun entre los RTOS. Programas escritos para Linux u otros Unix pueden portearse con cambios minimos, no solo en C sino tambien 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.
Que 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: version de NuttX, nombre de la placa, arquitectura, configuracion de red y uptime.
- Terminal: sesion NSH via WebSockets. Es un shell real de NuttX en el navegador, equivalente al que se veria 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 renovacion del lease DHCP.
Como esta armado
NuttX Web Panel no depende de servicios externos ni de nubes. Todo el runtime vive en el dispositivo y reutiliza modulos que ya estaban en el repositorio de aplicaciones nuttx-apps:
- THTTPD: servidor HTTP liviano que sirve el HTML, CSS y JavaScript desde una particion ROMFS embebida en el firmware, y despacha los requests dinamicos a handlers CGI.
- CGI handlers: exponen informacion del sistema, listado y subida de archivos, y renovacion DHCP. NuttX los invoca via BINFS (aplicaciones built-in como archivos virtuales) montado en UNIONFS junto al ROMFS estatico.
- libwebsockets: recientemente habilitada para operacion server-side en
nuttx-apps. Un daemon acepta la conexion, spawnea una sesion NSH atada a un PTY POSIX y traduce trafico 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 perifericos
El defconfig webpanel para ESP32-P4 incluye el interprete 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 pestana Files, y para archivos .py la lista incluye un boton Run que abre el terminal y ejecuta:
nsh> python /mnt/taskmon.py -vPara llegar mas 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 lineas:
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 interprete 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 esta disponible en la red, la IP aparece por consola serie.
Que sigue
Espressif califica este release como "muy primer esfuerzo" hacia una interfaz web para NuttX. Sin roadmap formal todavia, la lista de proximas direcciones incluye:
- Configuracion de perifericos (GPIO, I2C, SPI) desde el navegador
- Monitoreo en tiempo real con graficos de CPU, memoria y actividad de tareas
- Editor y entorno de ejecucion mas completo para scripts Python
- Autenticacion basica para asegurar el panel
Contexto y comparacion
El movimiento suma a NuttX una capa de administracion parecida a la de routers de consumo o hubs IoT: un panel web que reemplaza el flujo tipico de consola serie + toolchain de cross-compilation. Alternativas comparables en el mundo ESP32 son MicroPython con WebREPL (mas 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 mas cercano a Linux que a un runtime embedded tradicional.
Espressif adelanto que la proxima nota de la serie profundizara en el control de perifericos con nuttx-periphery. Todos los componentes del panel ya estan en el repositorio Apache nuttx-apps y la placa ESP32-P4-Function-EV-Board se consigue a traves de distribuidores oficiales, incluida la red de MechatronicStore para la region.




