Підключення BME280 до Arduino ESP32

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 інтерфейс.

bme_bmp280

На 5 вольтовому модулі, також виведені контакти для зміни I2C адреси. За умовчанням адреса 0x76.

  • якщо з’єднано 1 та 2 адреса 0x76
  • якщо 2 та 3 адреса 0x77
bme280 i2c addres

Для підключення до ESP32 краще використовувати модуль без додаткових компонентів, тому, що живлення 3.3 вольта. Це збереже заряд акумулятора. Модуль на 3.3 вольта також має SPI інтерфейс.

bme280 3.3V

Також часто зустрічаються BMP280, він аналогічний попередньому, окрім відсутності вимірювання вологості.

По причині високої точності вимірювання тиску, ми можемо отримати висоту над рівнем моря у метрах з точністю +- 5 метрів.

 Атмосферний тиск, що дорівнює тиску стовпа ртуті заввишки 760 мм при температурі  00 С, називають нормальним атмосферним тиском.

Нормальний атмосферний тиск дорівнює 101 300 Па = 1013 гПа.

Чим більша висота над рівнем моря, тим менший тиск. При невеликих підйомах у середньому на кожних 10,5 м підйому тиск зменшується на 1 мм.рт.ст. (або на 1,33 гПа). Знаючи залежність тиску від висоти, можна за зміною показів барометра визначити висоту над рівнем моря.


Код піключення по I2C інтерфейсу

BME280Arduino Uno NanoESP32ESP8266Arduino Mega
VCC5V5V5V5V
GNDGNDGNDGNDGND
SCLA4default (GPIO 22)GPIO 521 (PD0)
SDAA5default (GPIO 21)GPIO 420 (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 інтерфейсу

BME280Arduino Uno Nano*ESP32ESP8266Arduino Mega*
VCC3.3V3.3V3.3V3.3V
GNDGNDGNDGNDGND
SCK13GPIO18GPIO1452 (PB1)
MISO12GPIO19GPIO1250 (PB3)
MOSI11GPIO23GPIO1351 (PB2)
CS10GPIO5GPIO1553 (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).

Один коментар

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *