O BMP388 é um sensor de pressão barométrica absoluta preciso, de baixo consumo de energia e baixo ruído que mede a pressão e a temperatura absolutas. Como a pressão muda com a altitude, também podemos estimar a altitude com grande precisão. Por esse motivo, esse sensor é útil para navegação de drones e outros aplicativos, como cálculo de velocidade vertical; Internet das coisas; previsão do tempo e estações meteorológicas; aplicativos de saúde; aplicativos de condicionamento físico e muito mais.
ESP8266 NodeMCU com sensor barométrico/altímetro BMP388 com o Arduino IDE
Apresentando o sensor barométrico BMP388
O BMP388 é um sensor de pressão barométrica absoluta preciso, de baixa potência e baixo ruído que mede a pressão e a temperatura absolutas. Como a pressão muda com a altitude, também podemos estimar a altitude com grande precisão. Por esse motivo, esse sensor é útil para aplicativos de drones e de navegação. Você também pode usá-lo para outras aplicações:
- cálculo de velocidade vertical;
- internet das coisas;
- previsão do tempo e estações meteorológicas;
- aplicações de cuidados com a saúde;
- aplicações de condicionamento físico;
- outras…
Estamos usando o sensor BMP388 como um módulo, conforme mostrado na figura abaixo. Ele também está disponível em outros formatos diferentes.
A imagem a seguir mostra o outro lado do sensor.
Dados técnicos do BMP388
A tabela a seguir mostra os principais recursos do sensor BMP388. Para obter mais informações, consulte a folha de dados.
Pinagem do BMP388
Aqui está a pinagem do módulo BMP388 que estamos usando – ela pode ser ligeiramente diferente para outros módulos.
Interface BMP388
Como mencionado anteriormente, o sensor BMP388 é compatível com as interfaces I2C e SPI.
BMP388 I2C
Para usar o protocolo de comunicação I2C, use os seguintes pinos:
BMP388 SPI
Para usar o protocolo de comunicação SPI, use os seguintes pinos:
Peças necessárias
Para concluir este tutorial, você precisa dos seguintes componentes:
- Módulo de sensor BMP388
- ESP8266 (Qualquer versão, preferencialmente as mais novas)
- ProtoBoard
- Fios de jumper
Esquemático – ESP8266 NodeMCU com BMP388
O BMP388 pode se comunicar usando os protocolos de comunicação I2C ou SPI.
ESP8266 com BMP388 usando I2C
Siga o próximo diagrama esquemático para conectar o BMP388 ao ESP8266 usando os pinos I2C padrão.
ESP8266 com BMP388 usando SPI
Como alternativa, talvez você queira usar o protocolo de comunicação SPI. Nesse caso, siga o próximo diagrama esquemático para conectar o BMP388 ao ESP8266 usando os pinos SPI padrão.
Instalação da biblioteca BMP3XX da Adafruit
Existem diferentes bibliotecas compatíveis com o sensor BMP388 e o Arduino. Neste tutorial, usaremos a biblioteca BMP3XX da Adafruit.
Siga as próximas etapas para instalar a biblioteca em seu Arduino IDE:
Abra o IDE do Arduino e vá para Sketch > Include Library > Manage Libraries. O Gerenciador de bibliotecas deverá ser aberto.
Procure por “adafruit bmp3xx” na caixa de pesquisa e instale a biblioteca.
Código – Leitura de pressão, altitude e temperatura do BMP388
A melhor maneira de se familiarizar com um novo sensor é começar com um exemplo básico fornecido pela biblioteca.
Depois de instalar a biblioteca BMP3XX, abra o Arduino IDE e vá para File > Examples > Adafruit BMP3XX Library > bmp3XX_simpletest. O código a seguir deve ser carregado.
#include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include "Adafruit_BMP3XX.h" #define BMP_SCK 14 #define BMP_MISO 12 #define BMP_MOSI 13 #define BMP_CS 15 #define SEALEVELPRESSURE_HPA (1013.25) Adafruit_BMP3XX bmp; void setup() { Serial.begin(115200); while (!Serial); Serial.println("Adafruit BMP388 / BMP390 test"); if (!bmp.begin_I2C()) { // hardware I2C mode, can pass in address & alt Wire //if (! bmp.begin_SPI(BMP_CS)) { // hardware SPI mode //if (! bmp.begin_SPI(BMP_CS, BMP_SCK, BMP_MISO, BMP_MOSI)) { // software SPI mode Serial.println("Could not find a valid BMP3 sensor, check wiring!"); while (1); } // Configurar a sobreamostragem e a inicialização do filtro bmp.setTemperatureOversampling(BMP3_OVERSAMPLING_8X); bmp.setPressureOversampling(BMP3_OVERSAMPLING_4X); bmp.setIIRFilterCoeff(BMP3_IIR_FILTER_COEFF_3); bmp.setOutputDataRate(BMP3_ODR_50_HZ); } void loop() { if (! bmp.performReading()) { Serial.println("Failed to perform reading :("); return; } Serial.print("Temperature = "); Serial.print(bmp.temperature); Serial.println(" *C"); Serial.print("Pressure = "); Serial.print(bmp.pressure / 100.0); Serial.println(" hPa"); Serial.print("Approx. Altitude = "); Serial.print(bmp.readAltitude(SEALEVELPRESSURE_HPA)); Serial.println(" m"); Serial.println(); delay(2000); }
Pressão no nível do mar
Para obter resultados mais precisos de pressão e altitude, recomendamos que você ajuste a pressão do nível do mar para sua localização na variável SEALEVELPRESSURE_HPA:
#define SEALEVELPRESSURE_HPA (1013.25)
O valor padrão é 1013,25 hPa. Para obter resultados mais precisos, verifique a pressão do nível do mar em seu local. Você pode usar este site para verificar a pressão do nível do mar.
Como o código funciona
Continue lendo esta seção para saber como o código.
Bibliotecas
O código começa com a inclusão das bibliotecas necessárias: a biblioteca Wire para usar I2C, a biblioteca SPI (se você quiser usar SPI em vez de I2C), as bibliotecas Adafruit_Sensor e Adafruit_BMP3XX para fazer a interface com o sensor BMP388.
#include <Wire.h> #include <SPI.h> #include <Adafruit_Sensor.h> #include "Adafruit_BMP3XX.h"
Você está gostando do projeto, ele completo é encontrado no Ebook com este e outros, abaixo.
Guia de Esp8266 com sensores e módulos