December 27, 2018

Preparando el entorno con platform.io

Para la programación de arduino vamos a utilizar platform.io. Aunque dispone de entornos integrados de desarrollo (IDE) que no hemos probado, nosotros vamos a utilizar únicamente el PlatformIO Core. Con esta herramienta, disponemos de un conjunto de comandos en la terminal para compilar, subir el firmware al arduino, monitorizar el puerto serie… etc. Y podremos utilizar nuestro editor de textos favorito. No hay más razón para esto que una preferencia personal, aunque ciertamente el ArduinoIDE se queda muy corto en un proyecto que incluya varios ficheros.

La instalación se realiza desde el gestor de paquetes de python (pip).

pip install -U platformio

Una vez instalado, creamos una carpeta para nuestros ficheros, hacemos cd a la carpeta, e inicializamos el proyecto platformio para el procesador que utilizemos, en este caso, un arduino nano.

/home/user$ mkdir adefesio
/home/user$ cd adefesio
/home/user/adefesio$ pio boards | grep nano
nanoatmega168         ATMEGA168      16MHz     14KB    1KB    Arduino Nano ATmega168
nanoatmega328         ATMEGA328P     16MHz     30KB    2KB    Arduino Nano ATmega328
nanoatmega328new      ATMEGA328P     16MHz     30KB    2KB    Arduino Nano ATmega328 (New Bootloader)
nano32                ESP32          240MHz    4MB     320KB  MakerAsia Nano32
redbear_blenano2      NRF52832       64MHz     512KB   64KB   RedBearLab BLE Nano 2
/home/user/adefesio$ pio init --board nanoatmega328

The current working directory /home/user/adefesio will be used for the project.

The next files/directories have been created in /home/user/adefesio
include - Put project header files here
lib - Put here project specific (private) libraries
src - Put project source files here
platformio.ini - Project Configuration File

Project has been successfully initialized! Useful commands:
`pio run` - process/build project from the current directory
`pio run --target upload` or `pio run -t upload` - upload firmware to a target
`pio run --target clean` - clean project (remove compiled files)
`pio run --help` - additional information

/home/user/adefesio$  tree
.
├── include
│   └── README
├── lib
│   └── README
├── platformio.ini
├── src
└── test
    └── README

4 directories, 4 files
/home/user/adefesio$ 

Con el comando pio init –board __board__ platformio crea una estructura de directorios básica en la que pondremos nuestro código fuente y librerías. Como prueba inicial, creamos un main.cpp en la carpeta src

#include <Arduino.h>

void setup() {
    Serial.begin(115200);
}

void loop() {
    Serial.println("Hola mundo");
    delay(1000);
}

Una vez creado el fichero, desde la carpeta raiz del proyecto, podemos compilar con ‘pio run’. Si todo va bien, contectamos el arduino y subiremos el firmware con ‘pio run –target upload’, y comprobamos que efectivamente está ejecutando el loop escribiendo en el puerto serie.

/home/user/adefesio$ pio run
Processing nanoatmega328 (platform: atmelavr; board: nanoatmega328; framework: arduino)
---------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/atmelavr/nanoatmega328.html
PLATFORM: Atmel AVR > Arduino Nano ATmega328
HARDWARE: ATMEGA328P 16MHz 2KB RAM (30KB Flash)
(...)
Memory Usage -> http://bit.ly/pio-memory-usage
DATA:    [=         ]   9.7% (used 198 bytes from 2048 bytes)
PROGRAM: [=         ]   5.3% (used 1640 bytes from 30720 bytes)
====================================================================

/home/user/adefesio$ pio run --target upload
(...)
avrdude: safemode: Fuses OK (E:00, H:00, L:00)
avrdude done.  Thank you.

/home/user/adefesio$ pio device monitor --baud 115200
--- Miniterm on /dev/ttyUSB0  115200,8,N,1 ---
--- Quit: Ctrl+C | Menu: Ctrl+T | Help: Ctrl+T followed by Ctrl+H ---
Hola mundo
Hola mundo
Hola mundo

tip Para evitar tener que especificar la velocidad del puerto serie, anadimos la siguiente línea al fichero platformio.ini

monitor_speed = 115200