BMP280 — это цифровой датчик от Bosch Sensortec позволяющий получить текущие значения атмосферного давления и температуры окружающей среды. Этот датчик специально разработан для мобильных приложений, где малый размер и низкое энергопотребление очень важны. В данной статьи увидим, как подключить датчик атмосферного давления BMP280 к Arduino по I2C и SPI, какие библиотеки установить и приведём несколько примеров скетчей.
BMP280 основан на технологии пьезорезистивного датчика давления, обладающей высокой точностью, линейностью и стабильностью с устойчивостью к электромагнитной совместимости.
BMP280 может использоваться в различных приложениях, таких как улучшение систем навигации GPS, внутренняя навигация, таких как обнаружение пола и обнаружение лифта, наружная навигация, спортивные приложения, прогноз погоды и т. д. Еще одним применением данного модуля является определений высоты, которая зависит от давления и рассчитывается по международной барометрической формуле.
Установка библиотек
Для работы с датчиком BMP280 существуют различные библиотеки, упрощающие работу. К ним относятся BMP280_DEV, Adafruit_BMP280_Library. Для датчика BMP280 будет используется библиотека от Adafruit.
Adafruit Unified Sensor Driver — общий драйвер
- В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…

- В строке поиска вводим «Adafruit Unified Sensor», выбираем последнюю версию и кликаем Установить

- Библиотека установлена (INSTALLED)

Библиотека Arduino для датчиков BMP280
Чтобы начать считывать данные с датчиков, вам необходимо установить библиотеку Adafruit_BMP280 (код в репозитории github). Она доступна в менеджере библиотек Arduino, поэтому рекомендуется его использовать.
- В Arduino IDE открываем менеджер библиотек: Скетч->Подключить библиотеку->Управлять библиотеками…

- В строке поиска вводим «Adafruit BMP280», выбираем библиотеку от Adafruit, но можете использовать любую.

- Выбираем последнюю версию и кликаем Установить

- Выбираем пример: Файл->Примеры->Adafruit BMP280 Library->bmp280test

- Компилируем этот пример. Если получаем ошибку
fatal error: Adafruit_Sensor.h: No such file or directory, нужно установить Adafruit Unified Sensor (смотрите выше)...\Documents\Arduino\bmp280-i2c\bmp280-i2c.ino:1:30: fatal error: Adafruit_Sensor.h: No such file or directory #include <Adafruit_Sensor.h> ^ compilation terminated. exit status 1 Ошибка компиляции для платы Arduino Pro or Pro Mini.
Подключение BMP280 к Arduino по I2C/TWI
Так как датчик может работать по I2C и SPI, подключение можно реализовать двумя методами. При подключении по I2C нужно соединить контакты SDA и SCL.
Схема подключения BMP280 к Arduino
Для подключения понадобятся сам датчик BMP280, плата Ардуино, соединительные провода. Схема подключения показана на рисунке ниже.
Землю с Ардуино нужно соединить с землей на датчике, напряжение 3.3 В — на 3.3 В, SDA — к пину А4, SCL — к А5. Контакты А4 и А5 выбираются с учетом их поддержки интерфейса I2C.
Существуют несколько модулей с этим датчиком. Первый вариант — это модуль для работы в 3.3 В логике, данные модули будут подешевле; второй вариант — для работы в 5.0 В логике, на нём присутствуют: линейный стабилизатор напряжения на 3.3 В и преобразователи уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA. Первый подойдёт для ардуин работающих от 3.3 В и Raspberry Pi / Orange Pi / Banana Pi и т.д., а второй — для обычных ардуин на 5.0 В.
Подключение BMP280 с встроенными стабилизатором напряжения на 3.3 В и преобразователями уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA к Arduino.
| Arduino Mega | Arduino Uno/Nano/Pro Mini | BMP280 модуль | Цвет проводов на фото |
|---|---|---|---|
| GND | GND | GND | Черный |
| 5V | 5V | Vin | Красный |
| 20 (SDA) | A4 | SDA/SDI | Зелёный |
| 21 (SCL) | A5 | SCL/SCK | Жёлтый |
Подключение BMP280 без встроенного стабилизатора напряжения на 3.3 В к Arduino. В данном случае нужно использовать внешний преобразователь уровней на линиях SCK/SCL и SDI(MOSI)/SDA.
| Arduino Mega | Arduino Uno/Nano/Pro Mini | BMP280 модуль | Цвет проводов на фото |
|---|---|---|---|
| GND | GND | GND | Черный |
| 3.3V | 3.3V | VCC/3.3V | Красный |
| 20 (SDA) | A4 | SDA/SDI | Зелёный |
| 21 (SCL) | A5 | SCL/SCK | Жёлтый |
Примеры скетча
После запуска вы можете инициализировать датчик с помощью:
if (!bmp.begin()) {
Serial.println("Could not find a valid BMP280 sensor, check wiring!");
while (1);
}
begin() вернет True, если датчик был найден, и False, если нет. В случае с False, проверьте соединение датчика с платой Arduino!
Считать температуру и давление легко, просто вызовите функции:
bmp.readTemperature(); // Температура в градусах Цельсия. bmp.readPressure(); // Атмосферное давление в гПа
Копируйте и скомпилируйте нижеприведённый скетч в Arduino IDE.
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp280;
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280"));
while (!bmp280.begin(BMP280_ADDRESS - 1)) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
delay(2000);
}
}
void loop() {
float temperature = bmp280.readTemperature();
float pressure = bmp280.readPressure();
float altitude = bmp280.readAltitude(1013.25);
Serial.print(F("Temperature = "));
Serial.print(temperature);
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(pressure);
Serial.println(" Pa");
Serial.print(F("Altitude = "));
Serial.print(altitude);
Serial.println(" m");
Serial.println();
delay(2000);
}
Результат
Температура рассчитывается в градусах Цельсия, вы можете преобразовать ее в градусы Фаренгейта, используя классическое уравнение F = C * 9/5 + 32.
Давление возвращается в единицах СИ Паскалей. 100 Паскалей = 1 гПа = 1 миллибар. Часто барометрическое давление сообщается в миллибарах или миллиметрах ртутного столба. Для дальнейшего использования 1 паскаль = 0,00750062 миллиметров ртутного столба или 1 миллиметр ртутного столба = 133,322 Паскаля. Таким образом, если вы возьмете значение паскаля, скажем, 100734 и разделите на 133,322, вы получите 755,57 миллиметров ртутного столба.
Также возможно превратить BMP280 в альтиметр. Если вы знаете давление на уровне моря, библиотека может рассчитать текущее атмосферное давление в высоту.
Подключение BMP280 к Arduino по SPI (аппаратный)
Поскольку это датчик с поддержкой SPI, можно использовать аппаратный или «программный» SPI для работы с датчиком.
Схема подключения BMP280 к Arduino
При подключении по SPI нужно соединить SCK/SCL с модуля к SCK (13й контакт на Ардуино), SDO с модуля к 12 выводу Ардуино, SDA/SDI — к 11 контакту, CSB (CS) — к любому цифровому пину, в данном случае к 10 контакту на Ардуино.
Подключение по SPI BMP280 с встроенными стабилизатором напряжения на 3.3 В и преобразователями уровней 3.3/5.0 В на линиях SCK и SDI(MOSI) к Arduino.
| Arduino Mega | Arduino Uno/Nano/Pro Mini | BMP280 модуль | Цвет проводов на фото |
|---|---|---|---|
| GND | GND | GND | Черный |
| 5V | 5V | Vin | Красный |
| 52 (SCK) | 13 (SCK) | SCL/SCK | Зелёный |
| 50 (MISO) | 12 (MISO) | SDO | Оранжевый |
| 51 (MOSI) | 11 (MOSI) | SDA/SDI | Жёлтый |
| 48 (SS/CS) | 10 (SS/CS) | CS/CSB | Синий |
Примеры скетча
Вы можете использовать аппаратный SPI. С аппаратным SPI вы должны использовать аппаратные выводы SPI вашего Arduino — у каждого типа arduino разные выводы! В этом случае вы можете использовать любой контакт CS, но остальные три контакта фиксированы.
Adafruit_BMP280 bmp(BMP_CS); // hardware SPI
Полный код примера:
#include <Adafruit_BMP280.h>
#define BMP_CS 10
Adafruit_BMP280 bmp280SPI(BMP_CS);
void setup() {
Serial.begin(9600);
Serial.println(F("bmp280SPI"));
while (!bmp280SPI.begin()) {
Serial.println(F("Could not find a valid bmp280SPI sensor, check wiring!"));
delay(2000);
}
}
void loop() {
float temperature = bmp280SPI.readTemperature();
float pressure = bmp280SPI.readPressure();
float altitude = bmp280SPI.readAltitude(1013.25);
Serial.print(F("Temperature = "));
Serial.print(temperature);
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(pressure);
Serial.println(" Pa");
Serial.print(F("Altitude = "));
Serial.print(altitude);
Serial.println(" m");
Serial.println();
delay(2000);
}
Результат
Подключение BMP280 к Arduino по SPI (программный)
Под программным SPI понимается использование драйвера Arduino SPI для эмуляции аппаратного SPI с использованием «битовой синхронизации». Это позволяет подключить SPI-устройство к любым контактам Arduino.
Схема подключения BMP280 к Arduino
Подключение по SPI BMP280 с встроенными стабилизатором напряжения на 3.3 В и преобразователями уровней 3.3/5.0 В на линиях SCK и SDI(MOSI) к Arduino.
| Arduino Mega | Arduino Uno/Nano/Pro Mini | BMP280 модуль | Цвет проводов на фото |
|---|---|---|---|
| GND | GND | GND | Черный |
| 5V | 5V | Vin | Красный |
| 52 (SCK) | 13 (SCK) | SCL/SCK | Зелёный |
| 50 (MISO) | 12 (MISO) | SDO | Оранжевый |
| 51 (MOSI) | 11 (MOSI) | SDA/SDI | Жёлтый |
| 48 (SS/CS) | 10 (SS/CS) | CS/CSB | Синий |
Примеры скетча
Вы можете создать объект BMP280 с любым программным SPI (где все четыре контакта могут быть любыми входами / выходами Arduino), используя:
Adafruit_BMP280 bmp(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
Полный код примера:
#include <Adafruit_BMP280.h>
#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10
Adafruit_BMP280 bmp280SoftSPI(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);
void setup() {
Serial.begin(9600);
Serial.println(F("BMP280 SPI (программный)"));
while (!bmp280SoftSPI.begin()) {
Serial.println(F("Could not find a valid BMP280 sensor, check wiring!"));
delay(2000);
}
}
void loop() {
float temperature = bmp280SoftSPI.readTemperature();
float pressure = bmp280SoftSPI.readPressure();
float altitude = bmp280SoftSPI.readAltitude(1013.25);
Serial.print(F("Temperature = "));
Serial.print(temperature);
Serial.println(" *C");
Serial.print(F("Pressure = "));
Serial.print(pressure);
Serial.println(" Pa");
Serial.print(F("Altitude = "));
Serial.print(altitude);
Serial.println(" m");
Serial.println();
delay(2000);
}
Результат
Материалы
Arduino Test | Adafruit BMP280 Barometric Pressure + Temperature Sensor Breakout | Adafruit Learning System
BME280 — датчик давления, температуры и влажности
GitHub — adafruit/Adafruit_BMP280_Library: Arduino Library for BMP280 sensors
Барометр BMP180 и BMP280 (датчик атмосферного давления, высотомер) (Trema-модуль v2.0) — Описания, примеры, подключение к Arduino
Датчик Давления BMP-280 С Arduino Учебник





