Tras varios montajes basados en Arduino con el uso de módulos Bluetooth y Wifi externos decidí adquirir un par de placas NodeMCU – ESP8266 que incorporan conectividad Wifi y BT pudiendo programarse desde el entorno arduino y existiendo mas que suficiente documentación al respecto. La idea es usarlas para controlar equipamiento domestico como la calefacción o la iluminación mediante conexión a la red wifi, lo que se conoce como Internet de las Cosas o IoT (Internet of Things).

El entorno arduino no soporta por defecto las placas de la familia esp8266, por lo que hay que instalar el soporte de la siguiente manera: en “Preferencias” añadimos en “Gestor de URLs Adicionales de Tarjetas” el siguiente enlace: http://arduino.esp8266.com/stable/package_esp8266com_index.json

Una vez hecho, en Herramientas->Placa->Gestor de Tarjetas nos aparece el soporte para esp8266 y lo tendremos que instalar.

Por fin tendremos la opcion de seleccionar placas basadas en esp8266, entre ellas “nodeMCU 1.0 – ESP-12E Module”

Como con cualquier placa, si queremos programar a bajo nivel, configurando, por ejemplo, timers a través de sus registros asociados no nos quedará otra que leernos el datasheet correspondiente. Si lo que vamos a hacer en cambio es utilizar librerías externas como las de Adafruit no notaremos apenas cambio con respecto a estar trabajando con una placa arduino cualquiera.

Como también adquirí hace poco dos sensores de presión y temperatura BMP280, voy a trastear con estos a ver que tal va la cosa. El sensor propiamente dicho es de tamaño minúsculo, de apenas un par de milímetros, y viene soldado en PCB junto con cuatro resistencias y dos condensadores y con pines de 2.54 mm de separación para poder usar en una placa de pruebas.

Placa “Breakout” del sensor BMP280

Este sensor proporciona lecturas de presión y temperatura bastante precisas a traves de comunicación SPI o I2C. Esto se configura conectando uno de los pines denominado CSB o bien a Vcc, con lo que seleccionariamos I2C, o a GND, funcionando entonces por SPI.

Yo voy a usar el bus I2C, que solo tiene las líneas SDA y SCL. Es un bus que puede ser compartido por varios dispositivos y la forma de acceder a cada uno es mediante una dirección distinta para cada caso. El BMP280, en caso de ser usado utilizando I2C, permite escoger la dirección a usar entre 76H y 77H. La forma de elegir es conectando el pin SDO (que en modo I2C no se usa) a Vcc, seleccionando 77H o GND para 76H. Yo voy a usar la 77H que es la que utiliza por defecto la librería de Adafruit.

Hay que descargar dos librerías, la del bmp280 y una que es común para todos los sensores. Son las siguientes:

Adafruit_BMP280_Library

Adafruit_Unified_Sensor_Driver

Descomprimimos los archivos .zip y copiamos la carpeta que contienen en Documentos/Arduino/libraries/, suponiendo que estemos usando esa ruta para nuestros proyectos.

Como siempre que se instala una nueva librería conviene echar un vistazo a los ejemplos si los tuviera. En este caso viene un programilla llamado bmp280_test que voy a probar. Parece que coge las lecturas del sensor y las saca por el puerto serie. Al principio no me funcionaba, saliendo el mensaje “Could not find a valid BMP280 sensor, check wiring!”.

Lo primero que no esta claro es qué pines hay que usar en el nodeMCU para el bus I2C. He leido cosas contradictorias en distintos foros y tras experimentar tengo claro que D1 es SCL y D2 es SDA. No he necesitado conectar resistencias externas de pull-up que require el bus para funcionar, puede ser que el modulo del sensor las incorpore porque el nodeMCU tengo entendido que no.

La librería de Adafruit usa por defecto la dirección 77H para el sensor, por lo que una vez configurado así conectando SDO a Vcc ha funcionado perfectamente, obteniendo a través del monitor serie las lecturas de presión y temperatura así como una estimación de la altitud sobre el nivel del mar.