Este artículo presenta Velxio, un simulador embebido de código abierto basado en navegador que ejecuta firmware real de ESP32 sobre hardware emulado. Explica cómo funciona el simulador internamente, demuestra proyectos basados en LED, Wi-Fi, MQTT y sensores, y destaca el soporte para múltiples placas dentro de la familia ESP32.

En una ocasión, buscaba en línea una forma de emular un proyecto que utilizaba dos placas ESP32 comunicándose a través de SPI. Para mi sorpresa, no pude encontrar ninguna plataforma capaz de hacerlo. Existían algunas alternativas capaces de emular un solo ESP32, pero mi proyecto iba mucho más allá: también incluía resistencias, diodos y componentes analógicos, lo que hacía el desafío aún mayor. Eso me hizo preguntarme: ¿sería posible construir una plataforma capaz de ejecutar un proyecto embebido completo directamente en el navegador? Decidí construir un prototipo para averiguarlo. Ese prototipo finalmente se convirtió en Velxio.

¿Qué es Velxio y cómo funciona?

Velxio es un simulador embebido de placas múltiples entregado como una aplicación web, y existen dos formas de utilizarlo. La instancia alojada en velxio.dev ejecuta ejemplos públicos sin necesidad de una cuenta; una cuenta gratuita permite guardar y compartir proyectos propios, y los planes de pago añaden extras como el agente de IA tratado más adelante en este artículo y computadores de placa única Raspberry Pi (consulte velxio.dev/pricing para más detalles). Alternativamente, puede autoalojar toda la pila de código abierto en su propio servidor, como se muestra al final de este artículo. Las piezas fundamentales son:

  • Emulación real de CPU, no modelos de comportamiento. Las placas ESP32 funcionan sobre una bifurcación de QEMU con emulación de sistema Xtensa LX6/LX7 y RISC-V; las placas AVR y RP2040 funcionan completamente en el navegador mediante avr8js y rp2040js.
  • Una cadena de compilación real. arduino-cli y ESP-IDF producen archivos genuinos .hex, .uf2 y .bin en el servidor. Lo que se ejecuta en el simulador es exactamente lo que se cargaría en el hardware.
  • Más de 30 placas en 6 arquitecturas de CPU. Diez de ellas pertenecen a la familia ESP32, junto con placas Arduino AVR, Raspberry Pi Pico, STM32 (desde Blue Pill hasta F4 Discovery) y computadores de placa única Raspberry Pi que arrancan Linux en núcleos Cortex-A emulados.
  • Más de 150 componentes interactivos. LEDs, sensores, pantallas OLED y TFT, tiras NeoPixel, paneles ePaper, tarjetas MicroSD y motores, todos arrastrados a un lienzo y conectados a su placa.
  • Co-simulación híbrida digital + analógica. ngspice compilado a WebAssembly resuelve el lado analógico: analogRead() devuelve el voltaje real del nodo mediante el Análisis Nodal Modificado, por lo que los amplificadores operacionales se saturan y los diodos caen voltios como deberían.
  • Desarrollo en Arduino, ESP-IDF y MicroPython. Espacios de trabajo de múltiples archivos, un gestor de librerías respaldado por el Arduino Library Index, proyectos ESP-IDF y más de 300 proyectos de ejemplo de un solo clic, casi 80 de ellos dirigidos a placas de la familia ESP32.
  • Totalmente autoalojable. Toda la pila (frontend, backend, emuladores, cadenas de herramientas) se entrega como una única imagen Docker.

¿Cuál es el estado actual de la comunidad Velxio?

A mediados de 2026, más de 15,000 desarrolladores se han registrado en Velxio y ejecutan más de mil simulaciones cada día. Las placas de la familia ESP32 representan más de la mitad de esas simulaciones, convirtiéndolas en el hardware más popular de la plataforma. El núcleo de código abierto en github.com/davidmonterocrespo24/velxio ha reunido miles de estrellas y cientos de bifurcaciones.

¿Cómo ejecutar su primer proyecto ESP32 en el navegador?

Ejecutemos el "Hola Mundo" embebido. Puede hacerlo en velxio.dev ahora mismo, sin necesidad de registro:

  • Abra velxio.dev/example/esp32-blink-led. El ejemplo carga una ESP32 DevKit V1 con un LED externo ya conectado al GPIO4 a través de una resistencia (el LED azul incorporado de la placa se encuentra en el GPIO2):
C++
#define LED_BUILTIN_PIN 2
#define LED_EXT_PIN 4
void setup() {
  Serial.begin(115200);
  pinMode(LED_BUILTIN_PIN, OUTPUT);
  pinMode(LED_EXT_PIN, OUTPUT);
  Serial.println("ESP32 Blink ready!");
}
void loop() {
  digitalWrite(LED_BUILTIN_PIN, HIGH);
  digitalWrite(LED_EXT_PIN, HIGH);
  Serial.println("LED ON");
  delay(500);
  digitalWrite(LED_BUILTIN_PIN, LOW);
  digitalWrite(LED_EXT_PIN, LOW);
  Serial.println("LED OFF");
  delay(500);
}
  • En la barra de herramientas superior, haga clic en ► para ejecutar el proyecto. El backend compila el sketch con el core arduino-esp32 (puede ver el registro de compilación real desplazándose) y luego arranca el binario en el Xtensa LX6 emulado. En segundos, el LED parpadea en el lienzo y el Monitor Serial transmite LED ON / LED OFF:
El ejemplo de parpadeo ESP32: editor de código, circuito cableado, registro de compilación y monitor serial en una pestaña
El ejemplo de parpadeo ESP32: editor de código, circuito cableado, registro de compilación y monitor serial en una pestaña

Todo en esa captura de pantalla está activo: puede editar el código y volver a ejecutar, arrastrar componentes mientras la simulación corre, escribir en el monitor serial o abrir el panel del osciloscopio y probar un pin.

¿Cómo funciona Velxio por dentro?

El soporte de ESP32 de Velxio no utiliza modelos periféricos simplificados. Cada placa de la familia ESP32 arranca una emulación de sistema QEMU real con periféricos a nivel de registro.

El lado de la compilación es igualmente real. Los sketches de ESP32 se compilan contra el core arduino-esp32 3.3.10 en ESP-IDF v5.5 dentro del backend. Una compilación en frío compila el IDF completo (aproximadamente 1,500 objetos, unos minutos), pero ccache más directorios de compilación persistentes por objetivo significan que las compilaciones en caliente ocurren en menos de un minuto. Las opciones de compilación reflejan el menú Herramientas del IDE de Arduino: esquemas de partición, frecuencia de CPU, modo/tamaño de flash, PSRAM, fijación de núcleo para el bucle de Arduino, todo serializado por placa y traducido a sdkconfig en tiempo de compilación. Incluso puede cargar archivos en una partición SPIFFS desde el navegador.

Las placas ESP32-C3 siguen el mismo camino en la emulación de sistema RISC-V (RV32IMC) de QEMU, por lo que los periféricos del C3 también se emulan a nivel de registro.

Aquí está esa pila de periféricos en acción. La Estación Meteorológica ESP32 es un proyecto único en el que la placa emulada:

  • Lee un BMP280 (temperatura + presión) a través de I²C
  • Lee un DHT22 (humedad) en un GPIO
  • Dibuja un tablero en vivo en una pantalla ILI9341 TFT a través de SPI mediante la pila Adafruit GFX

Ambos buses emulados funcionan al mismo tiempo. Y este proyecto tiene un giro: no fue cableado a mano. Fue diseñado, cableado y programado de principio a fin por el agente de IA de Velxio (ese es su panel de chat a la derecha de la captura de pantalla).

Estación Meteorológica ESP32: BMP280 vía I²C, DHT22 en GPIO, ILI9341 vía SPI. Diseñado y programado por agente IA
Estación Meteorológica ESP32: BMP280 vía I²C, DHT22 en GPIO, ILI9341 vía SPI. Diseñado y programado por agente IA

Wi-Fi que realmente llega a internet

El ESP32 emulado se une a un punto de acceso abierto virtual y obtiene NAT a través del host. Eso significa WiFi.begin() real, DHCP, DNS y TCP reales hacia el mundo exterior. El ejemplo MQTT de la galería se conecta a broker.hivemq.com, publica en un tema único, se suscribe al mismo tema y alterna el GPIO2 cada vez que un mensaje completa un ciclo a través del broker público real:

C++
#include <WiFi.h>
#include <PubSubClient.h>

const char* WIFI_SSID = "Velxio-GUEST"; // AP abierto que anuncia el emulador
const char* MQTT_BROKER = "broker.hivemq.com";

void connectWiFi() {
  WiFi.mode(WIFI_STA);
  WiFi.begin(WIFI_SSID);
  while (WiFi.status() != WL_CONNECTED) {
    delay(300);
    Serial.print(".");
  }
  Serial.printf("\nWiFi connected, IP %s\n", WiFi.localIP().toString().c_str());
}

Los clientes HTTP, servidores web (proxy para que pueda abrir la página del ESP32 en otra pestaña) y MQTT funcionan dentro de la simulación. Pruebe este ejemplo: velxio.dev/example/esp32-wifi-mqtt.

Vía Espressif Developer Blog.