Si ya programaste un ESP32 con el IDE de Arduino y quedaste con ganas de más control. manejo fino de memoria, tareas de FreeRTOS, acceso de bajo nivel a los periféricos. este es el paso siguiente. ESP IDF (Espressif IoT Development Framework) es el SDK oficial que la propia Espressif desarrolla para sus chips, en C y C++. Es más complejo que Arduino, pero te da todo el control sobre el hardware.
En esta guía vas a dejar tu ESP32 listo para programar con ESP IDF sobre Visual Studio Code, en Windows, macOS o Linux, y vas a compilar y flashear un "Hello World" que imprime información del chip por el monitor serial.
¿ESP IDF o Arduino IDE? Cuándo dar el salto
Vale la pena entender la diferencia antes de instalar nada. Arduino IDE trabaja con el modelo setup() / loop() y esconde casi toda la complejidad. ESP IDF, en cambio, se basa en FreeRTOS: programas con tareas que corren en paralelo y tú manejas la inicialización de periféricos, la memoria y las configuraciones.

Como es el camino "oficial", ESP IDF suele soportar los chips nuevos antes que Arduino. Hoy cubre toda la familia: ESP32, ESP32-S2/S3, ESP32-C2/C3/C5/C6/C61, ESP32-H2 y ESP32-P4. La contra: al darte más control, también es más fácil toparte con errores de configuración. Si recién partes con el ESP32, quizás te convenga afianzarte primero en Arduino IDE. Si ya estás cómodo y quieres exprimir el chip, sigue leyendo.
Paso 1: Instalar Visual Studio Code
Anda a code.visualstudio.com y descarga la build estable para tu sistema operativo.

- Windows: ejecuta el asistente, acepta el acuerdo, marca las opciones sugeridas y termina con Finish.
- macOS: abre el archivo descargado y arrástralo (o ábrelo desde Descargas).
- Linux Ubuntu: en un terminal, dentro de tu carpeta de Descargas, instala el
.deb. Por ejemplo:
sudo apt install ./code_1.49.1-1600299189_amd64.deb
Abre VS Code y deberías ver la pestaña de bienvenida.
Paso 2: Instalar Python
ESP IDF necesita Python 3.5 o superior. En Windows, descarga desde python.org/downloads y marca la opción "Add Python to PATH" durante la instalación (este es el error clásico que rompe todo después). En macOS puedes usar Homebrew con brew install python3. En Ubuntu, verifica con python3 --version e instala con sudo apt install python3 más sudo apt install python3-distutils si hace falta.

Paso 3: Instalar la extensión ESP IDF en VS Code
- Abre VS Code y entra a la pestaña de extensiones (
Ctrl + Shift + X). - Busca "ESP IDF" y selecciona la extensión de Espressif Systems.
- Presiona Install y luego Trust Publisher & Install. También tendrás que confiar en el workspace. La instalación se demora un rato.

Configurar el ESP IDF Installation Manager
Abre el panel de la extensión, expande el menú Advanced y elige Open ESP IDF Installation Manager. Selecciona el mirror de GitHub, presiona Start Installation y usa la instalación personalizada (Custom Installation) para ver todas las opciones. Al elegir versión, usa 6.X (al momento de escribir, la v6.0.2). Para la mayoría basta con los paquetes core y las herramientas por defecto. Ojo: la instalación puede tardar más de una hora según tu conexión y tu equipo. No uses una carpeta de Google Drive / OneDrive / Dropbox como destino, porque el proceso escribe miles de archivos y se vuelve lentísimo.
Opcional pero recomendado: instala también las extensiones C/C++ de Microsoft para tener autocompletado.
Paso 4: Compilar y flashear el "Hello World"
La instalación trae una carpeta enorme de ejemplos. Desde el panel de la extensión → Advanced → New Project Wizard, elige la versión de ESP IDF, expande get-started y abre el ejemplo hello_world. Presiona Create project using template hello_world, ponle nombre y elige la carpeta destino y tu chip (por ejemplo esp32s3).
Este es el código completo de hello_world_main.c:
#include <stdio.h>
#include <inttypes.h>
#include "sdkconfig.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "esp_chip_info.h"
#include "esp_flash.h"
#include "esp_system.h"
void app_main(void)
{
printf("Hello world!\n");
/* Print chip information */
esp_chip_info_t chip_info;
uint32_t flash_size;
esp_chip_info(&chip_info);
printf("This is %s chip with %d CPU core(s), %s%s%s%s, ",
CONFIG_IDF_TARGET,
chip_info.cores,
(chip_info.features & CHIP_FEATURE_WIFI_BGN) ? "WiFi/" : "",
(chip_info.features & CHIP_FEATURE_BT) ? "BT" : "",
(chip_info.features & CHIP_FEATURE_BLE) ? "BLE" : "",
(chip_info.features & CHIP_FEATURE_IEEE802154) ? ", 802.15.4 (Zigbee/Thread)" : "");
unsigned major_rev = chip_info.revision / 100;
unsigned minor_rev = chip_info.revision % 100;
printf("silicon revision v%d.%d, ", major_rev, minor_rev);
if(esp_flash_get_size(NULL, &flash_size) != ESP_OK) {
printf("Get flash size failed");
return;
}
printf("%" PRIu32 "MB %s flash\n", flash_size / (uint32_t)(1024 * 1024),
(chip_info.features & CHIP_FEATURE_EMB_FLASH) ? "embedded" : "external");
printf("Minimum free heap size: %" PRIu32 " bytes\n", esp_get_minimum_free_heap_size());
for (int i = 10; i >= 0; i--) {
printf("Restarting in %d seconds...\n", i);
vTaskDelay(1000 / portTICK_PERIOD_MS);
}
printf("Restarting now.\n");
fflush(stdout);
esp_restart();
}
Con el proyecto abierto, configura la barra inferior de VS Code: método de flasheo UART, el puerto COM de tu ESP32, y el chip objetivo (en el ejemplo, esp32s3). Compila con el ícono de la llave inglesa (Build Project). la primera vez demora más. y cuando veas "Build Successfully", flashea con el ícono del rayo (Flash Device). Si tu placa lo pide, mantén presionado el botón BOOT durante el flasheo. Finalmente abre el Monitor Device (ícono de pantalla) y vas a ver el "Hello world!" con los datos del chip, reiniciándose cada 10 segundos.
Para cambiar el mensaje, edita esta línea del hello_world_main.c: printf("Hello world!\n");
Variantes y mejoras
- Blink en C con GPIO: después del Hello World, el segundo paso natural es el ejemplo
blinkde la carpetaget-started. Te enseña a manejar un GPIO con la API nativagpio_set_level, sin eldigitalWritede Arduino. - Tu primera tarea FreeRTOS: crea dos tareas con
xTaskCreateque impriman mensajes a distinta frecuencia. Es la puerta de entrada a lo que hace potente a ESP IDF frente a Arduino. - WiFi de fábrica: el ejemplo
wifi/getting_started/stationconecta el ESP32 a tu red y muestra cómo ESP IDF maneja los eventos de conexión, base de cualquier proyecto IoT.
Personalización para Chile
Para seguir esta guía solo necesitas una placa ESP32 y un cable; el software (VS Code, Python, ESP IDF) es todo gratuito. En MechatronicStore encuentras las placas en stock local:
- Placa ESP32 DevKit. la ESP32 DEVKIT V1 DOIT clásica; usa el chip USB serial CP2102. Si tu computador no ve el puerto COM, instala los drivers CP210x.
- ESP32-S3 DevKit. si quieres seguir el ejemplo tal cual con el chip esp32s3.
- Cable USB (micro USB o USB-C según tu placa) para programar y alimentar.
Tip de troubleshooting local: si al flashear sale "Failed to connect... No serial data received", tu placa no entró en modo flasheo; mantén presionado BOOT cuando empiecen a aparecer los puntos. Y si sale "This chip is ESP32-S3 not ESP32", tienes seleccionado el chip equivocado en la barra inferior.
Recursos
- Tutorial original (inglés): Programming ESP32 with ESP IDF using VS Code, Getting Started Guide
- Documentación oficial ESP IDF: https://docs.espressif.com/projects/esp-idf/
- VS Code: https://code.visualstudio.com/
- Ejemplo hello_world: incluido en la carpeta
examples/get-started/hello_worldde ESP IDF
Guía inspirada en el tutorial de Random Nerd Tutorials. Versión chilena con placas ESP32 en stock local en MechatronicStore.




