Подключение датчика BME280 к Arduino
В этом руководстве мы подробно разберем, как использовать модуль датчика BME280 с Arduino для считывания давления, температуры, влажности и оценки высоты.
Подключение датчика BME280 к Arduino
21.11.2024 в 14:44   2178 0
Версия для печати

Подключение датчика BME280 к Arduino

logo

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

Обзор модуля датчика BME280

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

BME280 c I2C интерфесом

bme280_i2c

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


BME280 Arduino UNO Arduino MINI Arduino Mega Arduino Micro Arduino Nano
VIN 5V 5V 5V 5V 5V
GND GND GND GND GND GND
SCL A5 A7 21 1 A5
SDA A4 A6 20 2 A4

BME280 с SPI интерфейсом

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

bme280_spi

Для подключения датчика по SPI подключите его к следующим контактам Arduino


BME280 Arduino Nano Arduino UNO Arduino Mega Arduino Mini
SCK (SPI Clock) Pin 13 Pin 13 Pin 52 Pin 17
SDO (MISO) Pin 12 Pin 12 Pin 50 Pin 16
SDI (MOSI) Pin 11 Pin 11 Pin 51 Pin 15
CS (Chip Select) Pin 10 Pin 10 Pin 53 Pin 14

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

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

схема

Установка необходимых библиотек

Для считывания показаний датчика нам нужно установить в Arduino IDE несколько дополнительных библиотек. Это Adafruit_BME280 и Adafruit Unified Sensor. Как это сделать мы сейчас подробно рассмотрим.

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

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

Перейдите в СкетчПодключить библиотекуУправление библиотеками. Должен открыться менеджер библиотек.

Найдите “adafruit bme280” в окне поиска и установите её.

library manager


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

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

Перейдите в СкетчПодключить библиотекуУправление библиотеками. Должен открыться менеджер библиотек. Введите “Adafruit Unified Sensor” в поле поиска. Прокрутите до конца, чтобы найти библиотеку и установить её.

unified_sensor


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


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

Чтобы прочитать давление, температуру и влажность, мы будем использовать пример скетча из библиотеки. Для этого откройте Arduino IDE и перейдите в ФайлПримеры> Adafruit BME280 Librarybme280test.


/***************************************************************************
 This is a library for the BME280 humidity, temperature & pressure sensor

 Designed specifically to work with the Adafruit BME280 Breakout
 ----> http://www.adafruit.com/products/2650

 These sensors use I2C or SPI to communicate, 2 or 4 pins are required
 to interface. The device's I2C address is either 0x76 or 0x77.

 Adafruit invests time and resources providing this open source code,
 please support Adafruit andopen-source hardware by purchasing products
 from Adafruit!

 Written by Limor Fried & Kevin Townsend for Adafruit Industries.
 BSD license, all text above must be included in any redistribution
 See the LICENSE file for details.
 ***************************************************************************/

#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);
 while(!Serial); // time to get serial running
 Serial.println(F("BME280 test"));

 unsigned status;
 
 // default settings
 status = bme.begin(); 
 // You can also pass in a Wire library object like &Wire2
 // status = bme.begin(0x76, &Wire2)
 if (!status) {
 Serial.println("Could not find a valid BME280 sensor, check wiring, address, sensor ID!");
 Serial.print("SensorID was: 0x"); Serial.println(bme.sensorID(),16);
 Serial.print(" ID of 0xFF probably means a bad address, a BMP 180 or BMP 085\n");
 Serial.print(" ID of 0x56-0x58 represents a BMP 280,\n");
 Serial.print(" ID of 0x60 represents a BME 280.\n");
 Serial.print(" ID of 0x61 represents a BME 680.\n");
 while (1) delay(10);
 }
 
 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");

 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 <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

Поскольку мы собираемся использовать интерфейс 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. Как вы можете видеть, вам просто нужно создать объект 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 () запускаем последовательный порт со скоростью 9600 бод:

Serial.begin(9600);

И инициализируем датчик

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

 

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

 

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

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

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

  • bme.readTemperature() – считывает температуру в градусах Цельсия;
  • bme.readHumidity() – считывает абсолютную влажность;
  • bme.readPressure() – считывает давление в ГПа (гектопаскаль = миллибар);
  • bme.readAltitude(SEALEVELPRESSURE_HPA) – оценивает высоту в метрах на основе давления на уровне моря.

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

demo

Загрузите скетч в плату Arduino

arrow

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

serial monitor

Если все предыдущие шаги были выполнены верно вы должны увидеть показания датчиков

com log


Подведение итогов

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

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



Источник: https://randomnerdtutorials.com/bme280-sensor-arduino-pressure-temperature-humidity/
Материал также доступен на моем канале: Яндекс Дзен и в группе ВК
Категория: Обзоры модулей | Добавил: :, (11.01.2023)
Просмотров: 2178 | Теги: Arduino, BME280, Arduino IDE | Рейтинг: 0.0/0
Поделиться:
Всего комментариев: 0
avatar