|

Estación meteorológica con ESP8266 NodeMCU, sensor BME280 y pantalla LCD Nokia

Este tutorial muestra cómo construir una estación meteorológica sencilla usando la placa ESP8266 NodeMCU (módulo ESP12-E) y el sensor BME280 de presión barométrica, temperatura y humedad.
El NodeMCU lee los valores de temperatura, humedad y presión del sensor BME280 y los muestra (respectivamente en °C, RH% y hPa) en la pantalla LCD Nokia 5110 (84×48 píxeles).

Acerca del sensor BME280:
El sensor BME280 de Bosch Sensortec es un sensor digital de bajo costo para presión, temperatura y humedad con buena precisión. Como la presión cambia con la altitud, podemos usarlo como altímetro con una precisión de ±1 metro (precisión de presión = ±1 hPa). Algunos parámetros del sensor se listan a continuación:

Rango de presión: 300 … 1100 hPa (equivalente a +9000…-500 m sobre/bajo el nivel del mar)
Resolución de presión: 0.01 hPa ( < 10 cm)
Rango de temperatura: -40 … 85 °C
Resolución de temperatura: 0.01 °C
Rango de humedad: 0 … 100 %
Interfaz: I2C y SPI
Rango de voltaje de alimentación: 1.71 … 3.6 V

En este proyecto el sensor BME280 se usa en modo I2C.

Para ver cómo conectar la placa NodeMCU con la pantalla LCD Nokia 5110, visita esta entrada:
Conexión de ESP8266 NodeMCU con LCD Nokia 5110

Hardware necesario:

  • Placa de desarrollo ESP8266 NodeMCU
  • Módulo LCD Nokia 5110
  • Módulo del sensor BME280   —->  hoja de datos
  • Cable micro USB (para programar y alimentar el circuito)
  • Protoboard
  • Cables puente (jumpers)

Circuito del NodeMCU con sensor BME280 y LCD Nokia 5110:
El diagrama esquemático del circuito del proyecto se muestra abajo.

ESP8266 NodeMCU BME280 sensor Nokia 5110 LCD

Generalmente, el módulo del sensor BME280 tiene al menos 4 pines porque puede trabajar en modo SPI o modo I2C. Para el modo I2C necesitamos 4 pines: VCC, GND, SDA y SCL donde:
GND (tierra) se conecta al pin GND del NodeMCU,
VCC es el pin de alimentación que se conecta al pin 3V3 del NodeMCU,
SDA es la línea de datos serie del bus I2C, conectada al pin D6 (GPIO12) del NodeMCU,
SCL es la línea de reloj serie del bus I2C, conectada al pin D5 (GPIO14) del NodeMCU.

La LCD Nokia 5110 que se muestra en el diagrama del circuito tiene 8 pines (de izquierda a derecha): RST (reset), CE (chip enable), DC (o D/C: data/command), Din (data in), Clk (clock), VCC (3.3V), BL (back light) y Gnd (ground).

La LCD Nokia 5110 se conecta a la placa NodeMCU de la siguiente manera:
El pin RST (reset) se conecta al pin D0 (GPIO16 del ESP8266EX),
El pin CE (chip enable) se conecta al pin D1 (GPIO5 del ESP8266EX),
El pin DC (data/command) se conecta al pin D2 (GPIO4 del ESP8266EX),
El pin DIN (data in)  se conecta al pin D3 (GPIO0 del ESP8266EX),
El pin CLK (clock) se conecta al pin D4 (GPIO2 del ESP8266EX),
VCC y BL se conectan al pin 3V3,
GND se conecta al pin GND.

Código del NodeMCU con sensor BME280 y LCD Nokia 5110:
El siguiente código de Arduino requiere 3 librerías de Adafruit Industries:
La primera librería es un controlador para la LCD Nokia 5110 (controlador PCD8544), el enlace de descarga está abajo:
Librería Adafruit Nokia 5110 LCD

La 2da librería es la librería de gráficos de Adafruit, que puede descargarse desde el siguiente enlace
Adafruit graphics library             —->  enlace directo

La tercera librería es para el sensor BME280:
Adafruit BME280 Library            —->  enlace directo

Puede que necesites instalar la librería Adafruit Unified Sensor si no está ya instalada; el enlace de descarga está abajo:
Adafruit Unified Sensor library   —->    enlace directo

Después de la descarga, ve a Arduino IDE —> Sketch —> Include Library —> Add .ZIP Library … y busca el archivo .zip (descargado previamente).
Haz lo mismo con los demás archivos de librería.

Sugerencias:
En el código hay un total de 4 librerías, que se incluyen en el código de la siguiente manera:

#include <Wire.h>              // include Wire library (required for I2C devices)
#include <Adafruit_GFX.h>      // include Adafruit graphics library
#include <Adafruit_PCD8544.h>  // include Adafruit PCD8544 (Nokia 5110) library
#include <Adafruit_BME280.h>   // include Adafruit BME280 sensor library

Como cualquier otro dispositivo I2C, el sensor BME280 tiene una dirección I2C de esclavo que puede ser 0x76 o 0x77. Esta dirección depende de la conexión del pin SDO (usado en modo SPI como salida de datos serie o MISO); si el pin SDO está conectado (directamente o a través de una resistencia) a VCC (3.3V) la dirección será 0x77, y si está conectado a GND la dirección será 0x76.

La dirección I2C predeterminada de la librería del BME280 está definida como 0x77 y la dirección I2C de mi dispositivo es 0x76.
En el código, la definición de la dirección I2C de esclavo y la inicialización de su librería se muestran abajo:

// define device I2C address: 0x76 or 0x77 (0x77 is library default address)
#define BME280_I2C_ADDRESS  0x76
// initialize Adafruit BME280 library
Adafruit_BME280  bme280;

La inicialización del sensor BME280 se hace usando la función begin() que devuelve 1 si está OK y 0 si hay error. En el código, la inicialización con la dirección previamente definida se muestra a continuación:

bme280.begin(BME280_I2C_ADDRESS)

La lectura de los valores de temperatura y presión se realiza como se muestra abajo:

// read temperature, humidity and pressure from the BME280
sensorfloat temp = bme280.readTemperature();    // get temperature in degree Celsius
float humi = bme280.readHumidity();       // get humidity in rH%
float pres = bme280.readPressure();       // get pressure in Pa

Ten en cuenta que la librería del sensor BME280 devuelve el valor de la presión en unidades de Pa y para convertirlo a hPa debemos dividirlo entre 100.

1 bar = 100000 Pa = 1000 hPa
1 hPa = 100 Pa = 1 milibar
Pa: Pascal
hPa: hectoPascal

Los valores de temperatura, humedad y presión se muestran en la pantalla.
Si hay algún problema con el sensor BME280 (por ejemplo, una dirección de dispositivo incorrecta) la pantalla mostrará Connection Error!

Código completo de Arduino:

LCD Weather Station

Weather station NodeMCU BME280 sensor and Nokia 5110 LCD

Artículo traducido al español. Fuente original: Simple Circuit

Similar Posts

Deja un comentario