ESP32 - Preparando el sistema Windows para desarrollar mediante el ESP32-IDF SDK

1. Descargando e instalando las herramientas

1.1 - Descargar la versión del entorno GNU ligero para Windows, MYSYS2 (que utiliza MinGW32), destinado al desarrollo con ESP (el cual trae las herramientas necesarias para compilar los programas), y descomprimir el archivo descargado en C:



1.2 - Abrir un terminal MinGW32 (C:\msys32\mingw32.exe), crear un directorio para el SDK del ESP32 (esp-idf) y descargarlo en él:


mkdir /c/ESP32-IDF
cd /c/ESP32-IDF
git clone --recursive https://github.com/espressif/esp-idf.git

 1.3 - A continuación accedemos al directorio del SDK, determinamos las versiones disponibles (con el comando git tag -l) y seleccionamos la que nos convenga (preferentemente una versión que sea "release". Puede consultarse las versiones estables disponibles aquí), para ello, basta con especificarla en la 3º línea de los siguientes comandos (en este caso seleccionaremos la última versión estable disponible actualmente, la 3.0.3):

cd esp-idf
git tag -l
git checkout v3.0.3

1.4 - Creamos un archivo post-logueo (en este caso apertura del MinGW32) que establezca, de forma automática, el PATH donde se encuentra el IDF, cuando se abra el terminal (necesario para la compilación de proyectos desde la terminal):
echo 'export IDF_PATH="/c/ESP32-IDF/esp-idf"' > /c/msys32/etc/profile.d/esp32-idf_path.sh

1.5 - Descargamos Eclipse, lo instalamos para desarrollar en C/C++, y lo abrimos:


2. Configurando un proyecto plantilla inicial

2.1 - Importamos el proyecto Blink, de los ejemplos incluidos en el SDK, con el fin de utilizarlo como proyecto plantilla inicial (cuando en un futuro se quiera comenzar un nuevo proyecto bastará con importar dicho proyecto inicial y renombrarlo; de esta forma no se deberán volver a realizar todas las configuraciones): 

File\Import\C/C++\Existing Code as Makefile Project


2.2 - Le damos nombre al proyecto (ESP32_Init), especificamos el directorio del proyecto Blink como la ruta de los archivos a importar (C:\ESP32-IDF\esp-idf\examples\get-started\blink) y seleccionamos el Toolchain Cygwin gcc (hay que desmarcar la casilla "Show only available toolchains..." para que se muestre):


2.3 - Configuramos las propiedades del proyecto para dar soporte al ESP-IDF, para ello, hacemos Click derecho sobre el proyecto creado y abrimos sus propiedades (Properties):


2.4 - En C/C++ Build, desmarcar la casilla "Use default build command” y sustituimos build command por "python ${IDF_PATH}/tools/windows/eclipse_make.py":


2.5 - En C/C++ Build - Environment, añadimos a todas las configuraciones:
  • BATCH_BUILD con el valor 1.
  • IDF_PATH con el valor de la ruta donde se encuentra el IDF (C:/ESP32-IDF/esp-idf), nota, para la IDF_PATH en Windows, deben usarse barras hacia adelante en vez de hacia atrás.
  • Editamos la variable de entorno PATH y sustituye su contenido por:
C:\msys32\usr\bin;C:\msys32\mingw32\bin;C:\msys32\opt\xtensa-esp32-elf\bin


2.6 - En C/C++ General - Preprocessor Include Paths, Macros,etc. - Providers, seleccionamos "CDT GCC Build Output Parser" y añadimos "xtensa-esp32-elf-" al principio del Compiler command pattern (xtensa-esp32-elf-(g?cc)|([gc]\+\+)|(clang)). Lo siguiente es seleccionar "CDT GCC Built-in Compiler Settings Cygwin” y sustituimos en "Command to get compiler specs", "${COMMAND}" por "xtensa-esp32-elf-gcc" (xtensa-esp32-elf-gcc ${FLAGS} -E -P -v -dD "${INPUTS}"). Por último, presionamos en Apply y Ok para aplicar todos los cambios realizados:


2.7 - A continuación, habilitaremos el proceso de compilación del proyecto de forma paralela a través de multiples hilos de ejecución (esto ayudará a que el tiempo de compilación se reduzca considerablemente). Para ello, nos posicionaremos sobre "C/C++ Build" y, en la pestaña "Behavior", activaremos el checkbox "Enable parallel build":


2.8 - Lo siguiente es configurar el dispositivo objetivo (Target) del proyecto (para poder cargar el código directamente desde Eclipse), para ello, hacemos Click derecho sobre el proyecto y seleccionamos "Build Targets/Create...". En la ventana que se abre se debe de especificar el argumento que se le pasará a la llamada make, por tanto, repetiremos el proceso 4 veces, creando 4 Targets correspondientes, cada uno, a la compilación completa (make all), la limpieza del proyecto (make clean), la consulta de la memoria utilizada (make size) y la carga del código en el dispositivo (make flash):

3. Cargando un programa en el dispositivo

3.1 - Llega el momento de compilar y comprobar que todo se ha configurado debidamente, pero para ello es necesario tener instalado el driver correspondiente al conversor serie-USB cp210x, presente en el módulo de desarrollo (en este caso, NodeMCU), si no se posee aún, es el momento de buscarlo, descargarlo e instalarlo.

3.2 - Una vez con el driver instalado, conectamos la placa de desarrollo al PC y nos aseguramos que es reconocido por Windows como un puerto COM (administrador de dispositivos):


3.3 - Para construir y compilar un proyecto, tenemos la limitación de que el entorno Eclipse no permite (de momento) configurar el proyecto, paso previo a compilarlo, por ello, se debe de realizar de forma manual desde el terminal MinGW32. Por tanto, volvemos al terminal MinGW32, accedemos al directorio del proyecto y lo configuramos:
cd C:/ESP32-IDF/esp-idf/examples/get-started/blink/
make menuconfig


3.4 - Especificamos el puerto COM consultado anteriormente, para ello, debemos acceder a "Serial flasher config/Default serial port" y modificamos el puerto (en este caso, por COM4):


3.5 - Una vez configurado, guardamos (Save) y salimos de la herramienta de configuración (Exit).

3.6 - Volvemos a Eclipse y modificamos la etiqueta "CONFIG_BLINK_GPIO" del código blink.c (línea 20) por un valor númerico correspondiente al pin del LED, por ejemplo el 13 (la etiqueta anterior puede utilizarse si, mediante la herramienta de configuración del dispositivo, de los pasos anteriores, se especifica el pin a utilizar en este ejemplo):


3.7 - Por último, compilamos y cargamos el proyecto en el dispositivo a través del Target flash. En el momento en el que esté a punto de terminar la compilación, se debe de presionar el botón físico boot que se encuentra en la placa de desarrollo, con el fin de que el dispositivo pase a su modo de espera de carga de firmware (en caso de que el dispositivo no se encuentre en este modo, a la espera de recibir un programa, la consola mostrará el siguiente error: A fatal error occurred: Failed to connect to ESP32: Invalid head of packet ('\x1b')):



3.8 - Una vez cargado el programa, comprobamos que funciona adecuadamente (el LED conectado al pin especificado parpadea).

4. Preparando el proyecto plantilla

4.1 - Cerramos todos los proyectos que haya abiertos en el navegador de proyectos de Eclipse y cerramos el propio Eclipse.

4.2 - Copiamos el proyecto blink que hemos utilizado (y configurado para Eclipse), a C:/ESP32-IDF para utilizarlo a modo de proyecto plantilla:
Copiar C:/ESP32-IDF/esp-idf/examples/get-started/blink a C:/ESP32-IDF

4.3 - Renombramos el proyecto copiado, a Eclipse_Init:
C:/ESP32-IDF/blink ---> C:/ESP32-IDF/ESP32_Init


4.4 - Editamos el archivo Makefile del proyecto y modificamos el nombre del proyecto por Eclipse_Init:
PROJECT_NAME := blink ---> PROJECT_NAME := ESP32_Init


4.5 - Abrimos Eclipse y eliminamos desde el explorador de proyectos, el proyecto ESP32_Init anterior.


5. Creando nuevos proyectos desde la plantilla

Nota - Para facilitar y ahorrar el trabajo de realizar los apartados 2, 3 y 4 (aunque es recomendable leer el apatado 3 para conocer el proceso de carga de un programa en el ESP32), o por si en un futuro se pierde el proyecto plantilla generado, se ha subido dicho proyecto a Github, de modo que puede descargarse y utilizarse para crear nuevos proyectos, siguiendo los siguientes pasos.

5.1 - Descargar, descomprimir y situar el proyecto plantilla "ESP_Init" en C:/ESP32-IDF, desde el siguiente enlace (si se han realizado los apartados 2, 3 y 4 no hace falta realizar este punto):
https://github.com/J-Rios/ESP32_Eclipse_Template

5.2 - Desde Eclipse, importamos un nuevo proyecto existente, para ello seleccionamos "File/Import..." y en la sección "General/Existing Projects into Workspace":


5.3 - En la ventana de importación de proyectos que se abrirá, seleccionaremos el proyecto plantilla ESP32_Init, marcaremos su inclusión en el Workspace y lo importaremos:


5.4 - Una vez con el proyecto importado, lo renombramos (click derecho y "Rename..."; tiene que estar abierto el proyecto), por ejemplo, según la aplicación que se va a desarrollar: 


5.5 - Hecho esto, tendremos el proyecto listo para desarrollar la aplicación concreta que precisemos. De este modo, para crear nuevos proyectos para desarrollar en Eclipse mediante el ESP32-IDF SDK, se deben de seguir los pasos 5.2 - 5.4 nuevamente.

Comentarios

Entradas populares de este blog

Tips electrónica: Reparar punta de soldador (Baño electrolítico)

Introducción a la electrónica III: Potencia eléctrica y consumo