English — Programming Seeed XIAO ESP32-C3 & ESP32-C6 on Windows
Windows Arduino IDE 1.8.19 + 2.x esp32 by Espressif Systems (core) Verified Upload
This document captures the exact process used to successfully compile and upload code to Seeed Studio XIAO ESP32-C3 and XIAO ESP32-C6 using Arduino tools on Windows. It includes the observed failures, what was ruled out, the true root cause, and the fix that made everything work.
Core principle (mandatory)
| Board | Architecture | Recommended IDE | ESP32 Core |
|---|---|---|---|
| XIAO ESP32-C3 | RISC-V | Arduino IDE 1.8.19 (Legacy) for reliable installs | 2.0.x (stable); 3.x (test/optional) |
| XIAO ESP32-C6 | RISC-V + WiFi 6 / Thread | Arduino IDE 2.3.x | 3.x required |
What was validated
- Both boards can compile and upload (verified by “Hash of data verified” and reset logs).
- The same official Espressif package was used:
esp32 by Espressif Systems. - Once the core was correctly installed (via IDE 1.8.19), Arduino IDE 2.x workflows became stable.
1. Context & Goal
The goal was to program Seeed XIAO ESP32-C3 and XIAO ESP32-C6 using Arduino IDE on Windows, ensuring that:
- Code compiles successfully.
- Code uploads successfully to the board.
- The process is reproducible by others.
During the initial attempts with Arduino IDE 2.x, persistent build failures occurred (even with correct code and COM selection). These errors were ultimately traced back to a core installation issue, not to the sketch or hardware.
2. Symptoms observed
In Arduino IDE 2.3.x, the following types of errors were repeatedly observed:
The system cannot find the path specifiedexit status 1File not found executable- Failures generating the
.elfartifact - Failures in both Verify and Upload
- Arduino CLI could run commands, but internal paths/toolchain steps failed
These failures occurred despite trying multiple sketches (Blink), different boards (C3/C6), and multiple core versions (2.x/3.x).
3. Hypotheses ruled out
It was confirmed that the issue was not caused by:
- Sketch/code errors
- Wrong pin selection
- USB driver issues
- Wrong COM port selection
- USB cable problems
- Windows permissions
- PATH misconfiguration
- Arduino CLI itself
4. Root cause (critical)
Because the core was incomplete, the build system failed with “path not found”, missing executable/ELF artifacts, and exit status errors.
5. The real solution (what actually worked)
Arduino15 core/toolchain installation and everything works.
Once the core was installed correctly via IDE 1.8.19, both compilation and upload worked smoothly for C3 and C6 in the modern IDE.
6. Reproducible step-by-step procedure
Step 1 — Install Arduino IDE 1.8.19 (Legacy)
- Download Arduino IDE 1.8.19 (Legacy) from the official Arduino site.
- Install on Windows normally.
Step 2 — Open Arduino IDE 1.8.19 and install the ESP32 core
Open:
Tools → Board → Boards Manager
Search:
esp32
Install:
esp32 by Espressif Systems
esp32 by Espressif Systems. It includes full toolchains, ESP-IDF components, and board support.
This is not a “legacy core”—only the IDE is legacy.
Step 3 — Confirm compilation and upload in IDE 1.8.19 (C3)
Select board:
Tools → Board → XIAO ESP32C3
Use a minimal Blink test:
#define LED_PIN 21
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
Verify compile (Verify) and upload (Upload). A successful upload ends with a reset line such as:
Hard resetting via RTS pin…
Step 4 — Open Arduino IDE 2.x and reuse the installed core
- Install/open Arduino IDE 2.3.x (latest stable).
- Do not delete Arduino core folders (e.g.,
Arduino15). - Arduino IDE 2.x will detect and reuse the core/toolchain already installed.
Step 5 — Program XIAO ESP32-C6 using Arduino IDE 2.x
Select board:
Tools → Board → XIAO ESP32C6
Use Blink (LED is often active-low):
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW); // ON (often active LOW)
delay(500);
digitalWrite(LED_BUILTIN, HIGH); // OFF
delay(500);
}
Successful upload typically includes:
Hash of data verified.
Hard resetting via RTS pin…
7. ESP32 core versions — what to use and why
ESP32-C3
| Core version | Status | Notes |
|---|---|---|
| 2.0.17 | ✅ Stable | Recommended for maximum stability on C3 (especially on Windows). |
| 3.x (e.g., 3.3.6) | ⚠️ Test/Optional | Can work, but not the preferred baseline for C3 stability in this environment. |
Recommendation: Production → 2.0.17. Testing → 3.x.
ESP32-C6
| Core version | Status | Notes |
|---|---|---|
| 3.x | ✅ Required | C6 requires ESP32 core 3.x for proper support. |
| 2.x | ❌ Not supported | Not suitable for C6. |
8. Quick comparison — XIAO ESP32-C3 vs XIAO ESP32-C6
| Feature | ESP32-C3 | ESP32-C6 |
|---|---|---|
| CPU architecture | RISC-V 32-bit | RISC-V 32-bit |
| Wi-Fi | 2.4 GHz (WiFi 4) | WiFi 6 |
| Bluetooth | BLE 5.0 | BLE 5.3 |
| Thread / Matter | ❌ | ✅ |
| Recommended core | 2.0.17 (stable) | 3.x (required) |
| Stability (as observed) | Very high | High (newer ecosystem) |
9. Final conclusion (what actually happened)
The real issue was never the board or the sketch. The failures came from an incomplete ESP32 core download inside Arduino IDE 2.x. Once the core was installed correctly using Arduino IDE 1.8.19, everything became stable: both boards compiled and uploaded reliably.
10. Rule of thumb (teaching rule)
Español — Programación de Seeed XIAO ESP32-C3 & ESP32-C6 en Windows
Windows Arduino IDE 1.8.19 + 2.x esp32 by Espressif Systems Carga verificada
Este documento registra el proceso exacto usado para compilar y cargar código con éxito en Seeed Studio XIAO ESP32-C3 y XIAO ESP32-C6 usando Arduino en Windows. Incluye los fallos observados, lo que se descartó, la causa raíz real y la solución que hizo que todo funcionara.
Principio clave (obligatorio)
| Placa | Arquitectura | IDE recomendado | Core ESP32 |
|---|---|---|---|
| XIAO ESP32-C3 | RISC-V | Arduino IDE 1.8.19 (Legacy) para instalaciones confiables | 2.0.x (estable); 3.x (prueba/opcional) |
| XIAO ESP32-C6 | RISC-V + WiFi 6 / Thread | Arduino IDE 2.3.x | 3.x requerido |
1. Contexto y objetivo
El objetivo fue programar correctamente XIAO ESP32-C3 y XIAO ESP32-C6 usando Arduino en Windows, garantizando que:
- El código compila correctamente.
- El código se carga correctamente a la placa.
- El proceso es reproducible para otras personas.
2. Síntomas observados
En Arduino IDE 2.3.x aparecieron repetidamente errores como:
El sistema no puede encontrar la ruta especificadaexit status 1File not found executable- Fallas al generar el archivo
.elf - Fallas tanto en Verify como en Upload
- Arduino CLI podía ejecutar comandos, pero fallaban rutas internas/toolchain
Esto ocurrió incluso usando varios sketches (Blink), diferentes placas (C3/C6) y múltiples versiones del core (2.x/3.x).
3. Hipótesis descartadas
Se confirmó que el problema no era causado por:
- Errores de código/sketch
- Pin incorrecto
- Drivers USB
- Puerto COM equivocado
- Cable USB
- Permisos en Windows
- PATH de Windows
- Arduino CLI en sí
4. Causa raíz (crítica)
5. Solución real (la que sí funcionó)
6. Procedimiento paso a paso (reproducible)
Paso 1 — Instalar Arduino IDE 1.8.19 (Legacy)
- Descargar Arduino IDE 1.8.19 desde el sitio oficial de Arduino.
- Instalar normalmente en Windows.
Paso 2 — Instalar core ESP32 desde IDE 1.8.19
Abrir:
Herramientas → Placa → Gestor de tarjetas
Buscar:
esp32
Instalar:
esp32 by Espressif Systems
esp32 by Espressif Systems. Incluye toolchains completos, componentes ESP-IDF y soporte para placas.
No es un “core legacy”; lo legacy es únicamente el IDE.
Paso 3 — Confirmar compilación y carga en IDE 1.8.19 (C3)
Seleccionar placa:
Herramientas → Placa → XIAO ESP32C3
Usar Blink mínimo:
#define LED_PIN 21
void setup() {
pinMode(LED_PIN, OUTPUT);
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(500);
digitalWrite(LED_PIN, LOW);
delay(500);
}
Una carga exitosa termina con algo como:
Hard resetting via RTS pin…
Paso 4 — Abrir Arduino IDE 2.x y reutilizar el core instalado
- Instalar/abrir Arduino IDE 2.3.x.
- No borrar carpetas del core (por ejemplo
Arduino15). - Arduino IDE 2.x detecta y reutiliza el core/toolchain ya instalado.
Paso 5 — Programar XIAO ESP32-C6 en Arduino IDE 2.x
Seleccionar placa:
Herramientas → Placa → XIAO ESP32C6
Blink (LED comúnmente activo en LOW):
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
}
void loop() {
digitalWrite(LED_BUILTIN, LOW); // ON (frecuente activo en LOW)
delay(500);
digitalWrite(LED_BUILTIN, HIGH); // OFF
delay(500);
}
Salida típica de éxito:
Hash of data verified.
Hard resetting via RTS pin…
7. Versiones del core ESP32: cuál usar y por qué
ESP32-C3
| Versión del core | Estado | Notas |
|---|---|---|
| 2.0.17 | ✅ Estable | Recomendado para máxima estabilidad en C3 (especialmente en Windows). |
| 3.x (ej. 3.3.6) | ⚠️ Prueba/Opcional | Puede funcionar, pero no es la base preferida para estabilidad en este entorno. |
Recomendación: Producción → 2.0.17. Pruebas → 3.x.
ESP32-C6
| Versión del core | Estado | Notas |
|---|---|---|
| 3.x | ✅ Requerido | El C6 requiere el core 3.x para soporte correcto. |
| 2.x | ❌ No soportado | No sirve para C6. |
8. Comparativa rápida — XIAO ESP32-C3 vs XIAO ESP32-C6
| Característica | ESP32-C3 | ESP32-C6 |
|---|---|---|
| Arquitectura | RISC-V 32-bit | RISC-V 32-bit |
| WiFi | 2.4 GHz (WiFi 4) | WiFi 6 |
| Bluetooth | BLE 5.0 | BLE 5.3 |
| Thread / Matter | ❌ | ✅ |
| Core recomendado | 2.0.17 (estable) | 3.x (requerido) |
| Estabilidad (observada) | Muy alta | Alta (ecosistema más nuevo) |
9. Conclusión final (lo que realmente pasó)
El problema real nunca fue la placa ni el sketch. Los fallos venían de una descarga incompleta del core ESP32 dentro de Arduino IDE 2.x. Al instalar correctamente el core desde Arduino IDE 1.8.19, el toolchain quedó completo y estable: ambas placas compilaron y cargaron correctamente.