Из этой статьи вы узнаете, как использовать модуль датчика BME280 с Arduino для считывания давления, температуры, влажности и даже расчета высоты. Мы покажем вам, как подключить датчик, установить необходимые библиотеки и написать простой скетч для отображения показаний данного датчика.
Итак, приступим. Датчик BME280 предназначен для считывания барометрического давления, температуры и влажности. Поскольку давление тесно связано с высотой (от уровня моря), то это означает, что вы также можете узнать и высоту, на которой находитесь в данный момент. Датчик BME280 использует протокол связи I2C или SPI для обмена данными с микроконтроллером.
Мы использовали датчик, показанный на рисунке ниже:
Этот датчик обменивается данными с использованием протокола связи I2C, поэтому подключение очень простое. Вы подключаете датчик BME280 к контактам Arduino Uno I2C, как показано в таблице ниже:
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 Clock) | Пин 13 |
SDO (MISO) | Пин 12 |
SDI (MOSI) | Пин 11 |
CS (Chip Select) | Пин 10 |
Требуемые детали
Для того, чтобы понять работу датчика, нам понадобятся следующие элементы:
- Датчик BME280
- Плата Arduino UNO
- Макетная плата
- Набор проводов и перемычек
Схема
Подключите датчик BME280 к Arduino, как показано на схеме ниже:
Установка библиотеки BME280
Чтобы получить показания от датчика BME280, вам необходимо использовать библиотеку Adafruit_BME280 . Выполните следующие шаги, чтобы установить библиотеку в вашу Arduino IDE:
Откройте свою Arduino IDE и перейдите в Скетч > Подключить библиотеку > Управлять библиотеками . Должен открыться менеджер библиотеки.
Найдите «adafruit bme280» в поле поиска и установите библиотеку.
Установка библиотеки Adafruit_Sensor
Чтобы использовать библиотеку BME280, вам также необходимо установить библиотеку Adafruit_Sensor. Выполните следующие шаги, чтобы установить библиотеку в вашу Arduino IDE:
Перейдите в Скетч > Подключить библиотеку > Управлять библиотеками и введите «Adafruit Unified Sensor» в поле поиска. Прокрутите до конца, чтобы найти библиотеку и установите ее.
После установки библиотек перезапустите программу Arduino.
Считывание давления, температуры и влажности
Чтобы узнать давление, температуру и влажность, мы воспользуемся примером скетча из библиотеки.
После установки библиотеки BME280 и библиотеки Adafruit_Sensor откройте IDE Arduino и перейдите в меню « Файл» > « Примеры» > « Библиотека Adafruit BME280» > « Тест bme280».
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
/* * Complete Project Details https://monitorbank.ru */ #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.
1 2 3 |
#include <Wire.h> #include <Adafruit_Sensor.h> #include <Adafruit_BME280.h> |
Поскольку мы собираемся использовать связь I2C, прокомментированы следующие строки, определяющие контакты SPI:
1 2 3 4 |
/*#define BME_SCK 13 #define BME_MISO 12 #define BME_MOSI 11 #define BME_CS 10*/ |
Давление по уровню моря
Переменная под названием SEALEVELPRESSURE_HPA уже создана.
1 |
#define SEALEVELPRESSURE_HPA (1013.25) |
Эта переменная сохраняет давление по уровню моря в гектопаскалях (эквивалентно милибарам). Эта переменная используется для оценки высоты при заданном давлении путем сравнения ее с давлением по уровню моря. В этом примере используется значение по умолчанию, но для получения более точных результатов замените значение текущим давлением по уровню моря в вашем регионе.
I2C
В этом примере по умолчанию используется протокол связи I2C. Как видите, вам просто нужно создать Adafruit_BME280 объект под названием bme.
1 |
Adafruit_BME280 bme; // I2C |
Чтобы использовать SPI, вам нужно прокомментировать предыдущую строку и прокомментировать одну из следующих строк.
1 2 |
//Adafruit_BME280 bme(BME_CS); // hardware SPI //Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK); // software SPI |
setup()
В setup() , запустите последовательную связь:
1 |
Serial.begin(9600); |
И датчик инициализируется:
1 2 3 4 5 |
status = bme.begin(); if (!status) { Serial.println("Could not find a valid BME280 sensor, check wiring!"); while (1); } |
Если, при тестировании датчика ,вы не сможете получить считанные с него показания, то вам нужно будет найти адрес I2C вашего датчика BME280. Подключите BME280 к вашему Arduino, запустите этот скетч сканера I2C, с помощью метода begin() . |
Значения
В loop(), функция printValues () считывает значения из BME280 и показывает результаты на экране монитора, с помощью Монитор Порта.
1 2 3 4 |
void loop() { printValues(); delay(delayTime); } |
Считать температуру, влажность, давление и оценить высоту так же просто, если использовать следующие методы для bme объекта:
- bme.readTemperature () — считывает температуру в градусах Цельсия;
- bme.readHumidity () — считывает абсолютную влажность;
- bme.readPressure () — считывает давление в гПа (гектопаскаль = миллибар);
- bme.readAltitude (SEALEVELPRESSURE_HPA) — оценивает высоту в метрах на основе давления по уровню моря.
Смотрим, что получилось
Загрузите код на свою плату Arduino. Загрузите скетч для датчика BME280. Откройте Монитор порта со скоростью 9600 бод.
Далее вы должны увидеть показания, отображаемые на экране монитора:
Вывод
Датчик BME280 обеспечивает простой и недорогой способ получения показаний давления, температуры и влажности. Датчик обменивается данными по протоколу связи I2C, что означает, что схема подключения очень проста, вам просто нужно подключить датчик к контактам платы Arduino по I2C.
Написать кода для получения показаний датчика также очень просто благодаря библиотеке BME280_Adafruit. Вам просто нужно использовать методы: readTemperature (), readHumidity () , а также readPressure () . Вы также можете считать высоту, используя метод readAltitude () .
С Уважением, МониторБанк