Руководство по датчику BME280 с Arduino (давление, температура, влажность)
В этом руководстве показано, как использовать модуль датчика BME280 с Arduino для считывания давления, температуры, влажности и оценки высоты над уровнем моря. Мы покажем, как подключить датчик, установить необходимые библиотеки и написать простой скетч для отображения показаний датчика.
Вам также могут быть полезны другие руководства по BME280:
Знакомство с модулем датчика BME280
Модуль датчика BME280 измеряет барометрическое давление, температуру и влажность. Поскольку давление изменяется с высотой, вы также можете оценить высоту над уровнем моря. Существует несколько версий этого модуля датчика. Датчик BME280 использует протокол связи I2C или SPI для обмена данными с микроконтроллером.
Мы используем модуль, показанный на рисунке ниже.
Этот датчик обменивается данными по протоколу связи I2C, поэтому подключение очень простое. Вы подключаете датчик BME280 к выводам I2C Arduino Uno, как показано в таблице ниже:
BME280 |
Arduino |
|---|---|
Vin |
5V |
GND |
GND |
SCL |
A5 |
SDA |
A4 |
Существуют другие версии этого датчика, которые могут использовать протоколы связи 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 |
Необходимые компоненты
Для выполнения этого руководства вам понадобятся следующие компоненты:
Arduino (читайте Лучшие стартовые наборы Arduino)
Вы можете использовать ссылки выше или перейти непосредственно на MakerAdvisor.com/tools, чтобы найти все компоненты для ваших проектов по лучшей цене!
Схема подключения
Подключите датчик BME280 к вашей плате Arduino, как показано на следующей схеме.
Установка библиотеки BME280
Для получения показаний модуля датчика BME280 вам необходимо использовать библиотеку Adafruit_BME280. Выполните следующие шаги, чтобы установить библиотеку в Arduino IDE:
Откройте Arduino IDE и перейдите в Sketch > Include Library > Manage Libraries. Должен открыться менеджер библиотек.
Введите «adafruit bme280» в поле поиска и установите библиотеку.
Установка библиотеки Adafruit_Sensor
Для использования библиотеки BME280 вам также необходимо установить библиотеку Adafruit_Sensor. Выполните следующие шаги, чтобы установить библиотеку в Arduino IDE:
Перейдите в Sketch > Include Library > Manage Libraries и введите «Adafruit Unified Sensor» в поле поиска. Прокрутите вниз, чтобы найти библиотеку, и установите её.
После установки библиотек перезапустите Arduino IDE.
Считывание давления, температуры и влажности
Для считывания давления, температуры и влажности мы используем пример скетча из библиотеки.
После установки библиотеки 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.
Откройте монитор последовательного порта на скорости 9600 бод.
Вы должны увидеть показания, отображаемые в мониторе последовательного порта.
Заключение
BME280 предоставляет простой и недорогой способ получения показаний давления, температуры и влажности. Датчик обменивается данными по протоколу I2C, что означает, что подключение очень простое — вам нужно только подключить датчик к выводам I2C Arduino.
Написание кода для получения показаний датчика также очень просто благодаря библиотеке BME280_Adafruit. Вам нужно просто использовать методы readTemperature(), readHumidity() и readPressure(). Вы также можете оценить высоту над уровнем моря с помощью метода readAltitude().
У нас есть руководства по другим датчикам и модулям с Arduino, которые могут быть вам полезны:
Если вы хотите узнать больше об Arduino, ознакомьтесь с нашими ресурсами:
Спасибо за чтение.