Обзор
BMP280 — это высокоточный цифровой датчик атмосферного давления и температуры от Bosch Sensortec. Он является “золотым стандартом” для метеостанций, альтиметров и навигационных систем благодаря своей надежности, низкому энергопотреблению и поддержке интерфейсов I²C и SPI.
BMP280 — это преемник классических BMP180 и BMP085. Он обеспечивает невероятную точность измерения давления (до ±1 гПа) и температуры, что позволяет использовать его как прецизионный альтиметр с разрешением до нескольких десятков сантиметров.
О датчике BMP280
BMP280, разработанный Bosch Sensortec, — это высокопроизводительный цифровой датчик атмосферного давления и температуры. Он оптимизирован для работы в условиях ограниченного пространства и низкого энергопотребления, что делает его незаменимым в носимой электронике и IoT.
⚡ Ключевые особенности
- Высокая точность — Разрешение по давлению составляет 0.16 Па.
- Двойной интерфейс — Поддержка I2C и SPI позволяет гибко выбирать схему подключения.
- Энергоэффективность — Потребление всего 2.7 мкА при частоте опроса 1 Гц.
- Широкий диапазон — Измерение давления от 300 до 1100 гПа (высота от -500 до +9000 метров).
🔗 Совместим с библиотеками Adafruit и Bosch для BMP280.
Приобретите BMP280
Характеристики BMP280
Основные параметры датчика BMP280.
Распиновка BMP280
Модуль BMP280 обычно имеет 6 пинов для обеспечения работы по обоим протоколам (I2C и SPI).
- Пин SDO управляет адресом I2C:
- LOW = 0x76 (по умолчанию).
- HIGH = 0x77.
| Пины | Название | Тип | Описание |
|---|---|---|---|
| 1 | VCC | Power | Питание (1.8В - 3.6В). |
| 2 | GND | Power | Общий провод. |
| 3 | SCL | Clock | Тактирование I2C / SPI SCK. |
| 4 | SDA | Data | Данные I2C / SPI SDI. |
| 5 | CSB | Input | Выбор режима (GND = I2C, HIGH = SPI). |
| 6 | SDO | Output | Выбор адреса I2C / SPI MISO. |
Подключение BMP280 к ESP32
Для работы по протоколу I2C пин CSB должен быть подтянут к питанию (или оставлен висеть, если на модуле есть подтяжка).
| BMP280 Pin | На ESP32 | Описание |
|---|---|---|
| VCC | 3V3 | Питание модуля. |
| GND | GND | Общая земля. |
| SDA | GPIO21 | Данные I2C. |
| SCL | GPIO22 | Тактирование I2C. |
Отладка BMP280
Ошибка: "Could not find a valid BMP280 sensor"
2. Проверьте питание: датчик работает строго от 3.3В. 5В могут его повредить.
3. Убедитесь, что пин CSB подтянут к VCC (для режима I2C).
Показания давления "застыли"
Программирование BMP280
Arduino IDE (Adafruit Library)
Простой способ начать работу
C++
Arduino IDE (Adafruit Library)
Простой способ начать работу
#include <Wire.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp; // Использование I2C по умолчанию
void setup() {
Serial.begin(115200);
// Начинаем работу с адресом 0x76 (наиболее частый для модулей)
if (!bmp.begin(0x76)) {
Serial.println("Датчик не найден. Проверьте адрес и проводку!");
while (1);
}
/* Настройки по умолчанию из даташита */
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL,
Adafruit_BMP280::SAMPLING_X2,
Adafruit_BMP280::SAMPLING_X16,
Adafruit_BMP280::FILTER_X16,
Adafruit_BMP280::STANDBY_MS_500);
}
void loop() {
Serial.print("Температура: ");
Serial.print(bmp.readTemperature());
Serial.println(" *C");
Serial.print("Давление: ");
Serial.print(bmp.readPressure() / 100.0); // Конвертация в гПа (hPa)
Serial.println(" гПа");
Serial.print("Приблизительная высота: ");
Serial.print(bmp.readAltitude(1013.25)); // 1013.25 - давление на уровне моря
Serial.println(" м");
delay(2000); // Опрос каждые 2 секунды
}
ESP-IDF (Native)
Для профессиональной разработки
C++
ESP-IDF (Native)
Для профессиональной разработки
#include "bmp280.h"
#include "esp_log.h"
// Используйте компоненты из esp-idf-lib
static const char *TAG = "BMP280_APP";
void app_main() {
bmp280_params_t params;
bmp280_init_default_params(¶ms);
bmp280_t dev;
// Инициализация I2C и датчика
ESP_ERROR_CHECK(bmp280_init_desc(&dev, BMP280_I2C_ADDRESS_0, 0, GPIO_NUM_21, GPIO_NUM_22));
ESP_ERROR_CHECK(bmp280_init(&dev, ¶ms));
float pressure, temperature, humidity;
while (1) {
if (bmp280_read_float(&dev, &temperature, &pressure, &humidity) == ESP_OK) {
ESP_LOGI(TAG, "Temp: %.2f C, Press: %.2f Pa", temperature, pressure);
}
vTaskDelay(pdMS_TO_TICKS(2000));
}
}
ESPHome (No-Code)
Идеально для Home Assistant
YAML
ESPHome (No-Code)
Идеально для Home Assistant
sensor:
- platform: bmp280
temperature:
name: "BMP280 Температура"
oversampling: 16x
pressure:
name: "BMP280 Давление"
address: 0x76
update_interval: 60s
PlatformIO
Настройка зависимостей
INI / C++
PlatformIO
Настройка зависимостей
platformio.ini
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
lib_deps =
adafruit/Adafruit BMP280 Library @ ^2.6.8
adafruit/Adafruit Unified Sensor @ ^1.1.14
MicroPython
Для быстрой разработки на Python
Python
MicroPython
Для быстрой разработки на Python
from machine import Pin, I2C
from bmp280 import BMP280 # Требуется библиотека bmp280.py
i2c = I2C(0, scl=Pin(22), sda=Pin(21))
bmp = BMP280(i2c)
# Чтение данных
temp = bmp.temperature
press = bmp.pressure
print("Temp: {} C, Press: {} Pa".format(temp, press))
Итоги и похожие варианты
Рекомендации
Используйте BMP280 для метеостанций и простых альтиметров. Если нужна влажность, выбирайте BME280.
Безопасность
Датчик чувствителен к свету. Для максимальной точности размещайте его в защищенном от прямых лучей месте.