BME280 – высокоточный метеодатчик, измеряющий температуру, влажность и атмосферное давление. В зависимости от модуля может подключаться к I2C и SPI шинами микроконтроллера и работать от 3-5V, если на плате есть стабилизатор, или 3V, если его нет. BMP280 - "упрощённая" версия датчика, без влажности.
![]() |
В наборе GyverKIT | START | IOT | EXTRA |
---|---|---|---|---|
BMP280 | ✔ |
На обратной стороне платы не просто так написано BME280/BMP280 – BMP является урезанной версией BME, в которой нет влажности. Как их различить, если недобросовестный китаец не поставил галочку? По корпусу датчика:
В наборе GyverKIT первых партий (все наборы 2021 года) шёл BME280 версии I2C 5V, но старт продаж набора совпал с мировым кризисом микросхем, из за которого датчик стал сильно дефицитным и китайцы начали хитрить. В наборах GyverKIT 000, 001 и 002 партий можно встретить:
- Рабочий BME280
- Рабочий BMP280
- Нерабочий BMP280
В партии 003 и позже у нас рабочий BMP280. Для влажности используется другой датчик.
Подключение к Arduino #
Модуль подключается на шину I2C и питание, как и любой другой модуль такого типа:
- Arduino: SDA – A4, SCL – A5
- Wemos: SDA – D2, SCL – D1
Библиотеки #
- Adafruit BME280 (для работы также нужна Adafruit Sensor) – самая известная библиотека для работы с BME280. Очень тяжёлая, часть настроек доступна только при ручном редактировании библиотеки.
- GyverBME280 – наша библиотека, более удобная и лёгкая. Также поддерживает датчики BMP280
В примерах на этом сайте будем использовать GyverBME280, её можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverBME280. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Проверка датчика 1 #
Первым делом стоит удостовериться в работоспособности датчика и узнать его адрес, он может быть 0x77
и 0x76
. Загружаем следующий код:
#include <Wire.h>
void setup() {
Serial.begin(115200);
Serial.println("Start scan");
Wire.begin();
}
void loop() {
for (uint8_t i = 1; i < 128; i++) {
Wire.beginTransmission(i);
if (!Wire.endTransmission()) Serial.println(i, HEX);
}
Serial.println("...");
delay(5000);
}
Открываем монитор порта:
- Если вывелось только
Start scan
и ничего больше – датчик бракованный и не будет работать - Если это рабочий BMP/BME – получим вывод такого вида:
Start scan
76
...
76
...
Значит датчик ответил по адресу 0x76. Может ответить по 0x77.
- Если вывод имеет вид
Start scan
...
...
Значит Ардуино не находит датчиков на линии. Либо датчик подключен неправильно, либо бракованный.
Проверка датчика 2 #
Далее откроем базовый пример из библиотеки, который опрашивает значения с датчика. В begin()
можно передать адрес, который мы узнали из предыдущего скетча-сканера (не забываем префикс 0x
). Загружаем и открываем порт:
#include <GyverBME280.h>
GyverBME280 bme;
void setup() {
Serial.begin(115200);
Serial.println("Start");
// запуск датчика и проверка на работоспособность
if (!bme.begin(0x76)) Serial.println("Error!");
}
void loop() {
// температура
Serial.print("Temperature: ");
Serial.println(bme.readTemperature());
// влажность
Serial.print("Humidity: ");
Serial.println(bme.readHumidity());
// давление
Serial.print("Pressure: ");
Serial.println(bme.readPressure());
Serial.println();
delay(1000);
}
- Если выведется только слово
Start
– датчик бракованный и из-за этого программа зависла - Если выведется
Error!
– датчик бракованный или адрес не соответствует, вернись к предыдущему пункту - Корректно выводятся все три параметра
Start
Temperature: 24.78
Humidity: 41.69
Pressure: 99701.28
Датчик рабочий, и это BME280.
- Выводится температура и давление, влажность – 0
Start
Temperature: 24.78
Humidity: 0
Pressure: 99701.28
Датчик рабочий, и это BMP280, т.е. без влажности.
Полезные страницы #
- Набор GyverKIT – наш большой стартовый набор Arduino, продаётся в России
- Каталог ссылок на дешёвые Ардуины, датчики, модули и прочие железки с AliExpress
- Обратная связь – сообщить об ошибке в уроке или предложить дополнение по тексту ([email protected])
- Поддержать автора за работу над уроками