Resumen

Este codelab fue creado para explorar el mundo de las herramientas que permiten programar la tarjeta o placa de desarrollo ESP32. Se explicará la instalación de los plugins necesarios de Visual Studio Code, los pasos para crear y trabajar un proyecto y se explicarán algunos ejemplos básicos. Con este recurso se espera que usted al finalizar esté en capacidad de:

  • Tener todas las herramientas software y hardware instaladas y listas para poder trabajar con la tarjeta o placa de desarrollo ESP32.
  • Identificar los pasos de programación de un proyecto desde Visual Studio Code con los plugins necesarios.
  • Ejecutar un ejemplo completo que involucra el uso de un sensor (acelerómetro), tarjeta ESP32 y una pantalla de visualización OLED.

Fecha de Creación:

2024/03/01

Última Actualización:

2024/03/01

Requisitos Previos:

Para el desarrollo de este tutorial usted debe tener los siguientes materiales:

1 ESP32 DEVKIT V1. (Tarjeta o placa de programación)

1 MPU6050. (Sensor acelerómetro).

1 OLED 0.96 inch SSD1306 128x32 4 pin I2C (Display).

1 juego cables (jumpers).

1 Protoboard o placa de pruebas.

Adaptado de:

Referencias:

https://randomnerdtutorials.com/vs-code-platformio-ide-esp32-esp8266-arduino/

Escrito por:

Fredy Segura-Quijano

Las tarjetas de desarrollo ESP32 se pueden programar desde el IDE de Arduino o también usando Visual Studio Code (VS Code) con la extensión PlatformIO IDE. A continuación se presentan los pasos para realizar la instalación de las extensiones necesarias y las configuraciones requeridas para trabajar con la tarjeta.

Para empezar abra VS Code. Si no lo tiene instalado realice la instalación como se muestra en el siguiente enlace: Download Visual Studio Code - Mac, Linux, Windows.

[Visual Studio Code (VS Code). Pantalla de inicio.]

Adicionalmente debe tener instalado Python 3.5 o superior. Para esto entre a la Página Oficial de Python y descargue la última versión.

Realice los siguientes pasos para la instalación de la extensión de "PlatformIO IDE Extension" (PIO) dentro de VS Code.

  1. Haga clic en el icono Extensiones o presione Ctrl + Shift + X para abrir la pestaña Extensiones.
  2. Busque "PlatformIO IDE"
  3. Seleccione la primera opción.
  4. Haga clic en el botón Instalar (Nota: la instalación puede tardar unos minutos)

[Instalación Extensión PlatformIO IDE.]

Después de instalar, asegúrese de que la extensión PlatformIO IDE esté habilitada como se muestra a continuación:

[Extensión PlatformIO IDE habilitada.]

El ícono de PlatformIO (PIO) debería aparecer en la barra lateral izquierda, así como un ícono de Inicio en la barra inferior, que lo redirige a la página de inicio de la extensión PIO.

[Verificación de la extensión PIO.]

Si no ve el ícono PIO, es posible que deba reiniciar VS Code para que los cambios surtan efecto. De cualquier manera, siempre que instale algo en VS Code es recomendable reiniciar el programa.

Ahora haga clic en el icono Extensiones o presione Ctrl + Shift + X para abrir la pestaña Extensiones. Busque " Serial Monitor ". Seleccione la primera opción. Haga clic en el botón Instalar (Nota: la instalación puede tardar unos minutos). Al terminar reinicie VS Code para que los cambios surtan efecto.

[Instalación Extensión Serial Monitor de Microsoft.]

Instalación en Linux.

A continuación se presentan los pasos para realizar la instalación en Linux. Usaremos Ubuntu 22.04 realizando la instalación desde la consola, lo cual es lo más recomendado.

Primero se debe verificar y/o instalar Python, para luego instalar VSCode.

sudo apt update

sudo apt upgrade

sudo apt install software-properties-common apt-transport-https wget

wget -qO- https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -

sudo add-apt-repository "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main"

sudo apt update

sudo apt install code

sudo apt install python3-venv

Posterior a esto puede proceder a instalar las extensiones de PlatformIO y Serial Monitor, siendo muy paciente de que VSCode le avise que todo está correctamente instalado. Tenga presente que debe tener una buena conexión a internet dado que VSCode descarga y actualiza varios paquetes necesarios para su funcionamiento.

Finalmente cuando programa la tarjeta, es probable que algún error de acceso a la tarjeta se presente. Esto se soluciona ejecutando los siguientes comandos en la consola:

sudo apt install curl

curl -fsSL https://raw.githubusercontent.com/platformio/platformio-core/develop/platformio/assets/system/99-platformio-udev.rules | sudo tee /etc/udev/rules.d/99-platformio-udev.rules

Reinicie varias veces VSCode, espero que el programa le avise que todo es correcto para luego crear su proyecto.

Para crear un nuevo proyecto de trabajo debemos hacer (1) clic en el icono de inicio de PIO y seleccionar (2) +New Project.

[Creación de un nuevo proyecto de trabajo.]

Asigne un nombre de proyecto (por ejemplo PRJ-BLINKLED-V1) y seleccione la tarjeta o placa que se está usando. En nuestro caso, estamos usando DOIT ESP32 DEVKIT V1. El framework debe ser "Arduino" para poder utilizar las librerías de Arduino. Puede elegir la ubicación predeterminada para guardar su proyecto o una ubicación personalizada para almacenar todos sus proyectos. Haga clic en "Finalizar".

[Creación de un nuevo proyecto de trabajo.]

La creación del proyecto por primera vez puede tardar varios minutos. El sistema valida e instala librerías necesarias para el uso de la tarjeta, por lo que asegúrese de tener una buena conexión a internet. Es posible que VS Code pregunte (1) si el contenido de la carpeta donde se almacenan los archivos es una carpeta segura y que se confía en los autores que desarrollaron el proyecto, a lo que debe seleccionar que sí confía. Luego, (2) se debe poder acceder al proyecto PRJ-BLINKLED-V1 desde la pestaña Explorador.

[Acceso al proyecto desde la ventana del explorador.]

VS Code y PlatformIO tienen una estructura de carpetas diferente a la del proyecto .ino estándar en el IDE Arduino. Si hace clic en la pestaña Explorador, verá todos los archivos que se crearon en la carpeta de su proyecto.

Archivo platformio.ini

El archivo platformio.ini es el archivo de configuración PlatformIO para su proyecto. Muestra la plataforma, la tarjeta, el framework y librerías a usar dentro de su proyecto. También puede agregar otras configuraciones, como bibliotecas que se usarán, opciones de carga, cambiar la velocidad en baudios del monitor serie con la que se va comunicar entre otras.

[Archivo configuración del proyecto: platformio.ini]

En este caso podemos ver que:

Para poder intercambiar/comunicar datos entre el computador y la tarjeta ESP32 es necesario generar mensajes que se transmiten de forma serial. Dado que el protocolo que se utiliza para esto es el de una UART tradicional, se puede configurar la velocidad con la cual se comunican computador y tarjeta. Esto ocurre por el mismo cable de alimentación que se conecta entre el computador y la tarjeta. Normalmente la velocidad que viene configurada es de 9600 baudios. Si desea utilizar una velocidad de baudios de 115200 en su monitor serie, solo necesita agregar la siguiente línea a su archivo platformio.ini. Después de eso, asegúrese de guardar los cambios realizados en el archivo presionando Ctrl + S.

monitor_speed = 115200

En este archivo, también puede incluir el identificador de las bibliotecas o librerías que usará en su proyecto usando el parámetro lib_deps, como veremos más adelante.

Carpeta src.

La carpeta src es su carpeta de trabajo. Dentro de la carpeta src , hay un archivo main.cpp . Ahí es donde se escribe el código. Haga clic en ese archivo. La estructura de un programa Arduino debería abrirse con las funciones setup() y loop(). En PlatformIO, todos los programas que usen el framework de Arduino deben comenzar con #include <Arduino.h>. Cuando se crea el proyecto, el sistema usa un código de ejemplo para el archivo main.cpp. Este código lo vamos a sobreescribir para empezar a programar el siguiente ejemplo.

[Carpeta src y archivo main.cpp]

Carga de código usando PlatformIO IDE: ESP32.

Copie el siguiente código en su archivo main.cpp, eliminando lo que había previamente. Es recomendable copiar este código manualmente o por segmentos de código, para que pueda ver el autocompletado y otras características interesantes del IDE en acción. Además, si tiene un error de sintaxis en algún lugar de su programa, se subrayará en rojo incluso antes de compilar y podrá revisar en cada línea de programación.. Después de eso, presione Ctrl + S o vaya a Archivo > Guardar para guardar el archivo.

 #include <Arduino.h>

// put function declarations here:
#define LED 2

void setup() {
  // put your setup code here, to run once:
  pinMode(LED,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  delay(500);
  digitalWrite(LED,HIGH);
  delay(500);
  digitalWrite(LED,LOW);

}

[Código para el proyecto Blink Led]

Este código nos permite hacer que parpadee el LED integrado en la tarjeta cada segundo, el cual está conectado a GPIO 2, que es uno de los pines de la misma.

Si no lo ha notado, en su entorno de VS Code aparecen unos nuevos íconos en la parte inferior izquierda, con comandos de PlatformIO.

Esto es lo que hacen los íconos de izquierda a derecha (1):

PlatformIO Home: Inicio. Permite ir/abrir la ventana de inicio de la extensión PlatformIO.

PlatformIO Build: Construir/compilar programa. Permite compilar un código y verificar posibles advertencias (warnings) o errores.

PlatformIO Upload: Subir/Cargar programa. Permite programar la tarjeta a partir del código implementado.

PlatformIO Clean: Limpiar proyecto. Permite reiniciar, borrar o limpiar archivos temporales que se van generando durante el proceso de compilación y programación.

PlatformIO Serial Monitor: Monitor serial. Permite conectarse de forma serial a la tarjeta desde el computador. Sin embargo este monitor permite que el computador reciba mensajes desde la tarjeta, pero no permite enviarlos. Es recomendable usar la extensión Serial Monitor instalada previamente para tener mejor control de la comunicación entre la tarjeta y el computador, al permitir esta configurar más elementos.

Alternativamente, también puede hacer clic en el ícono PIO de la barra lateral izquierda para ver todas las tareas de PlatformIO. Finalmente, en la ventana terminal (2) podrá ver el resultado de construir/compilar el programa, subir/cargar programa etc.

[Iconos de PIO y ventana terminar de resultados.]

Build/Construir/compilar el código: Cuando compile (1) su código en la ventana del terminal (2) podrá ver un mensaje como el que se muestra a continuación:

[Ícono de Build/compilar y ventana terminal de resultados.]

Detección del puerto COM (windows) o tty (linux)

PlatformIO detectará automáticamente el puerto al que está conectada su placa. Para verificar los dispositivos conectados, puede ir a PIO Home y hacer clic en el ícono Dispositivos. En esta ventana podrá ver el puerto COM o puerto tty donde está conectada su tarjeta. Asegúrese que en la barra inferior izquierda aparezca dicho puerto.

[Ventana que muestra dispositivos o tarjetas conectadas al computador.]

Haga clic en el icono de Upload/Subir/Cargar (1). Si la tarjeta es detectada correctamente y el código se carga correctamente en la tarjeta, debería recibir el siguiente mensaje (2):

[Ícono de Upload/Cargar y ventana terminal de resultados.]

Después de cargar el código, el LED integrado del ESP32 debería parpadear cada segundo.

[Fotografía Tarjeta/Placa ESP32 programada.]

Solución de problemas

  1. Si intenta cargar un nuevo programa en la ESP32 y recibe este mensaje de error "A fatal error occurred: "Failed to connect to ESP32: Timed out... Connecting...""; significa que su ESP32 no está en modo de flasheo/carga. Habiendo seleccionado el nombre de la placa y el puerto COM correctos, siga estos pasos:

Se deberá repetir esa secuencia de botones cada vez que se quiera subir un nuevo programa. Es posible evitar presionar el botón de BOOT cada vez que se carga un programa en la ESP32, pero se debe hacer una conexión adicional a la tarjeta conectando un condensador electrolítico de 10uF entre los pines de tierra y EN.

  1. Si recibe el error "COM Port not found/not available", es posible que necesite instalar los controladores CP210x o CH340. La mayoría de las placas ESP32 utilizan los controladores CP2101 o CH340. Verifique el convertidor de USB a UART en su placa e instale los controladores correspondientes. Encontrará instrucciones fácilmente con una búsqueda rápida en Google. Por ejemplo, "instalar los controladores CH340 de Windows". En linux normalmente estos drivers/controladores vienen instalados.

Abrir una carpeta de proyecto

Para abrir una carpeta de proyecto existente en PlatformIO, abra VS Code, vaya a Inicio de PlatformIO y haga clic en Abrir carpeta . Navegue por los archivos y seleccione la carpeta de su proyecto. Esto le permitirá llegar al punto de compilar, cargar el programa etc.

El monitor serial en la consola de VS Code es una herramienta esencial que se utiliza para la comunicación entre el computador y el ESP32 a través del puerto serial. Sirve para varios propósitos:

Cambio de la velocidad en baudios del monitor serie – PlatformIO IDE

La velocidad en baudios predeterminada utilizada por PlatformIO es 9600. Sin embargo, es posible configurar un valor diferente como se mencionó anteriormente. En el Explorador de archivos, en la carpeta de su proyecto, abra el archivo platformio.ini y agregue la siguiente línea:

monitor_speed = baud_rate

Por ejemplo:

monitor_speed = 115200

Actualice el archivo plarformio.ini para trabajar a una velocidad de 115200 y guarda el archivo.

monitor_speed = 115200

[Archivo platformio modificado con velocidad transmisión de datos a 115200.]

A continuación vamos a adicionar comunicación serial con el ESP32 usando el mismo ejemplo anterior. Copie el siguiente código en su archivo main.cpp, eliminando lo que había previamente.

 #include <Arduino.h>

// put function declarations here:
#define LED 2

void setup() {
  // put your setup code here, to run once:
  Serial.begin(115200);
  pinMode(LED,OUTPUT);
}

void loop() {
  // put your main code here, to run repeatedly:
  digitalWrite(LED, HIGH);
  Serial.println("LED is on");
  delay(1000);
  
  digitalWrite(LED, LOW);
  Serial.println("LED is off");
  delay(1000);

}

[Código Blink Led con comunicación serial entre la ESP32 y el computador.]

Ejecute las acciones de compilación y carga del programa en la ESP32. Haga clic en el icono del "SERIAL MONITOR" (1). Asegúrese que configurar el puerto serial (2) que se comunica con la tarjeta ESP32. Seleccione la velocidad de transmisión (115200 baudios) (3) y haga clic en "Start Monitoring" (4). Esto permitirá ver mensajes enviados por la ESP32 en la consola serial (5), con los mensajes del programa sobre el estado actual del LED.

[Configuración y verificación de la comunicación serial.]

El MPU6050 es un dispositivo sensor de movimiento microelectromecánico (MEMS) que contiene tanto un acelerómetro de tres ejes como un giroscopio de tres ejes en la misma unidad. Fabricado por Invensense, este sensor se comunica a través de I2C o SPI y es conocido por su alta precisión, bajo costo y facilidad de integración en sistemas embebidos.

Características.

Aplicaciones.

El MPU6050 se utiliza ampliamente en una variedad de aplicaciones debido a su capacidad para proporcionar medidas precisas de orientación y movimiento:

Funcionamiento.

El MPU6050 funciona utilizando estructuras microscópicas que cambian su capacitancia cuando se mueven bajo la influencia de fuerzas externas. Estos cambios son convertidos en señales eléctricas que se pueden medir y cuantificar:

Además de sus funciones principales de seguimiento de movimiento, el MPU6050 también incluye un sensor de temperatura incorporado (que permite controlar la temperatura del dispositivo y tomar las medidas adecuadas para evitar el sobrecalentamiento), filtros digitales programables y un búfer FIFO integrado para almacenar datos.

La siguiente es una breve descripción de cada pin en el MPU6050:

A continuación vamos a crear un proyecto para el uso de la ESP32 con un acelerómetro y una pantalla OLED. Los materiales necesarios son:

El ejemplo permitirá ver en la pantalla OLED los datos de los 3 ejes del acelerómetro y del giróscopo a medida que se realiza el movimiento de la tarjeta. Adicionalmente se podrá ver por el puerto serial del computador los mismos datos a una velocidad de 96010 baudios.

Preparación de la parte hardware.

A continuación se presenta el circuito para poder desarrollar el ejemplo. La forma más fácil de realizar el montaje es hacerlo sobre un protoboard o placa de pruebas. Esta placa permite fácilmente realizar las conexiones necesarias. Recuerde que las tarjetas ESP32, MPU65050 y la pantalla OLED deben tener sus pines de interconexión soldadas. En caso contrario debería soldar las correspondientes regletas para poder colocarlas en el protoboard. También existe la alternativa de conectar las tres tarjetas por medio de cables o jumpers, sin embargo recuerde que se deberían preparar cables especiales dado que un cable llega a dos puntos diferentes. El circuito sería el siguiente, donde la alimentación de la electrónica viene por el puerto USB. La programación igualmente se realiza por ese puerto.

[Circuito para el ejemplo ESP32+MPU6050+OLED.]

Instalación de bibliotecas ESP32 en PlatformIO IDE.

Es posible y en muchos casos necesario basar su código en el uso de bibliotecas o librerías existentes. Adicionalmente PlatformIO tiene varios ejemplos relacionados con las librerias. En este caso vamos a usar las librerías del acelerómetro MPU6050 y la pantalla OLED. Siga el siguiente procedimiento para instalar bibliotecas en PlatformIO IDE.

A continuación vamos a crear un proyecto empezando nuevamente desde el inicio. Asigne un nombre de proyecto (por ejemplo PRJ-MPU6050-OLED-V1) y seleccione la tarjeta o placa que se está usando. En nuestro caso, estamos usando DOIT ESP32 DEVKIT V1. El framework debe ser "Arduino" para poder utilizar las librerías de Arduino. Puede elegir la ubicación predeterminada para guardar su proyecto o una ubicación personalizada para almacenar todos sus proyectos. Haga clic en "Finalizar".

[Creación del proyecto desde PlatformIO.]

Aparecerá el archivo main.cpp que trae como ejemplo platformio:

[Archivo main.cpp luego de crear un nuevo proyecto.]

Haga clic en el icono de Inicio para ir a PlatformIO Home. Haga clic en el icono de Bibliotecas en la barra lateral izquierda (1). Busque la biblioteca que desea instalar, en este caso escriba MPU6050 (2). Seleccione la biblioteca necesaria, en este caso vamos a usar la librería Adafruit MPU6050 (3).

[Selección de librerías para uso del MPU6050 y pantalla OLED.]

Una vez seleccionada la librería haga clic en Add to project.

[Instalación de librería en el proyecto de trabajo (1).]

A continuación seleccione el proyecto donde está trabajando (1) y seleccione Add (2). Esto instalará la librería en el proyecto seleccionado. Este proceso puede tomar varios minutos.

[Instalación de librería en el proyecto de trabajo (2).]

Puede verificar en el archivo platformio.ini que la librería se ha adicionado.

[Verificación de uso de librería en el archivo platformio.ini.]

En la ventana de librerías, se pueden buscar algunos ejemplos que vienen ya dados. Se puede seleccionar cualquier ejemplo y aparecerá el archivo main.cpp correspondiente al ejemplo. Seleccione en este caso el ejemplo MPU6050_oled, el cual es un ejemplo que nos muestra el uso del MPU6050 y permite visualizar datos en la pantalla OLED. Copie el contenido del ejemplo en el archivo de su proyecto main.cpp.

[Visualización y copia del ejemplo MPU6050_oled a su proyecto de trabajo.]

Ejecute Build/Compilar. Asegúrese de tener conectada la tarjeta ESP32 a su computador y que VS Code reconoce bien el puerto COM o tty. Ejecute Upload/Cargar para programar la tarjeta y verifique funcionamiento.