BMP280 Датчик атмосферного давления и температуры

Узнайте всё о датчике BMP280: технические характеристики, распиновка, схемы подключения, datasheet и примеры кода для ESP32, Arduino

Окружающая среда I2C SPI

Обзор

BMP280 — это высокоточный цифровой датчик атмосферного давления и температуры от Bosch Sensortec. Он является “золотым стандартом” для метеостанций, альтиметров и навигационных систем благодаря своей надежности, низкому энергопотреблению и поддержке интерфейсов I²C и SPI.

BMP280 — это преемник классических BMP180 и BMP085. Он обеспечивает невероятную точность измерения давления (до ±1 гПа) и температуры, что позволяет использовать его как прецизионный альтиметр с разрешением до нескольких десятков сантиметров.

Датчик BMP280
Быстрая навигация
Основные разделы
Примеры кода
Платформы

О датчике BMP280

BMP280, разработанный Bosch Sensortec, — это высокопроизводительный цифровой датчик атмосферного давления и температуры. Он оптимизирован для работы в условиях ограниченного пространства и низкого энергопотребления, что делает его незаменимым в носимой электронике и IoT.

Ключевые особенности

  • Высокая точность — Разрешение по давлению составляет 0.16 Па.
  • Двойной интерфейс — Поддержка I2C и SPI позволяет гибко выбирать схему подключения.
  • Энергоэффективность — Потребление всего 2.7 мкА при частоте опроса 1 Гц.
  • Широкий диапазон — Измерение давления от 300 до 1100 гПа (высота от -500 до +9000 метров).

🔗 Совместим с библиотеками Adafruit и Bosch для BMP280.

Где купить

Приобретите BMP280

Технические характеристики

Характеристики BMP280

Основные параметры датчика BMP280.

Интерфейс
I2C / SPI
Диапазон давления
300 ... 1100 гПа
Точность абс.
±1.0 гПа / ±1.0°C
Питание
1.71В ... 3.6В
Скачать datasheet (PDF)
Конфигурация пинов

Распиновка BMP280

Модуль BMP280 обычно имеет 6 пинов для обеспечения работы по обоим протоколам (I2C и SPI).

Схема распиновки
Модуль BMP280
Распиновка BMP280
Всего пинов
6
Советы по адресу
  • Пин 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 к ESP32
Протокол
I2C (Address 0x76)
Напряжение
3.3V (обязательно)
Таблица соединений (I2C)
BMP280 Pin На ESP32 Описание
VCC 3V3 Питание модуля.
GND GND Общая земля.
SDA GPIO21 Данные I2C.
SCL GPIO22 Тактирование I2C.
Устранение неполадок

Отладка BMP280

Ошибка: "Could not find a valid BMP280 sensor"
1. Проверьте I2C адрес. Попробуйте сменить 0x77 на 0x76 или наоборот.
2. Проверьте питание: датчик работает строго от 3.3В. 5В могут его повредить.
3. Убедитесь, что пин CSB подтянут к VCC (для режима I2C).
Показания давления "застыли"
Если вы используете режим FORCED, датчик делает одно измерение и засыпает. Для непрерывного потока данных используйте режим NORMAL.
Примеры программирования

Программирование BMP280

Arduino

Arduino IDE (Adafruit Library)

Простой способ начать работу

C++
#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

ESP-IDF (Native)

Для профессиональной разработки

C++
#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(&params);
    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, &params));

    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

ESPHome (No-Code)

Идеально для Home Assistant

YAML
sensor:
  - platform: bmp280
    temperature:
      name: "BMP280 Температура"
      oversampling: 16x
    pressure:
      name: "BMP280 Давление"
    address: 0x76
    update_interval: 60s
PlatformIO

PlatformIO

Настройка зависимостей

INI / C++

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

MicroPython

Для быстрой разработки на Python

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.

Безопасность

Датчик чувствителен к свету. Для максимальной точности размещайте его в защищенном от прямых лучей месте.

Альтернативные сенсоры