Xiao feb 2026 Arduino IDE programming

Complete, reproducible documentation for programming Seeed Studio XIAO ESP32-C3 and XIAO ESP32-C6 on Windows — root-cause analysis, fix, and verified results.

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.

Key takeaway: The real problem was not the code or the boards. The issue was an incomplete/corrupted download of the ESP32 core inside Arduino IDE 2.x. Installing the same official core via Arduino IDE 1.8.19 fixed the toolchain and made the workflow stable.

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:

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:

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:

4. Root cause (critical)

Root cause: Arduino IDE 2.x did not fully download/install the ESP32 core. Even when the UI showed “Installed”, the download was incomplete/corrupted. This breaks the internal toolchain: missing binaries/scripts or broken internal paths.

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)

Fix: Install the official, full Espressif ESP32 core using Arduino IDE 1.8.19 (Legacy). After this successful install, Arduino IDE 2.x can reuse the same 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)

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
Important note: Even though the IDE is legacy, the ESP32 package installed is official and complete: 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

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)

If Arduino IDE 2.x produces strange ESP32 build/upload errors on Windows, install the ESP32 core using Arduino IDE 1.8.19 first. This avoids broken toolchains and saves hours of troubleshooting.

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.

Idea principal: El problema real no era el código ni las placas. El fallo fue una descarga/instalación incompleta del core ESP32 en Arduino IDE 2.x. Instalar el mismo core oficial desde Arduino IDE 1.8.19 dejó el toolchain completo y estabilizó el flujo.

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:

2. Síntomas observados

En Arduino IDE 2.3.x aparecieron repetidamente errores como:

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:

4. Causa raíz (crítica)

Causa raíz: Arduino IDE 2.x no logró descargar/instalar completamente el core ESP32. Aunque el IDE mostraba “Installed”, la descarga quedó incompleta/corrupta. Eso rompe el toolchain interno: faltan binarios/scripts o se rompen rutas internas.

5. Solución real (la que sí funcionó)

Solución: Instalar el core ESP32 oficial y completo desde Arduino IDE 1.8.19. Luego Arduino IDE 2.x puede reutilizar la instalación (Arduino15) y todo funciona.

6. Procedimiento paso a paso (reproducible)

Paso 1 — Instalar Arduino IDE 1.8.19 (Legacy)

Paso 2 — Instalar core ESP32 desde IDE 1.8.19

Abrir:

Herramientas → Placa → Gestor de tarjetas

Buscar:

esp32

Instalar:

esp32 by Espressif Systems
Nota importante: Aunque el IDE es legacy, el core instalado es oficial y completo: 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

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.

10. Regla de oro (regla para enseñar)

Si Arduino IDE 2.x da errores raros con ESP32 en Windows, instala el core ESP32 desde Arduino IDE 1.8.19 primero. Esto evita toolchains rotos y ahorra horas de diagnóstico.