Uso de PlatformIO en VS Code

Agustin Bassi

Feb 05, 2021 ‧ 22 min estimados ‧ #platformio #pio #develop #arduino #esp32

Contenido

Objetivos

PlatformIO (PIO)

Conceptos básicos

Proyectos

Inspeccionar

Bibliotecas

Placas

Plataformas

Dispositivos

Crear un proyecto

Estructura

Programa de ejemplo

Compilación

Descargar el código

Instalar bibliotecas

Otras opciones

Trabajar con el CLI

Conclusiones

Bibliografía

Licencia

Objetivos

PlatformIO es un entorno de desarrollo para sistemas embebidos ampliamente utilizado. Lo que vas a ver en este documento son los siguientes temas:

PlatformIO (PIO)

PlatformIO es un ecosistema de desarrollo especialmente útil para sistemas embebidos que te ofrece un entorno de trabajo unificado independiente del hardware y software que utilices. Se encarga de manejar la descarga de bibliotecas, la instalación de los toolchains adecuados, la compilación y linkeo del código fuente, la detección automática de puertos, la descarga del código a la placa y muchas otras acciones.

Es una herramienta multiplataforma que se puede instalar de manera independiente mediante una interfaz de comandos (CLI) o bien se puede integrar en varios editores de texto como Visual Studio Code, Atom, Eclipse, y otros.  Entre sus principales características se encuentran las siguientes:

Esta imagen extraída de su página oficial - y en constante actualización - te muestra algunas estadísticas actuales de la plataforma.

La arquitectura de la plataforma está armada en capas, y en esta figura podés ver un diagrama detallado que las describe.

Tal como vimos, PIO se puede instalar directamente en el sistema y ser utilizado a través de la línea de comandos (CLI), pero resulta muy conveniente poder integrarlo en un IDE de desarrollo para combinar en el poder de edición de código de estas herramientas junto con el manejo simplificado de PIO para desarrollar proyectos embebidos. Por esa razón, en este documento vamos a mostrarte todas las acciones que podés realizar con PlatformIO utilizando Visual Studio Code (VSC) que es uno de los IDEs más utilizados.

Si todavía no instalaste PIO en tu sistema, te recomendamos seguir nuestra guía de instalación paso a paso que muestra cómo instalar PIO como una extensión de VSC.

Conceptos básicos

En esta sección vamos a ver algunas de las vistas principales de PIO dentro de VSC y qué podés realizar con cada una. Como primera medida, cuando abrís VSC luego de haber instalado PIO te vas a encontrar con una pantalla similar a la siguiente.

[a]

Tanto el ícono lateral izquierdo como el inferior te llevan al home de PIO. El ícono inferior es el toolbar o barra de tareas, y cuando tengas proyectos funcionando aparecerán ahí los íconos para poder realizar otras acciones como compilar, cargar el código a la placa, y otros.

En la pantalla de inicio, a través de sus botones podés crear un nuevo proyecto, importar uno desde Arduino, abrir un proyecto existente o acceder a los ejemplos precargados. Fijate también que el checkbox Show at startup te permite controlar si PIO se carga cada vez que abrís una ventana de VSC. También en esta ventana podés ver la versión de las herramientas.

Veamos ahora cada una de las secciones principales que podemos encontrar en la pantalla de inicio de PIO.

Proyectos

La sección de proyectos muestra una lista de los proyectos que tenés en el sistema. Incluso desde esta ventana podés crear uno o agregar uno existente. En el caso que tengas proyectos también podés editar su descripción para que te sea más fácil reconocerlo a futuro. En esta imagen podés ver la ventana de proyectos.

Inspeccionar

La sección de inspect sirve para analizar el código fuente de un proyecto y en función de la plataforma donde lo estés utilizando elaborar un reporte sobre consumo de memoria y análisis de código. Por lo general esta herramienta se suele usar cuando te encontrás al límite de capacidad con una plataforma y querés buscar formas de optimizar la aplicación o bien para saber en qué punto te encontras si decidís ampliar un proyecto. En esta imagen podés ver un ejemplo de reporte elaborado con la herramienta.

Bibliotecas

La sección de libraries es el gestor de bibliotecas, y sirve para buscar y descargar diferentes utilidades de código dentro de tus proyectos. A diferencia de otras herramientas - como Arduino IDE - el gestor te permite instalar la biblioteca dentro de cada proyecto sin que esta instalación se superponga con los demás proyectos existentes.

Esta forma de instalación resulta clave, ya que es común encontrarte con versiones de código que funcionan en un proyecto pero presentan incompatibilidades en otro. Con la herramienta podés incluso instalar una versión específica de cada biblioteca y también setear la configuración para que sea retrocompatible con versiones anteriores o soportar todas las nuevas versiones que existan. Podemos pensar como que cada proyecto tiene su "entorno virtual" donde están alojadas las dependencias de la aplicación. En esta imagen podés ver cómo se ve esta pantalla.

Placas

La sección de boards representa las cientos de placas que soporta PlatformIO. Esto quiere decir que ya existe la documentación y la configuración necesaria para que se pueda programar con PIO. Seleccionar algún elemento de la lista te lleva directamente a la documentación oficial. Si observas en la parte superior, te muestra una nota de aviso que si tenés una placa propia podés enviar los detalles necesarios para que la incluyan dentro de la documentación oficial. En esta imagen podemos ver cómo se ve la pantalla de boards.

Plataformas

La sección de plataformas te muestra las que tenés instalada en el sistema. Una plataforma suele ser un microcontrolador o arquitectura de procesador en particular en el que los proyectos de PlatformIO pueden compilarse para ejecutarse. Cada proyecto tenés que especificar el nombre de la plataforma en el archivo platformio.ini. En esta imagen vemos cómo se ve la pantalla de plataformas.

Dispositivos

La sección devices te muestra los dispositivos que tenés conectado en este momento a tu máquina de desarrollo. Por lo general vas a programar un dispositivo a la vez, por lo que rara vez tengas más de un dispositivo en esta lista. En esta imagen podemos ver cómo se ve la pantalla devices.

Crear un proyecto

Para crear un proyecto hay varias opciones. En esta sección te vamos a mostrar cómo crearlo a partir del wizard, y para ello el primer paso es dirigirte a la pantalla de inicio de PIO y presionar el botón New Project. En el popup siguiente vas a poder seleccionar el nombre del proyecto, la placa a utilizar, el framework de desarrollo y la ubicación. Para mostrarte un ejemplo, vamos a crear un proyecto que se llama esp32-blink, usando una placa NodeMCU-32S con el framework Arduino y guardando el proyecto en la ubicación por defecto.

Estructura

La inicialización del proyecto lleva unos instantes, y una vez que finalice vas a ver la estructura en el explorador de archivos y se abrirá automáticamente el archivo platformio.ini para que revises la configuración inicial. Esta imagen te muestra cómo está estructurado.

Veamos ahora qué son cada directorio y archivos de la estructura de los proyectos:

Programa de ejemplo

Agrega el siguiente contenido al archivo src/main.cpp que tiene una aplicación de ejemplo para inicializar el puerto serie y configurar el LED de la placa como salida, y hacer un blink cada 500 milisegundos.

#include <Arduino.h>

#define INIT_DELAY       3000

#define SERIAL_BAURDATE  115200

#define LED_ONBOARD      2

#define LED_DELAY        500

void setup(){

  delay(INIT_DELAY);

  Serial.begin(SERIAL_BAURDATE);

  pinMode(LED_ONBOARD, OUTPUT);

  Serial.println("\n\n\rWelcome to Blink example");

  digitalWrite(LED_ONBOARD, false);

}

void loop(){

  digitalWrite(LED_ONBOARD, true);

  Serial.println("LED on");

  delay(LED_DELAY);

  digitalWrite(LED_ONBOARD, false);

  Serial.println("LED off");

  delay(LED_DELAY);

}

Podés cambiar los settings (#define) del programa a los valores que necesite tu placa.

Compilación

Una vez que tengas el código listo es el momento de compilarlo. De manera visual podés realizar la compilación del programa desde el toolbar inferior izquierdo presionando el botón de build. Así mismo podés acceder a la extensión de PIO desde el menú lateral izquierdo y realizar la compilación desde la opción Build es la visualiza en la izquierda. En esta imagen podés ver resaltado ambas opciones para que puedas seleccionarlas.

Cualquiera de las dos acciones que hayas realizado comienzan el proyecto de compilación del proyecto. En algunos casos - sobre todo si es el primer proyecto que estás compilando - el proceso puede demorar unos instantes ya que PIO necesita descargar el toolchain correspondiente para realizar la compilación y linkeo de las herramientas. Si no hay ningún inconveniente, deberías ver una imagen similar a la siguiente.

Descargar el código

De manera similar a la compilación, la descarga del código a la placa se puede realizar desde el toolbar inferior o desde el menú lateral. Para esta parte es necesario que conectes tu placa a la estación de desarrollo y revises si es reconocida por PIO yendo a la ventana de devices que vimos anteriormente. Una vez que el dispositivo esté conectado podés presionar la opción de Upload como vemos en esta imagen.

Si tu aplicación cuenta con salida hacia el puerto serie tal vez te convenga seleccionar la opción Upload and Monitor, que además de descargar el código a la placa abre automáticamente el monitor serie para que puedas interactuar con el programa.

Si no se encuentra ningún error en particular, al finalizar el proceso de descarga del proyecto se comienza a visualizar el monitor serie, y en esta imagen podés ver la terminal con el proyecto funcionando.

Instalar bibliotecas

La gestión de bibliotecas es una parte fundamental de PIO y uno de los factores más importantes a la hora de trabajar con entornos embebidos. Descargar bibliotecas de terceros te permite ampliar la funcionalidad de tu proyecto en varios aspectos.

A diferencia de otras herramientas, en PlatformIO es posible instalar las librerías de manera individual a cada proyecto. Esto te permite tener una suerte de entorno virtual por cada proyecto embebido que tengas sin que las versiones de una biblioteca impacten en otros proyectos.

En este ejemplo vamos a importar la biblioteca PubSubClient de MQTT dentro del proyecto esp32-blink que creamos previamente. Como primera medida tenés que ir a la sección Libraries del home de PIO y escribir "pubsubclient" en la barra de búsqueda y seleccionarla  como podés ver en esta imagen.

Fijate además que la herramienta te permite visualizar todas las bibliotecas del Registry, ver las que tenés ya instaladas, las librerías que vienen por defecto (Built-in) y los Updates sobre las bibliotecas existentes.

Una vez que selecciones la biblioteca te vas a encontrar con la sección superior que describe brevemente de qué se trata la misma. También vas a encontrar el botón de Add to Project para poder añadirla al proyecto esp32-blink. En la sección inferior te vas a encontrar con otras opciones, como ejemplos para utilizar la biblioteca, las opciones de instalación para instalar una versión o tipo de versiones en particular, los headers que necesitas incluir en tu código fuente para utilizarla y también el Changelog que te muestra las actualizaciones que se fueron realizando. La imagen siguiente te muestra las secciones correspondientes.

Una vez que explores las opciones sobre cada biblioteca es momento de incluirla en el proyecto esp32-blink. Para ello selecciona el botón Add to Project y luego el proyecto esp32-blink y presioná Add. Esta imagen te muestra el proceso.

Agregar la librería al proyecto tomará unos instantes y cuando el proceso finalice se incluirá dentro del directorio .pio/libdeps como podemos ver en la imagen siguiente.

Dentro del directorio se van a ir guardando todas las librerías que agregues al proyecto. También podrás notar que en el archivo platformio.ini se agregó la dependencia de la biblioteca correspondiente.

Esta forma de agregar la biblioteca hace que solamente se agregue al controlador de versiones la referencia a la dependencia dentro del archivo platformio.ini sin que necesariamente tengas que agregar ese código dentro de tu proyecto. Al momento de compilar el proyecto por primera vez se realizará la descarga correspondiente y la posterior compilación, de manera que no tenés que preocuparte por su descarga.

Si venís del mundo embebido y desarrollaste proyectos anteriormente, podrás notar la potencia y escalabilidad que tiene esta plataforma respecto a otras herramientas, donde la gestión de bibliotecas, la compilación y el linkeo de las mismas resultaba en grandes dolores de cabeza.

Otras opciones

Además de las opciones que ya vimos, y que son las más importantes a la hora de trabajar con PIO existen otras acciones que podés realizar con la herramienta. Veamos algunas de ellas.

Trabajar con el CLI

Si te gusta trabajar con la línea de comandos en vez de realizar las acciones de manera visual a través de los botones, podés abrir una terminal dentro del proyecto y ejecutar los comandos desde ahí. Para abrir una terminal podés hacerlo desde el toolbar inferior o bien desde el menú lateral izquierdo, en la sección Miscellaneous->New Terminal, como podemos ver en esta imagen.

Una vez en la terminal vas a tener cargado el contexto de PlatformIO. A continuación te listamos algunos comandos útiles para que puedas usar desde el CLI.

# muestra la ayuda y cómo podés usar la herramienta
pio --help
# compila el proyecto
pio run
# carga el proyecto en la placa
pio run --target upload
# carga el proyecto en la placa y abre el monitor serie
pio run --target upload && pio device monitor
# limpia el directorio de compilación
pio run --target clean

Conclusiones

En este documento intentamos mostrarte de manera general el uso de PlatformIO que consideramos una gran herramienta para el desarrollo de proyectos embebidos. A medida que la uses te vas a ir familiarizando con el resto de las tareas y vas a poder llevar a cabo tus proyectos de manera profesional. Para hacer un resumen, en este artículo vimos los siguientes temas.

Bibliografía

Licencia

Este material es distribuido bajo licencia Creative Commons BY-SA 4.0. Podés encontrar detalles sobre el uso del material en este link.

[a]cambiar imagen