BME280 – датчик атмосферного тиску, вологості та температури, від виробника BOSH. Датчик характеризується високою точністю вимірювання та надмалим споживання. Інтерфейс підключення I2C та SPI.
Характеристики:
- Діапазон вимірювання температури від -40 до +85 градусів, з точністю +- 0.5
- Діапазон вимірювання вологості від 0 до 100%, з точністю 3%
- Діапазон вимірювання тиску від 300 до 1100 гПа, з точністю +- 1 гПа (Гектопаскаль)
- Напруга живлення від 1.71 до 3.6 вольт
- Напруга VDDIO від 1.2 до 3.6 вольт
- Струм в режимі сну 0.1 мкА
- Струм в режимі вимірювання 3.6 мкА при частоті вимірювання 1 Гц
В даному прикладі розглянемо модуль GYBMEP, з встановленим стабілізатором живлення 5 V та перетворювачем рівнів, що дає змогу даний модуль підключати до Arduino.
Даний модуль має тільки I2C інтерфейс.
На 5 вольтовому модулі, також виведені контакти для зміни I2C адреси. За умовчанням адреса 0x76.
- якщо з’єднано 1 та 2 адреса 0x76
- якщо 2 та 3 адреса 0x77
Для підключення до ESP32 краще використовувати модуль без додаткових компонентів, тому, що живлення 3.3 вольта. Це збереже заряд акумулятора. Модуль на 3.3 вольта також має SPI інтерфейс.
Також часто зустрічаються BMP280, він аналогічний попередньому, окрім відсутності вимірювання вологості.
По причині високої точності вимірювання тиску, ми можемо отримати висоту над рівнем моря у метрах з точністю +- 5 метрів.
Атмосферний тиск, що дорівнює тиску стовпа ртуті заввишки 760 мм при температурі 00 С, називають нормальним атмосферним тиском.
Нормальний атмосферний тиск дорівнює 101 300 Па = 1013 гПа.
Чим більша висота над рівнем моря, тим менший тиск. При невеликих підйомах у середньому на кожних 10,5 м підйому тиск зменшується на 1 мм.рт.ст. (або на 1,33 гПа). Знаючи залежність тиску від висоти, можна за зміною показів барометра визначити висоту над рівнем моря.
Код піключення по I2C інтерфейсу
BME280 | Arduino Uno Nano | ESP32 | ESP8266 | Arduino Mega |
---|---|---|---|---|
VCC | 5V | 5V | 5V | 5V |
GND | GND | GND | GND | GND |
SCL | A4 | default (GPIO 22) | GPIO 5 | 21 (PD0) |
SDA | A5 | default (GPIO 21) | GPIO 4 | 20 (PD1) |
#include "Arduino.h"
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme;
#define ALTITUDE_0 (1013.25)
uint8_t bme_addres = 0x76;
void setup()
{
Wire.begin();
Serial.begin(9600);
if (!bme.begin(bme_addres))
{
Serial.println("Could not find a valid BME280 sensor");
}
}
void loop()
{
static unsigned long timer = 0;
if ((millis() - timer) > 3000)
{
timer = millis();
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println("*C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println("hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(ALTITUDE_0));
Serial.println("m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println("%");
}
}
Код піключення по SPI інтерфейсу
BME280 | Arduino Uno Nano* | ESP32 | ESP8266 | Arduino Mega* |
---|---|---|---|---|
VCC | 3.3V | 3.3V | 3.3V | 3.3V |
GND | GND | GND | GND | GND |
SCK | 13 | GPIO18 | GPIO14 | 52 (PB1) |
MISO | 12 | GPIO19 | GPIO12 | 50 (PB3) |
MOSI | 11 | GPIO23 | GPIO13 | 51 (PB2) |
CS | 10 | GPIO5 | GPIO15 | 53 (PB0) |
- * BME280 має логічні рівні 1.2 – 3.6 вольта тоді як в Arduino Uno Nano Mega 5 V. Тому підключати потрібно через перетворювач логічних рівнів.
#include "Arduino.h"
#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10
#define ALTITUDE_0 (1013.25)
Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);
void setup()
{
Wire.begin();
Serial.begin(9600);
if (!bme.begin())
{
Serial.println("Could not find a valid BME280 sensor");
}
}
void loop()
{
static unsigned long timer = 0;
if ((millis() - timer) > 3000)
{
timer = millis();
Serial.print("Temperature = ");
Serial.print(bme.readTemperature());
Serial.println("*C");
Serial.print("Pressure = ");
Serial.print(bme.readPressure() / 100.0F);
Serial.println("hPa");
Serial.print("Approx. Altitude = ");
Serial.print(bme.readAltitude(ALTITUDE_0));
Serial.println("m");
Serial.print("Humidity = ");
Serial.print(bme.readHumidity());
Serial.println("%");
}
}
Підключення BOSH BME680, з вимірюванням якості повітря (IAQ).
vice city market Kingdom Market link