Hola mundo con ESP-IDF

Clase 13 de 30 • Curso de IoT: Programación de Microcontroladores ESP32

Clase anteriorSiguiente clase
    Gabriel Obregón

    Gabriel Obregón

    student•
    hace 8 meses

    Creación de nuestro primer programa con ESP-IDF

    En esta clase, aprenderemos a crear nuestro primer programa utilizando el ESP-IDF, comenzando con un clásico "Hola, mundo". Además, exploraremos los pasos necesarios para la creación, compilación y carga del programa en nuestra placa ESP32.

    1. Preparación del entorno

    Para comenzar, abrimos la terminal de comandos con el entorno ESP-IDF configurado. Es recomendable tener una carpeta de trabajo organizada para nuestros proyectos. En este caso, yo he creado una carpeta llamada ESP32, pero puedes crear una en cualquier ubicación y navegar hasta ella desde la terminal.

    Nota: Asegúrate de estar usando la terminal del ESP-IDF.

    2. Creación del proyecto

    Ejecutamos el siguiente comando para crear un nuevo proyecto:

    idf.py create-project <nombre_del_proyecto>

    En este caso, nombraremos el proyecto chip-info:

    idf.py create-project chip-info

    La terminal mostrará un mensaje confirmando la creación del proyecto:

    The project was created in C:\Users\diana\Documents\work\platzi\cursos\latest\esp32\chip-info

    Este comando genera una carpeta con el nombre del proyecto y los archivos básicos para su funcionamiento.

    3. Exploración de los archivos del proyecto

    Dentro de la carpeta del proyecto encontraremos:

    • CMakeLists.txt: Archivo de configuración del proyecto.
    • main.c: Archivo donde escribiremos nuestro código.

    Ahora podemos empezar a programar.

    4. Edición del código en Visual Studio Code

    Para abrir el editor desde la terminal, ejecutamos:

    code .

    Dentro del archivo main.c, escribimos el siguiente código para imprimir "Hola, mundo":

    #include <stdio.h>

    void app_main() {

        printf("Hola, mundo!\n");

    }

    Importante: Siempre incluir \n en printf para asegurar la correcta visualización en la terminal.

    5. Lectura de información del chip ESP32

    Para hacer nuestro programa más interesante, leeremos información del chip como su modelo y número de cores utilizando la librería esp_chip_info.h.

    #include <stdio.h>

    #include "esp_chip_info.h"

    void app_main() {

        esp_chip_info_t chip_info;

        esp_chip_info(&chip_info);

        printf("Este es un chip tipo %s, y tiene %d cores!\n",

               CONFIG_IDF_TARGET,

               chip_info.cores);

    }

    Explicación del código:

    • esp_chip_info_t chip_info; -> Se crea una variable para almacenar la información del chip.
    • esp_chip_info(&chip_info); -> Se llena la variable con los datos del chip.
    • chip_info.cores -> Obtiene el número de cores.
    • CONFIG_IDF_TARGET -> Indica el modelo del chip.

    6. Compilación y carga del programa

    Para compilar el código, ejecutamos:

    idf.py build

    Si ya hemos compilado antes, esta segunda vez será más rápida. Luego, para subir el programa a la placa ESP32:

    idf.py -p COM3 flash

    Este comando sube el binario a la tarjeta de desarrollo. Una vez finalizado, el sistema indicará Done.

    7. Monitoreo del resultado

    Para ver la información impresa por el programa, usamos el modo monitor:

    idf.py -p COM3 monitor

    La terminal mostrará la información del chip y el mensaje:

    Este es un chip tipo esp32, y tiene 2 cores!

    Uso de la protoboard

    En las siguientes prácticas, utilizaremos una protoboard para conectar componentes de manera sencilla.

    Características de la protoboard:

    ✅ Tiene filas y columnas organizadas con números y letras. ✅ Incluye carriles de alimentación marcados con azul (negativo) y rojo (positivo). ✅ Sus conexiones internas permiten conectar componentes sin soldadura.

    Conexiones internas:

    • Carriles de alimentación: Todas las conexiones en la misma línea están unidas internamente.
    • Zona central: Filas conectadas en bloques (A-E y F-J).
    • Ranura central: Divide la protoboard en dos partes sin conexión directa.

    Ejemplo: Conectar un LED correctamente

    1️⃣ Patita positiva del LED en la fila 4. 2️⃣ Patita negativa en la fila 5, con una resistencia al negativo. 3️⃣ Conectar la terminal positiva con un cable a la línea roja (+).

    De este modo, la corriente fluye correctamente y el LED se enciende.

    Deiby Alejandro Triana Archila

    Deiby Alejandro Triana Archila

    student•
    hace 8 meses

    Excelente curso

    Daniel Fernando Murcia Perdomo

    Daniel Fernando Murcia Perdomo

    student•
    hace 2 años

    Sugiero estas dos lecturas si manejan la version s2 mini:

    https://docs.espressif.com/projects/esp-idf/en/v4.3/esp32s2/api-guides/usb-console.html

    https://github.com/espressif/esp-idf/issues/11035#

    Daniel Fernando Murcia Perdomo

    Daniel Fernando Murcia Perdomo

    student•
    hace 2 años

    Para aquellos que tienen la version s2 mini, les recomiendo estas lecturas https://docs.espressif.com/projects/esp-idf/en/v4.3/esp32s2/api-guides/usb-console.html

    https://github.com/espressif/esp-idf/issues/11035

    Gabriel Palma

    Gabriel Palma

    student•
    hace 2 años

    Hola buenas tardes! realice todos los pasos sin problema, pero cuando le doy a idf.py monitor no logro ver lo planteado en el printf. Cabe descatar que hice el build sin problema, y al momento de flash tampoco hubo novedad

    Julio Cardenas

    Julio Cardenas

    student•
    hace 2 años

    Utilice toda la definicion en la libreria: miscellaneous system apis

    #include <stdio.h> #include "esp_chip_info.h" esp_chip_info_t chip_info; char* model_chip; long features_chip; char* get_model_name(int model) { char* model_name; switch (model) { case CHIP_ESP32: model_name = "ESP32"; break; case CHIP_ESP32S2: model_name = "ESP32-S2"; break; case CHIP_ESP32S3: model_name = "ESP32-S3"; break; case CHIP_ESP32C2: model_name = "ESP32-C2"; break; case CHIP_ESP32C3: model_name = "ESP32-C3"; break; case CHIP_ESP32C6: model_name = "ESP32-C6"; break; case CHIP_ESP32H2: model_name = "ESP32-H2"; break; //case CHIP_ESP32P4: El compilador no lo reconoce case 18: model_name = "ESP32-P4"; break; case CHIP_POSIX_LINUX: model_name = "The code is running on POSIX/Linux simulator"; break; default: model_name = "?????"; } return model_name; } void app_main(void) { esp_chip_info(&chip_info); model_chip = get_model_name(chip_info.model); features_chip = chip_info.features; printf("Hola mundo desde isp-idf\n"); printf("model %s revision %d cores %d \n", model_chip, chip_info.revision, chip_info.cores ); printf("Features:"); if (features_chip & CHIP_FEATURE_EMB_FLASH) printf("Chip has embedded flash memory\n"); if (features_chip & CHIP_FEATURE_WIFI_BGN) printf("Chip has 2.4GHz WiFi\n"); if (features_chip & CHIP_FEATURE_BLE) printf("Chip has Bluetooth LE\n"); if (features_chip & CHIP_FEATURE_BT) printf("Chip has Bluettoth Classic\n"); if (features_chip & CHIP_FEATURE_IEEE802154) printf("Chip has IEEE802154\n"); if (features_chip & CHIP_FEATURE_EMB_PSRAM) printf("Chip has embedded psram\n"); /* //Esto Aparece en los miscellaneous system apis //features printf("%ld Chip has embedded flash memory\n", CHIP_FEATURE_EMB_FLASH); printf("%ld Chip has 2.4GHz WiFi\n", CHIP_FEATURE_WIFI_BGN); printf("%ld Chip has Bluetooth LE\n", CHIP_FEATURE_BLE); printf("%ld Chip has Bluettoth Classic\n", CHIP_FEATURE_BT); printf("%ld Chip has IEEE802154\n", CHIP_FEATURE_IEEE802154); printf("%ld Chip has embedded psram\n", CHIP_FEATURE_EMB_PSRAM); //models printf("%d ESP32\n", CHIP_ESP32); printf("%d ESP32-S2\n", CHIP_ESP32S2); printf("%d ESP32-S3\n", CHIP_ESP32S3); printf("%d ESP32-C3\n", CHIP_ESP32C3); printf("%d ESP32-C2\n", CHIP_ESP32C2); printf("%d ESP32-C6\n", CHIP_ESP32C6); printf("%d ESP32-H2\n", CHIP_ESP32H2); //printf("%d ESP32-P4\n", CHIP_ESP32P4); //cuando compilo con esta constante no la reconoce printf("%d The code is running on POSIX/Linux simulator\n", CHIP_POSIX_LINUX); */ }
      Jose Fernando Peréz

      Jose Fernando Peréz

      student•
      hace 9 meses

      Precioso ese código en C.

    Fabián Albarracín

    Fabián Albarracín

    student•
    hace 2 años

    To exit from IDF monitor please use "Ctrl+]". Alternatively, you can use Ctrl-T Ctrl-X to exit.

    Luis Alberto Vargas Méndez

    Luis Alberto Vargas Méndez

    student•
    hace 2 años

    Hola Me aparece este error, estoy en macOS

    A fatal error occurred: This chip is ESP32-S3 not ESP32. Wrong --chip argument?

      Luis Alberto Vargas Méndez

      Luis Alberto Vargas Méndez

      student•
      hace 2 años

      para resolverlo encontre esto

      idf.py set-target esp32s2

      luego me surgio otro error pero parece que tenía que instalar CH34X USB to Serial macOS driver

    Cesar Alfonso Pallares Trespalacios

    Cesar Alfonso Pallares Trespalacios

    student•
    hace 2 años

    como se crea una carpeta?

      Diana Martinez

      Diana Martinez

      student•
      hace 2 años

      Creo que te ayudaría más realizar el curso de terminal de comandos, es muy útil para estas cosas.

      https://platzi.com/cursos/terminal/

      Luis Ariel Torres

      Luis Ariel Torres

      student•
      hace 2 años

      Con mkdir creas la carpeta.

    Claudio Palmieri

    Claudio Palmieri

    student•
    hace 3 años

    Hola Diana. He encontrado dificultad para usar la simulación con Wokwi. ¿Cómo hago para subir el código escrito en IDF y sea bien interpretado por el simulador? ¿Estoy haciendo la pregunta correcta?

      Diana Martinez

      Diana Martinez

      student•
      hace 3 años

      Últimamente he notado que el compilador de Wokwi para ESP-IDF está usando alguna versión anterior, porque da errores con el código de las versiones recientes, lo que te recomendaría es probar directamente con el ESP-IDF y el hardware, pues wokwi todavía es un proyecto muy nuevo.

    Gregorio Emmanuel Rivas Burgos

    Gregorio Emmanuel Rivas Burgos

    student•
    hace 3 años

    Linux

    Para identificar el puerto usado use:

    $ ll /dev/ttyU*

    Me marcaba el siguiente error cuando intenté flashear el ESP32:

    A fatal error occurred: Could not open /dev/ttyUSB0, the port doesn't exist

    Lo solucioné con:

    $ sudo adduser <username> dialout $ sudo chmod a+rw /dev/ttyUSB0

    En donde ++<username>++ es el usuario actual de Linux y ++ttyUSB0++ es el puerto que le asignó a mi placa.

    Jose Gabriel Argüello

    Jose Gabriel Argüello

    student•
    hace 3 años

    pongo el codigo el ejercicio:

    #include <stdio.h> #include "esp_chip_info.h" void app_main(void) { esp_chip_info_t chip_info; esp_chip_info(&chip_info); printf("Este es un chip tipo %s, y tiene %d cores!\n", CONFIG_IDF_TARGET, chip_info.cores ); }

    vuelvo a aclarar que en mi caso ( ESP32 nodemcu) para poder poner el modulo en mode download, tuve que desenergizar la placa y conectarla al usb teniendo presionado el boton 100 en serigrafia, poder poder ver el print: idf.py -p /dev/ttyUSB0 monitor

    Irvyn Cornejo

    Irvyn Cornejo

    student•
    hace 3 años

    Si les da un error al cargar nuevamente el programa y la placa está conectada. En mi caso funcionó presionar el botón "BOOT" después de aplicar el comando:

    idf.py -p (COM) flash