BME280 и BMP280 — одни из самых удобных датчиков для метеостанций, домашних дисплеев, логгеров, теплиц, высотомеров и IoT-проектов. Они маленькие, цифровые, не требуют аналоговой калибровки в каждом скетче и подключаются к контроллеру двумя проводами I2C.
Но вокруг них много путаницы. Продавец может подписать карточку «BME280», а на плате окажется BMP280. Модуль на 4 пина иногда работает от 5 В, а такой же визуально похожий — только от 3,3 В. Контакты SCL и SDA на шестипиновом модуле могут быть не только I2C, но и линиями SPI. А ошибка Could not find a valid BME280 sensor часто означает не сломанный датчик, а неверный I2C-адрес: 0x76 вместо 0x77.
Разберём всё по порядку.
BME280 и BMP280: главное отличие
| Возможность | BMP280 | BME280 |
|---|---|---|
| Температура | Да | Да |
| Атмосферное давление | Да | Да |
| Относительная влажность | Нет | Да |
| Интерфейсы | I2C и SPI | I2C и SPI |
| Типичное применение | Барометр, высотомер, компенсация давления | Метеостанция, климат, теплица, домашний мониторинг |
| Совместимость библиотек | Нужна библиотека BMP280 или универсальная | Нужна библиотека BME280 или универсальная |

Главное правило простое:
- нужен только температурный датчик и барометр — BMP280 достаточно;
- нужна ещё и влажность — покупай BME280;
- если в проекте рассчитан вывод
%RH, BMP280 не подойдёт физически: в нём нет чувствительного элемента влажности.
Что именно измеряют датчики
Температура
Оба датчика показывают температуру самого корпуса микросхемы. Если модуль стоит рядом с ESP32, стабилизатором, экраном или внутри закрытого корпуса, он часто покажет температуру выше, чем в комнате. Это не поломка: датчик слегка нагревается от окружающей электроники.
Для домашней метеостанции выноси BME280/BMP280 дальше от тёплых компонентов и не закрывай его герметично. Для измерения температуры воздуха в корпусе полезно сделать вентиляционные отверстия, но защитить плату от прямого света, воды и пыли.
Атмосферное давление
Датчик измеряет абсолютное давление в точке установки. На уровне моря стандартное давление принято считать около 1013,25 гПа, но реальное значение зависит от погоды и высоты над уровнем моря.
Давление удобно использовать для:
- наблюдения за погодной тенденцией;
- оценки высоты и изменения высоты;
- компенсации показаний других датчиков;
- построения графика давления в домашней метеостанции.
Не путай абсолютное давление с тем, которое показывают в прогнозе погоды. Сервисы обычно приводят давление к уровню моря. Датчик в квартире на 150 м над уровнем моря покажет меньше, и это будет правильно.
Влажность
Только BME280 умеет мерить уровень влажности. Он измеряет относительную влажность — сколько водяного пара содержится в воздухе относительно максимального количества, которое воздух может удержать при этой температуре.
Влажность зависит от температуры, поэтому BME280 измеряет её вместе с температурой и выдаёт уже компенсированный результат. Для контроля комнаты, теплицы, шкафа с филаментом, инкубатора или хранения электроники это намного полезнее одного BMP280.
Почему модули выглядят одинаково
Чипы BME280 и BMP280 выпускаются в маленьком LGA-корпусе. На дешёвом breakout-модуле обычно видна небольшая квадратная микросхема под защитной крышкой/на плате, и по фото отличить её бывает трудно.
Дополнительная проблема — маркировка продавцов. Иногда одинаковые синие или фиолетовые платы называют BME280 независимо от реального установленного чипа. Надпись на PCB тоже не стопроцентная гарантия: производители могут использовать одну разводку для обоих вариантов.
Как проверить, какой датчик у вас
Самый надёжный способ — прочитать идентификатор микросхемы по I2C.
0x60— BME280.0x58— BMP280.
Адрес устройства (0x76 или 0x77) и идентификатор чипа — это разные вещи. Адрес отвечает на вопрос «где датчик на I2C-шине?», а chip ID — «какой датчик ответил».
Ниже есть готовый скетч, который сканирует I2C и читает регистр ID 0xD0.
Почему библиотека иногда «видит» BMP280 как BME280?
Некоторые библиотеки сначала проверяют адрес и базовые регистры, а затем пытаются читать данные по похожей карте памяти. Давление и температура могут выглядеть правдоподобно, потому что у чипов родственная архитектура. Но значение влажности на BMP280 будет отсутствовать, быть нулевым, nan или бессмысленным.
Проверяй chip ID, а не только название товара или то, что программа «не выдала ошибку».
Модуль на 4 и 6 пинов
Количество выводов относится не к чипу Bosch, а к готовой плате-модулю. Один и тот же BME280/BMP280 может быть распаян на разных PCB.
4 пина: обычный I2C-модуль
Наиболее распространённый вариант:
VCC(VIN) | GND | SCL | SDAТакой модуль уже настроен на I2C. Вы просто подаёте питание и соединяете SDA/SCL с контроллером.
| Пин | Назначение |
|---|---|
VCC / VIN | Питание модуля |
GND | Общий провод |
SCL | Тактовая линия I2C |
SDA | Линия данных I2C |
Это лучший вариант для первого проекта: проводов мало, библиотек много, а скорости I2C достаточно для температуры, давления и влажности.
6 пинов: I2C + SPI
На универсальном модуле обычно есть:
VCC | GND | SCL(SCK) | SDA(SDI) | CS(CSB) | SDOЭто не две разные платы. В режиме I2C линии используются так:
| Маркировка на плате | В режиме I2C |
|---|---|
SCL / SCK | SCL, тактирование I2C |
SDA / SDI | SDA, данные I2C |
CS / CSB | Должен быть подтянут к питанию, чтобы выбрать I2C |
SDO | Выбирает I2C-адрес: GND = 0x76, VCC = 0x77 |
В режиме SPI те же контакты получают другое назначение:
| Маркировка | В режиме SPI |
|---|---|
SCL / SCK | SCK, тактовая линия SPI |
SDA / SDI | MOSI, данные от контроллера к датчику |
SDO | MISO, данные от датчика к контроллеру |
CS / CSB | Chip Select, выбор датчика |
Поэтому шестипиновый модуль не «лучше измеряет» и не имеет больше датчиков. Он просто даёт доступ к обоим цифровым интерфейсам.
В документации BME280 для breakout-платы с шестью контактами как раз перечислены VCC, GND, SCL/SCK, SDA/SDI, CSB и SDO; BME280 поддерживает как I2C, так и SPI.
I2C или SPI: что выбрать
Для 95% любительских метеостанций выбирай I2C.
| Критерий | I2C | SPI |
|---|---|---|
| Провода к одному датчику | 2 сигнальных | 4 сигнальных + CS |
| Удобство | Очень высокое | Ниже, больше соединений |
| Несколько устройств | Общая шина, разные адреса | Общие линии, отдельный CS на каждый датчик |
| Скорость | Достаточна для BME/BMP280 | Выше, но обычно не нужна |
| Когда использовать | Датчики, OLED, RTC, обычный DIY | Адресный конфликт, длинный/нагруженный проект, специфическая архитектура |
BME280/BMP280 меняются медленно: температура, влажность и давление не требуют тысяч измерений в секунду. Преимущество SPI по скорости здесь почти никогда не важно.
SPI стоит выбрать, если:
- на I2C-шине уже есть устройство с тем же адресом и нельзя изменить адрес;
- вы используете несколько одинаковых BME/BMP280;
- проект уже построен вокруг SPI;
- хотите изучить SPI на реальном примере.
Адреса I2C: 0x76 и 0x77
У BME280 и BMP280 есть два стандартных 7-битных I2C-адреса:
0x76
0x77Адрес выбирается входом SDO:
SDO → GND = 0x76
SDO → VCC = 0x77На 4-пиновом модуле SDO часто уже подтянут к земле через резистор, поэтому по умолчанию он отвечает на 0x76. На 6-пиновом модуле этот вывод может быть доступен отдельно, и адрес можно изменить перемычкой или проводом.
В режиме I2C вход CS/CSB должен быть подтянут к VCC. На готовом 4-пиновом модуле это обычно уже сделано на плате. На шестипиновом модуле проверь схему: часто CS уже подтянут к VCC, но не всегда.
Два одинаковых датчика можно подключить к одной I2C-шине, если один работает на
0x76, а второй — на0x77. Третий такой же датчик потребует I2C-мультиплексор, SPI или отдельную I2C-шину.
Питание: сам чип и готовый модуль — не одно и то же
Это самое важное место статьи.
Сам BME280/BMP280
Оригинальный чип Bosch — 3,3-вольтовый. BME280 допускает основное питание 1,71–3,6 В и интерфейс 1,2–3,6 В. Подача 5 В на контакты самого чипа или на его линии I2C/SPI может его повредить. [web:187][web:197]
Готовый модуль
Готовая breakout-плата может содержать:
- стабилизатор 3,3 В;
- резистивные делители или level shifter для I2C;
- подтягивающие резисторы;
- защитные компоненты;
- только сам чип с конденсаторами, без какой-либо защиты.
Поэтому маркировка VCC не гарантирует допустимость 5 В. Если на плате написано VIN, 3-5V или в документации указано питание 3,3/5 В, вероятно, на ней есть стабилизатор и согласование уровней. Если написано 3V3, 3.3V only или вы видите минимальный модуль без стабилизатора, подавайте только 3,3 В.
| Тип модуля | Чем питать от Arduino Uno | Чем питать от ESP32/RP2040/STM32 3,3 В | Особенность |
|---|---|---|---|
| Голый чип/минимальная плата 3,3 В | 3.3V, не 5V | 3.3V | Линии логики тоже только 3,3 В |
Модуль с VIN/3-5V и level shifting | 5V или 3.3V по документации | Лучше 3.3V | Проверяй, куда подтянуты SDA/SCL |
| Неизвестный модуль | Только 3.3V до проверки | 3.3V | Самый безопасный вариант |
Почему для ESP32 лучше 3,3 В даже на «5V-compatible» плате
Если датчик и ESP32 работают от 3,3 В, у I2C линий безопасный высокий уровень 3,3 В. Если подать на breakout 5 В, его SDA/SCL могут быть подтянуты к 5 В. Для ESP32 это опасно.
Некоторые качественные модули действительно имеют level shifter и безопасны при питании 5 В, но с дешёвым модулем лучше не гадать. Питание 3,3 В почти всегда решает вопрос.
Подключение по I2C к Arduino Uno/Nano
Вариант: 3,3-вольтовый или неизвестный модуль
Питайте от 3.3V Arduino, чтобы I2C-уровни не стали 5-вольтовыми.
| BME280/BMP280 | Arduino Uno/Nano |
|---|---|
VCC / 3V3 | 3.3V |
GND | GND |
SDA | A4 / SDA |
SCL | A5 / SCL |
BME280 / BMP280 Arduino Uno / Nano
--------------- ------------------
VCC ------------------- 3.3V
GND ------------------- GND
SDA ------------------- A4 / SDA
SCL ------------------- A5 / SCLУ Arduino Uno/Nano классические I2C-пины логически работают от 5 В. Многие BME/BMP280-модули нормально принимают 5-вольтовый HIGH на SCL/SDA, если на плате есть согласование уровней; но для голого 3,3-вольтового модуля нужен двунаправленный I2C level shifter. Питание от 3,3 В само по себе не всегда делает I2C безопасным: Arduino всё ещё может активно выдавать HIGH около 5 В.
Для быстрого учебного старта лучше использовать breakout, который явно заявлен как совместимый с 5 В, либо Arduino-плату с 3,3-вольтовой логикой. Если модуль неизвестен, не считай подключение к Uno «автоматически безопасным».
Вариант: модуль, явно поддерживающий 3–5 В
Если datasheet модуля подтверждает встроенный стабилизатор и согласование уровней:
| BME280/BMP280 | Arduino Uno/Nano |
|---|---|
VIN / VCC | 5V |
GND | GND |
SDA | A4 / SDA |
SCL | A5 / SCL |
На Arduino Mega I2C — это SDA = 20 и SCL = 21. На Arduino Leonardo/Micro и современных платах лучше ориентироваться на подписи SDA/SCL, а не на номера аналоговых входов.
Подключение по I2C к ESP32
Для классической ESP32 DevKit принято использовать GPIO21 как SDA и GPIO22 как SCL.
| BME280/BMP280 | ESP32 DevKit |
|---|---|
VCC / 3V3 | 3V3 |
GND | GND |
SDA | GPIO21 |
SCL | GPIO22 |
BME280 / BMP280 ESP32 DevKit
--------------- -----------
VCC ------------------- 3V3
GND ------------------- GND
SDA ------------------- GPIO21
SCL ------------------- GPIO22На ESP32 I2C можно назначить на другие GPIO программно, но начинай с GPIO21/22: так проще использовать примеры. Не подключай к этим линиям модуль, который подтягивает SDA/SCL к 5 В.
Сканер I2C для Arduino и ESP32
Прежде чем ставить библиотеку, проверь, что контроллер вообще видит модуль. Сканер должен найти 0x76 или 0x77.
#include <Wire.h>
#if defined(ESP32)
constexpr int SDA_PIN = 21;
constexpr int SCL_PIN = 22;
#endif
void setup() {
Serial.begin(115200);
#if defined(ESP32)
Wire.begin(SDA_PIN, SCL_PIN);
#else
Wire.begin();
#endif
Serial.println("I2C scan started");
}
void loop() {
int devices = 0;
for (uint8_t address = 1; address < 127; address++) {
Wire.beginTransmission(address);
uint8_t error = Wire.endTransmission();
if (error == 0) {
Serial.print("Found device at 0x");
if (address < 16) Serial.print('0');
Serial.println(address, HEX);
devices++;
}
}
if (devices == 0) {
Serial.println("No I2C devices found");
}
Serial.println("---");
delay(3000);
}Ожидаемый результат:
Found device at 0x76или:
Found device at 0x77Если I2C-сканер не видит ничего, не переходи к сложному коду с библиотекой. Сначала проверь GND, питание, SDA/SCL, уровни 3,3/5 В и распиновку платы.
Как проверить chip ID: BME280 или BMP280
После того как известен адрес I2C, прочитаем регистр 0xD0.
#include <Wire.h>
constexpr uint8_t SENSOR_ADDRESS = 0x76; // Если сканер показал 0x77 — измени здесь.
constexpr uint8_t CHIP_ID_REGISTER = 0xD0;
uint8_t readRegister(uint8_t address, uint8_t reg) {
Wire.beginTransmission(address);
Wire.write(reg);
Wire.endTransmission(false);
Wire.requestFrom(address, (uint8_t)1);
if (Wire.available()) {
return Wire.read();
}
return 0x00;
}
void setup() {
Serial.begin(115200);
#if defined(ESP32)
Wire.begin(21, 22);
#else
Wire.begin();
#endif
uint8_t id = readRegister(SENSOR_ADDRESS, CHIP_ID_REGISTER);
Serial.print("Chip ID: 0x");
Serial.println(id, HEX);
if (id == 0x60) {
Serial.println("Это BME280: температура, давление, влажность");
} else if (id == 0x58) {
Serial.println("Это BMP280: температура и давление, без влажности");
} else {
Serial.println("Неожиданный ID. Проверь адрес, подключение и модуль.");
}
}
void loop() {
}Этот тест полезнее, чем спор по фотографии товара: он проверяет фактическую микросхему на вашей плате.
Библиотеки для Arduino IDE
Для примеров ниже используются библиотеки Adafruit:
Adafruit BME280 Library;Adafruit BMP280 Library;Adafruit Unified Sensor— обычно устанавливается как зависимость.
Установка:
- Открой Sketch → Include Library → Manage Libraries….
- Найди
Adafruit BME280 LibraryилиAdafruit BMP280 Library. - Нажми Install.
- Если Arduino IDE предложит установить
Adafruit Unified Sensor, согласись.
Для BME280 и BMP280 нужны разные заголовки и разные классы. Не используй библиотеку BME280 для настоящего BMP280 только потому, что его плата подписана похоже.
Код BME280 для Arduino и ESP32: температура, влажность, давление
Этот скетч подходит для Arduino Uno/Nano и классического ESP32. Для ESP32 оставь строку Wire.begin(21, 22). Для Arduino она не выполняется благодаря условной компиляции.
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
Adafruit_BME280 bme;
bool connectBME280() {
// Сначала пробуем самый частый адрес.
if (bme.begin(0x76)) {
return true;
}
// Затем второй допустимый адрес.
return bme.begin(0x77);
}
void setup() {
Serial.begin(115200);
#if defined(ESP32)
Wire.begin(21, 22);
#else
Wire.begin();
#endif
if (!connectBME280()) {
Serial.println("BME280 не найден. Проверь адрес 0x76/0x77, питание и SDA/SCL.");
while (true) {
delay(1000);
}
}
}
void loop() {
Serial.print("Temperature: ");
Serial.print(bme.readTemperature(), 1);
Serial.println(" C");
Serial.print("Humidity: ");
Serial.print(bme.readHumidity(), 1);
Serial.println(" %");
Serial.print("Pressure: ");
Serial.print(bme.readPressure() / 100.0F, 1);
Serial.println(" hPa");
Serial.println("---");
delay(2000);
}Метод readPressure() возвращает давление в паскалях, поэтому для гПа (hPa) его делят на 100. Один hPa равен одному mbar, поэтому на погодных сайтах и экранах метеостанций эти единицы часто используют как взаимозаменяемые.
Код BMP280 для Arduino и ESP32: температура и давление
#include <Wire.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp;
bool connectBMP280() {
if (bmp.begin(0x76)) {
return true;
}
return bmp.begin(0x77);
}
void setup() {
Serial.begin(115200);
#if defined(ESP32)
Wire.begin(21, 22);
#else
Wire.begin();
#endif
if (!connectBMP280()) {
Serial.println("BMP280 не найден. Проверь адрес, питание и подключение.");
while (true) {
delay(1000);
}
}
}
void loop() {
Serial.print("Temperature: ");
Serial.print(bmp.readTemperature(), 1);
Serial.println(" C");
Serial.print("Pressure: ");
Serial.print(bmp.readPressure() / 100.0F, 1);
Serial.println(" hPa");
Serial.println("---");
delay(2000);
}Если в этом коде температура и давление читаются нормально, а вы ожидали влажность, проверь chip ID. Скорее всего, вместо BME280 у вас BMP280.
Подключение 6-пинового модуля по SPI
SPI почти всегда избыточен для BME/BMP280, но полезно понимать распиновку.
Пример для Arduino Uno:
| Модуль BME/BMP280 | Arduino Uno |
|---|---|
VCC | 3.3V или 5V только для подтверждённого 5V-модуля |
GND | GND |
SCK / SCL | D13 / SCK |
SDI / SDA | D11 / MOSI |
SDO | D12 / MISO |
CS / CSB | D10 или другой цифровой пин |
BME280/BMP280 (SPI) Arduino Uno
------------------- -----------
SCK / SCL ------------- D13 / SCK
SDI / SDA ------------- D11 / MOSI
SDO ------------- D12 / MISO
CS / CSB ------------- D10
GND ------------- GND
VCC ------------- 3.3V / по документации модуляДля SPI нужна библиотека, поддерживающая этот режим, и другой конструктор с CS-пином. В большинстве обычных скетчей не переходи на SPI без причины: I2C требует меньше проводов и проще диагностируется сканером.
Высота по давлению: почему это приблизительно
BME/BMP280 позволяют оценить высоту, потому что давление с высотой уменьшается. Многие библиотеки имеют метод вроде readAltitude(seaLevelPressure).
Но это не GPS. Если давление на улице изменилось из-за погоды, датчик решит, что вы переместились по высоте. Ошибка в 1 гПа соответствует примерно 8 метрам высоты возле уровня моря.
Для относительного измерения — например, поднялись на лестнице, лифте или на дроне — BME/BMP280 очень полезны. Для абсолютной высоты нужно регулярно обновлять давление на уровне моря из метеоданных или иметь известную высоту стартовой точки.
Пример для BME280:
float altitude = bme.readAltitude(1013.25F);
Serial.print("Estimated altitude: ");
Serial.print(altitude, 1);
Serial.println(" m");Значение 1013.25 — стандартное давление на уровне моря, а не универсально правильное число для вашего города и текущей погоды.
Настройки точности, шума и расхода
BME280/BMP280 позволяют выбирать oversampling, фильтр и режим измерения. Чем больше усреднений, тем спокойнее показания, но тем дольше измерение и выше расход энергии.
Для домашней метеостанции, которая обновляет экран раз в 1–5 секунд, обычно достаточно стандартных настроек библиотеки. Для батарейного устройства полезно:
- использовать forced mode: датчик измерил, вернулся в сон;
- измерять реже, например раз в минуту;
- отключать OLED и радиомодуль между измерениями;
- не включать максимальное oversampling без необходимости;
- проверять потребление всей платы, а не только датчика.
Часто ESP32 DevKit с USB-UART и светодиодом расходует намного больше BME280 в sleep-режиме. Поэтому замена датчика сама по себе не гарантирует хороший срок работы от батареи.
Частые проблемы
Сканер не находит 0x76 или 0x77
Проверь по порядку:
- Есть ли соединение GND между модулем и контроллером.
- Не перепутаны ли SDA и SCL.
- Для ESP32: вызван ли
Wire.begin(21, 22)и подключены ли провода к GPIO21/22. - Получает ли модуль 3,3 В или допустимые 5 В согласно его документации.
- Не подтянуты ли линии I2C к 5 В при работе с ESP32/RP2040/STM32.
- Не выбрали ли вы SPI-модуль, у которого CS не подтянут к VCC для режима I2C.
- Не сидит ли устройство на
0x77, пока код ищет только0x76.
На BME280 влажность равна 0% или nan
- Проверь chip ID: возможно, это BMP280.
- Убедись, что используется
Adafruit_BME280, а неAdafruit_BMP280. - Не закрыт ли модуль конденсатом, герметиком или плотной лентой.
- Дай датчику стабилизироваться после включения.
Температура выше комнатной на 2–5 °C
Чаще всего BME280 стоит слишком близко к ESP32, линейному стабилизатору, OLED или DC-DC. Вынеси его на проводах, добавь отверстия в корпусе и не размещай над горячими компонентами.
Давление «не совпадает» с погодным сайтом
Сайт обычно показывает давление, приведённое к уровню моря. Ваш датчик показывает давление в реальной точке установки. Сравнивать можно после пересчёта с учётом высоты или при указании одного и того же типа давления.
BME280 периодически пропадает на длинных проводах
I2C плохо любит длинные провода, большую ёмкость и слишком сильные/слабые подтяжки. Укороти соединения, уменьшите частоту I2C, убедись в общей земле и не ставь множество pull-up резисторов параллельно без расчёта.
Я подключил 6-пиновый модуль как 4-пиновый, но он не работает
На части 6-пиновых плат для I2C необходимо подтянуть CS/CSB к VCC. Если этого не сделать, чип может ожидать SPI. Проверь datasheet именно своей платы: CS должен быть HIGH для I2C, а SDO задаёт адрес 0x76/0x77.
Что выбрать: быстрый ответ
| Сценарий | Что покупать |
|---|---|
| Домашняя метеостанция, влажность комнаты, теплица | BME280, 4-пиновый I2C-модуль |
| Барометр, высотомер, давление и температура без влажности | BMP280, 4-пиновый I2C-модуль |
| Два одинаковых датчика на одной шине | Модули с адресами 0x76 и 0x77 либо 6-пиновый модуль с SDO |
| Нужно изучить SPI или избежать конфликта адресов | 6-пиновый BME280/BMP280 с CS и SDO |
| ESP32/RP2040/STM32 с 3,3 В | Любой подтверждённый 3,3-вольтовый модуль; питать от 3V3 |
| Arduino Uno/Nano с 5 В | Модуль, где явно заявлены 3–5 В и level shifting, либо 3,3 В breakout + I2C level shifter |
| Нужно точнее измерять температуру воздуха | Внешний датчик DS18B20/SHT31, расположенный дальше от греющейся платы |
Что запомнить
- BMP280: температура + давление. BME280: температура + давление + влажность.
- Влажность нельзя «добавить библиотекой»: у BMP280 для неё нет физического чувствительного элемента.
- Четыре пина почти всегда означают I2C; шесть пинов дают I2C и SPI.
- В I2C у
CSдолжен быть HIGH, аSDOвыбирает адрес: GND =0x76, VCC =0x77. - Сам чип Bosch рассчитан на 3,3 В. 5 В допустимы только на breakout-модуле с подходящей обвязкой.
- Для ESP32 безопасный базовый вариант: питать от 3V3 и подключить SDA к GPIO21, SCL к GPIO22.
- Сначала запускай I2C-сканер, затем считывай chip ID
0xD0, и только потом выбирай библиотеку. - Датчик показывает температуру своего окружения, а не обязательно точную температуру воздуха в комнате.
Проверь себя
- В карточке товара написано BME280, но код показывает chip ID
0x58. Какие данные вы реально сможете получить? - Почему не стоит автоматически подавать 5 В на любой модуль с надписью BME280/BMP280?
- Что нужно сделать с
SDO, чтобы переключить I2C-адрес с0x76на0x77? - Зачем на шестипиновом модуле контакт
CS, если вы хотите использовать только I2C?
Показать ответы
- ID
0x58соответствует BMP280. Он измеряет температуру и давление, но не влажность. Нужно использовать библиотеку BMP280 и не ждать корректного%RH. - Сам BME280/BMP280 — 3,3-вольтовый чип. У некоторых модулей есть стабилизатор и согласование уровней, у других — нет. На минимальную 3,3-вольтовую плату 5 В могут повредить чип или линии I2C/SPI.
- Подтянуть SDO к VCC. При SDO на GND используется
0x76, при SDO на VCC —0x77. - CS/CSB выбирает интерфейс. Для I2C он должен находиться в HIGH, чтобы чип не перешёл в SPI-режим. На 4-пиновом модуле это обычно уже сделано разводкой платы.