Руководство по датчику BME280 с Arduino (давление, температура, влажность)

В этом руководстве показано, как использовать модуль датчика BME280 с Arduino для считывания давления, температуры, влажности и оценки высоты над уровнем моря. Мы покажем, как подключить датчик, установить необходимые библиотеки и написать простой скетч для отображения показаний датчика.

Руководство по датчику BME280 с Arduino — давление, температура и влажность

Вам также могут быть полезны другие руководства по BME280:

Знакомство с модулем датчика BME280

Модуль датчика BME280 измеряет барометрическое давление, температуру и влажность. Поскольку давление изменяется с высотой, вы также можете оценить высоту над уровнем моря. Существует несколько версий этого модуля датчика. Датчик BME280 использует протокол связи I2C или SPI для обмена данными с микроконтроллером.

Мы используем модуль, показанный на рисунке ниже.

Модуль датчика BME280 измеряет давление, температуру и влажность

Этот датчик обменивается данными по протоколу связи I2C, поэтому подключение очень простое. Вы подключаете датчик BME280 к выводам I2C Arduino Uno, как показано в таблице ниже:

BME280

Arduino

Vin

5V

GND

GND

SCL

A5

SDA

A4

Существуют другие версии этого датчика, которые могут использовать протоколы связи SPI или I2C, как модуль, показанный на следующем рисунке:

BME280 с SPI и I2C

Если вы используете один из таких датчиков и хотите использовать протокол связи I2C, подключайте следующие выводы:

BME280

Arduino

SCK (вывод SCL)

A5

SDI (вывод SDA)

A4

Если вы используете протокол связи SPI, вам необходимо использовать следующие выводы:

BME280

Arduino

SCK (тактовый сигнал SPI)

Pin 13

SDO (MISO)

Pin 12

SDI (MOSI)

Pin 11

CS (выбор чипа)

Pin 10

Необходимые компоненты

Для выполнения этого руководства вам понадобятся следующие компоненты:

Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!

Схема подключения

Подключите датчик BME280 к вашей плате Arduino, как показано на следующей схеме.

Схема подключения BME280 к Arduino

Установка библиотеки BME280

Для получения показаний модуля датчика BME280 вам необходимо использовать библиотеку Adafruit_BME280. Выполните следующие шаги, чтобы установить библиотеку в Arduino IDE:

Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries. Должен открыться менеджер библиотек.

Введите «adafruit bme280» в поле поиска и установите библиотеку.

Установка библиотеки BME280 в Arduino IDE

Установка библиотеки Adafruit_Sensor

Для использования библиотеки BME280 вам также необходимо установить библиотеку Adafruit_Sensor. Выполните следующие шаги, чтобы установить библиотеку в Arduino IDE:

Перейдите в Sketch > Include Library > Manage Libraries и введите «Adafruit Unified Sensor» в поле поиска. Прокрутите вниз, чтобы найти библиотеку, и установите её.

Установка библиотеки Adafruit Unified Sensor

После установки библиотек перезапустите Arduino IDE.

Считывание давления, температуры и влажности

Для считывания давления, температуры и влажности мы используем пример скетча из библиотеки.

Скетч Arduino BME280 — считывание температуры, влажности и давления

После установки библиотеки BME280 и библиотеки Adafruit_Sensor откройте Arduino IDE и перейдите в File > Examples > Adafruit BME280 library > bme280 test.

/*
 * Complete Project Details https://randomnerdtutorials.com
*/

#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 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;

  // default settings
  // (you can also pass in a Wire library object like &Wire2)
  status = bme.begin();
  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");

  // Convert temperature to 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();
}

Посмотреть исходный код

Как работает код

Продолжайте читать этот раздел, чтобы узнать, как работает код, или перейдите к разделу «Демонстрация».

Библиотеки

Код начинается с подключения необходимых библиотек: библиотеки Wire для использования I2C, а также библиотек Adafruit_Sensor и Adafruit_BME280 для взаимодействия с датчиком BME280.

#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Связь по SPI

Поскольку мы будем использовать связь I2C, следующие строки, определяющие выводы SPI, закомментированы:

/*#define BME_SCK 13
#define BME_MISO 12
#define BME_MOSI 11
#define BME_CS 10*/

Давление на уровне моря

Создаётся переменная с именем SEALEVELPRESSURE_HPA.

#define SEALEVELPRESSURE_HPA (1013.25)

Эта переменная сохраняет давление на уровне моря в гектопаскалях (эквивалентно миллибарам). Эта переменная используется для оценки высоты над уровнем моря при заданном давлении путём сравнения с давлением на уровне моря. В этом примере используется значение по умолчанию, но для более точных результатов замените это значение текущим давлением на уровне моря в вашем местоположении.

I2C

В этом примере по умолчанию используется протокол связи I2C. Как видите, вам нужно просто создать объект Adafruit_BME280 с именем bme.

Adafruit_BME280 bme; // I2C

Для использования SPI необходимо закомментировать предыдущую строку и раскомментировать одну из следующих строк.

//Adafruit_BME280 bme(BME_CS); // hardware SPI
//Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI

setup()

В функции setup() запускается последовательная связь:

Serial.begin(9600);

И происходит инициализация датчика:

status = bme.begin();
if (!status) {
  Serial.println("Could not find a valid BME280 sensor, check wiring!");
  while (1);
}

Примечание

При тестировании датчика, если вам не удаётся получить показания, возможно, вам нужно узнать I2C-адрес вашего датчика BME280. С подключённым к Arduino датчиком BME280 запустите этот скетч I2C-сканера, чтобы проверить адрес вашего датчика. Затем передайте адрес в метод begin().

Вывод значений

В функции loop() функция printValues() считывает значения с BME280 и выводит результаты в монитор последовательного порта.

void loop() {
  printValues();
  delay(delayTime);
}

Считывание температуры, влажности, давления и оценка высоты над уровнем моря выполняются очень просто с помощью следующих методов объекта bme:

  • bme.readTemperature() — считывает температуру в градусах Цельсия;

  • bme.readHumidity() — считывает абсолютную влажность;

  • bme.readPressure() — считывает давление в гПа (гектопаскали = миллибары);

  • bme.readAltitude(SEALEVELPRESSURE_HPA) — оценивает высоту в метрах на основе давления на уровне моря.

Демонстрация

Arduino BME280 — считывание температуры, влажности и давления

Загрузите код на вашу плату Arduino.

Кнопка загрузки скетча Arduino для датчика BME280

Откройте монитор последовательного порта на скорости 9600 бод.

Монитор последовательного порта Arduino для датчика BME280

Вы должны увидеть показания, отображаемые в мониторе последовательного порта.

Демонстрация скетча Arduino для датчика BME280 — монитор последовательного порта

Заключение

BME280 предоставляет простой и недорогой способ получения показаний давления, температуры и влажности. Датчик обменивается данными по протоколу I2C, что означает, что подключение очень простое — вам нужно только подключить датчик к выводам I2C Arduino.

Написание кода для получения показаний датчика также очень просто благодаря библиотеке BME280_Adafruit. Вам нужно просто использовать методы readTemperature(), readHumidity() и readPressure(). Вы также можете оценить высоту над уровнем моря с помощью метода readAltitude().

У нас есть руководства по другим датчикам и модулям с Arduino, которые могут быть вам полезны:

Если вы хотите узнать больше об Arduino, ознакомьтесь с нашими ресурсами:

Спасибо за чтение.