Trabajando con Platformio
Sobre Platformio
Es una cross-platform, cross-architecture, multiple framework que permite el desarrollo de aplicaciones para sistemas embebidos. La mayor ventaja de esto es que la herramienta permite que el programador pueda trabajar con diferentes plataformas (arduino, esp8266, ESP32, rPi, etc.) usando el mismo IDE siguiendo el siguiente ciclo de desarrollo:
Seleccionar la board(s) de interés en el archivo platformio.ini (Project Configuration File).
Basado en la lista de boards, PlatformIO descargará las toolchains y las instalará automaticamente.
Programar, compilar, preparar y subir la aplicación a las boards de interés.
Instalación
Existe muy buena documentación sobre cómo llevar a cabo la instalación de platformio la cual se encuentra en https://platformio.org/install. Por lo tanto esta sección lo único que hicimos fue dedicarnos a copiar y pegar lo que allà se explica.
Descargar el Microsoft Visual Studio Code pues el PlatformIO IDE está construido sobre este.
Abrir el VSCode Package Manager
Buscar la extensión oficial del platformio ide
Instalar el PlatformIO IDE.

Trabajando con Platformio
En el siguiente enlace se muestra una guÃa rápida para trabajar con platformio. Como esta guia esta enfocada en el arduino, vamos a seguir el tutorial Quick start with NodeMCU v3 (ESP8266) , Arduino ecosystem and PlatformIO IDE (enlace) en el cual se explica cómo programar el NodeMCU usando platformio. Veamos los pasos a continuación:
Ubicarse en el home de platformio:

Crear un nuevo proyecto (New project) y configurarlo, para el caso:
Name: blink
Board: NodeMCU 1.0 (ESP-12E Module)
Framework: Arduino.
Luego de esto se da click en finish.

Nota: Si lo que se desea es usar otra localización diferente a la que viene por defecto, se puede deseleccionar la casilla de Location que define esto y se procede a seleccionar la ruta.
Una vez se da finish, si todo está bien se descargan las dependencias y se construye la estructura del proyecto. Dentro de los archivos generados se encuentra el archivo de configuración del proyecto platformio.ini (para más información sobre puede consultar el siguiente enlace). A continuación se muestra el archivo de configuración, generado para nuestro ejemplo:

Otro archivo de importancia generado es el archivo main.cpp
(esta se encuentra en el directorio src
) el cual contiene la plantilla del código fuente que modificaremos para definir la lógica de nuestra aplicación:

Para el caso, lo que deseamos hacer que parpadee el led que viene integrado con la tarjeta del NodeMCU con un periodo de un segundo. A continuación, se muestran los pines del NodeMCU. Para el caso, el pin asociado al led integrado en la tarjeta es el GPIO2.

De este modo, el programa a subir a la tarjeta será el siguiente:
#include <Arduino.h>
#define LED 2 // Assign LED to pin GPIO2 (Built-in LED)
void setup() {
// put your setup code here, to run once:
pinMode(LED, OUTPUT);
}
void loop() {
// put your main code here, to run repeatedly:
digitalWrite(LED, LOW);
delay(500);
digitalWrite(LED, HIGH);
delay(1000);
}
Asà el código modificado quedará:

Finalmente, solo resta hacer el build y el upload empleando los botones destinados para ello. La siguiente figura muestra como hacer el build (
CTRL + ALT + b
):

La siguiente figura muestra como hacer el upload (CTRL + ALT + u
):
Si el proceso de upload (carga del programa en la plataforma) está bien, saldrá en la terminal algo como lo siguiente:

Casos de interes
A continuación, se analizarán dos casos que son muy comunes en muchas de las aplicaciones que se harán a lo largo del curso:
Uso del puerto serial.
Uso del wifi.
Uso del puerto serial
Para tratar este caso, partamos del siguiente problema.
Problema: Hacer una aplicación en arduino que permita prender y apagar el led integrado a la tarjeta NodeMCU mediante las instrucciones mostradas en la siguiente tabla:
h
Enciende el led
l
Apaga el led
La codificación del procedimiento es similar a la realizada en el ejemplo anterior, pero, en este caso el código fuente a codificar se muestra a continuación, se muestra a continuación:
#include <Arduino.h>
#define LED 2 // Assign LED to pin GPIO2 (Built-in LED)
byte comando;
void setup() {
// initialize serial communication at 9600 bits per second:
Serial.begin(9600);
Serial.write("Configurando puerto serial a 9600bps\n");
// initialize digital pin LED as an output.
pinMode(LED, OUTPUT);
}
void loop() {
// check if data has been sent from the computer
if (Serial.available()) {
// read the most recent byte
comando = Serial.read();
if(comando == 'h') {
digitalWrite(LED, HIGH);
Serial.write("Led encendido\n");
}
else if(comando == 'l') {
digitalWrite(LED, LOW);
Serial.write("Led apagado\n");
}
}
}
Es buena práctica que una vez codificado el código, este sea construido (CTRL + ALT + b
en linux) antes de que sea subido a la plataforma.
La importancia de este problema radica en que se va a hacer uso del puerto serial, por lo que es necesario agregar las lÃneas para configurar el puerto serial en el archivo platformio.ini. Inicialmente, es bueno verificar cual es el puerto serial al que quedó asignado el NodeMCU una vez que este fue conectado lo cual depende del sistema operativo (link).
El puerto USB que aparezca al realizar la verificación, es aquel que está conectado el NodeMCU (supongamos que el resultado dio ttyUSB0).
Inicialmente si abrimos el archivo platformio.ini tendremos algo como lo siguiente:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
Teniendo en cuenta que el puerto de trabajo será el ttyUSB0
(para este ejemplo) y la velocidad serial será de 9800 bps. Se agregaron las siguientes lÃneas en el archivo de configuración (para más información de como configurar el monitor serial puede consultar el enlace Monitor Options):
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
; Custom Serial Monitor port
monitor_port = /dev/ttyUSB0
; Custom Serial Monitor speed (baud rate)
monitor_speed = 9600
De este modo el archivo platformio.ini queda asÃ:

Una vez hecho esto, el paso siguiente consistirá en subir el código al NodeMCU (CTRL + ALT + u
en linux).
De este modo solo resta probar en el monitor serial, para ello se da click en el botón resaltado (o se ejecuta la combinación de teclas CTRL + ALT + s
) en la siguiente figura:

Finalmente, una vez llamado el monitor serial, se hace un reset del NodeMCU y se ejecuta la aplicación de acuerdo a la lógica programada:

Cuando culmine la prueba con la combinación de letras CTRL + C
puede salir del monitor serial.
Uso WiFi
El otro caso que es necesario analizar es la conexión por Wifi, esto debido al gran número de aplicaciones de IoT que se conectan inalámbricamente usando esta tecnologÃa. Como en muchos casos, Wifi es una librerÃa externa por lo que la clave, está en instalar y usar esta y otras librerÃas en el proyecto. Para más información puede consultar el enlace Library Manager.
Para nuestro caso vamos a adaptar el ejemplo descrito en la segunda parte del tutorial: Quick start with NodeMCU v3 (ESP8266), Arduino ecosystem and PlatformIO IDE.
Inicialmente, tal y como se ha realizado anteriormente, procedemos a crear un proyecto. El cual para el caso llamaremos wifi-test. Tal y como sucede inicialmente, el archivo platformio.ini tiene la siguiente configuración basica:

Como nuestro proyecto va a hacer uso de Wifi, es necesario agregar esta librerÃa, de modo que lo primero que se debe hacer es ir al gestor de librerÃas y descargarla. Para ello primero cargamos el home del platformio:

Una vez aparezca el home se presiona el botón del gestor de librerÃas:

Para buscar la librerÃa vamos al gestor de librerÃas y en el campo para la búsqueda digitamos la librerÃa o palabra clave de nuestro interés (cuadro amarillo). Como resultado aparecerá una lista de librerÃas, donde para nuestro caso procedimos a instalar la librerÃa WifiManager tal y como se muestra en la siguiente figura:

Para instalarla damos click en esta librerÃa (cuadro naranja) lo que hace que como resultado aparezca la siguiente pestaña. De modo que para instalar la librerÃa procedemos a dar click en el botón Install:

Luego podemos verificar que la libreria está instalada dando click en la pestaña Installed tal y como se muestra a continuación:

El siguiente paso consiste en agregar la librerÃa recién instalada en el archivo de configuración. Damos click en el nombre de la librerÃa (WifiManager):

Como se puede notar, aparecerá información relevante relacionada con esta librerÃa la cual está desplegada a lo largo de las pestañas (examples, installation, etc). Como lo que deseamos es instalar esta librerÃa para poder usar sus funciones en nuestro proyecto damos click en la pestaña installation:

Una vez allÃ, se procede a copiar la parte relacionada con lib_deps en el archivo de configuración (platformio.ini):

El archivo platformio.ini queda de la siguiente manera hasta el momento:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
lib_deps =
# Using a library name
WifiManager
# ... or using library Id
567
# ... or depend on a specific version
WifiManager@0.15.0
# Semantic Versioning Rules
# http://docs.platformio.org/page/userguide/lib/cmd_install.html#description
WifiManager@^0.15.0
WifiManager@~0.15.0
WifiManager@>=0.15.0
Con lo anterior ya es posible usar las funciones propias de esta libreria, asi que procedemos a codificar nuestro código fuente ejemplo en el archivo main.cpp
(no olvidar adaptar el ssid y el password de su red local):
#include <Arduino.h>
#include <ESP8266WiFi.h> // Include the Wi-Fi library
#include <ESP8266WebServer.h>
#include <DNSServer.h>
const char* ssid = "SSID"; // The SSID (name) of the Wi-Fi network you want to connect to
const char* password = "PASSWORD"; // The password of the Wi-Fi network
void setup() {
Serial.begin(115200); // Start the Serial communication to send messages to the computer
delay(10);
Serial.println('\n');
WiFi.begin(ssid, password); // Connect to the network
Serial.print("Connecting to ");
Serial.print(ssid); Serial.println(" ...");
int i = 0;
while (WiFi.status() != WL_CONNECTED) { // Wait for the Wi-Fi to connect
delay(1000);
Serial.print(++i); Serial.print(' ');
}
Serial.println('\n');
Serial.println("Connection established!");
Serial.print("IP address:\t");
Serial.println(WiFi.localIP()); // Send the IP address of the ESP8266 to the computer
}
void loop() {
// put your main code here, to run repeatedly:
}
Como se podrá notar, se está haciendo uso del monitor serial por lo que es necesario agregar en el archivo de configuración (platformio.ini) las lÃneas necesarias para configurar el monitor serial:
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:nodemcuv2]
platform = espressif8266
board = nodemcuv2
framework = arduino
lib_deps =
# Using a library name
WifiManager
# ... or using library Id
567
# ... or depend on a specific version
WifiManager@0.15.0
# Semantic Versioning Rules
# http://docs.platformio.org/page/userguide/lib/cmd_install.html#description
WifiManager@^0.15.0
WifiManager@~0.15.0
WifiManager@>=0.15.0
; Custom Serial Monitor port
monitor_port = /dev/ttyUSB0
; Custom Serial Monitor speed (baud rate)
monitor_speed = 115200
Una vez hecho esto ya es posible verificar (CTRL +ALT + b
) y subir el codigo (CTRL +ALT + u
) de modo que si todo está bien aparecera algo como lo que se muestra en la siguiente figura:

Finalmente se llama al monitor serial (CTRL + ALT + s
) y se procede a dar un reset a la placa NodeMCU:

Ya lo que resta es cacharrear y adaptar esto a su proyecto en cuestión.
Referencias
Last updated