Este guia mostra como usar o módulo de sensor BME280 com o ESP8266 para ler a pressão, a temperatura, a umidade e estimar a altitude usando o Arduino IDE. O sensor BME280 usa o protocolo de comunicação I2C ou SPI para trocar dados com um microcontrolador
Mostraremos como conectar o sensor ao ESP8266, instalar as bibliotecas necessárias e escrever um esboço simples que exibe as leituras do sensor. Também criaremos um exemplo de servidor da Web para exibir as últimas leituras de pressão, temperatura e umidade.
Antes de prosseguir com este tutorial, você deve ter o complemento ESP8266 instalado em seu Arduino IDE.
Introducing BME280 Sensor Module
O módulo sensor BME280 lê a pressão barométrica, a temperatura e a umidade. Como a pressão muda com a altitude, você também pode estimar a altitude. Há várias versões desse módulo de sensor. Estamos usando o módulo ilustrado na figura abaixo.
Esse sensor se comunica usando o protocolo de comunicação I2C, portanto, a fiação é muito simples. Você pode usar os pinos I2C padrão do ESP8266, conforme mostrado na tabela a seguir:
Há outras versões desse sensor que podem usar os protocolos de comunicação SPI ou I2C, como o módulo mostrado na próxima figura:
Se estiver usando um desses sensores, para usar o protocolo de comunicação I2C, use os seguintes pinos:
Se você usar o protocolo de comunicação SPI, precisará usar os seguintes pinos:
Peças necessárias
Para concluir este tutorial, você precisará das seguintes peças:
- Módulo de sensor BME280
- ESP8266 (Qualquer versão, preferencialmente as mais recentes)
- ProtoBoard
- Fios de jumper
Esquema – ESP8266 com BME280 usando I2C
Vamos usar a comunicação I2C com o módulo sensor BME280. Para isso, conecte o sensor aos pinos SDA e SCL do ESP8266, conforme mostrado no diagrama esquemático a seguir.
Instalando a biblioteca BME280
Para obter leituras do módulo sensor BME280, você precisa usar a biblioteca Adafruit_BME280. Siga as próximas etapas para instalar a biblioteca em seu Arduino IDE:
Abra seu Arduino IDE e vá para Sketch > Include Library > Manage Libraries. O Gerenciador de bibliotecas deve ser aberto.
Procure por “adafruit bme280” na caixa de pesquisa e instale a biblioteca.
Depois de instalar as bibliotecas, reinicie o Arduino IDE.
Instalando a biblioteca Adafruit_Sensor
Para usar a biblioteca BME280, você também precisa instalar a biblioteca Adafruit_Sensor. Siga as próximas etapas para instalar a biblioteca em seu Arduino IDE:
Vá para Sketch > Include Library > Manage Libraries e digite “Adafruit Unified Sensor” na caixa de pesquisa. Role a tela até o final para encontrar a biblioteca e instalá-la.
Leitura de pressão, temperatura e umidade
Para ler pressão, temperatura e umidade, usaremos um exemplo de sketch da biblioteca.
Depois de instalar a biblioteca BME280 e a biblioteca Adafruit_Sensor, abra o Arduino IDE e vá para File > Examples > Adafruit BME280 library > bme280 test.
#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> /*#include <SPI.h> #define BME_SCK 14 #define BME_MISO 12 #define BME_MOSI 13 #define BME_CS 15*/ #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BME280 bme; // I2C //Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI unsigned long delayTime; void setup() { Serial.begin(9600); Serial.println(F("BME280 test")); bool status; // configurações padrão // (você também pode passar um objeto da biblioteca Wire, como &Wire2) status = bme.begin(0x76); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } Serial.println("-- Default Test --"); delayTime = 1000; Serial.println(); } void loop() { printValues(); delay(delayTime); } void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" *C"); // Converter a temperatura em Fahrenheit /*Serial.print("Temperature = "); Serial.print(1.8 * bme.readTemperature() + 32); Serial.println(" *F");*/ Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); Serial.print("Approx. Altitude = "); Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m"); Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); Serial.println(); }
Fizemos algumas modificações no sketch para torná-lo totalmente compatível com o ESP8266.
Como o código funciona
Continue lendo esta seção para saber como o código funciona ou pule para a seção “Demonstração”.
Bibliotecas
O código começa com a inclusão das bibliotecas necessárias: a biblioteca wire para usar I2C e as bibliotecas Adafruit_Sensor e Adafruit_BME280 para fazer a interface com o sensor BME280.
#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h>
Comunicação SPI
Como vamos usar a comunicação I2C, as seguintes linhas que definem os pinos SPI são comentadas:
/*#include <SPI.h> #define BME_SCK 14 #define BME_MISO 12 #define BME_MOSI 13 #define BME_CS 15*/
Observação: se estiver usando comunicação SPI, use os pinos SPI padrão do ESP8266:
Pressão no nível do mar
É criada uma variável chamada SEALEVELPRESSURE_HPA.
#define SEALEVELPRESSURE_HPA (1013.25)
Essa variável salva a pressão no nível do mar em hectopascal (equivalente a milibar). Essa variável é usada para estimar a altitude de uma determinada pressão, comparando-a com a pressão do nível do mar. Este exemplo usa o valor padrão, mas, para obter resultados mais precisos, substitua o valor pela pressão atual do nível do mar em seu local.
Você está gostando do projeto, ele completo é encontrado no Ebook com este e outros, abaixo.
Guia de Esp8266 com sensores e módulos