Skip to contentSkip to main navigation Skip to footer

Arduino и метеодатчик BME280/BMP280

Описание


BME280 – высокоточный метеодатчик, измеряющий такие параметры микроклимата как температура, влажность и атмосферное давление. В зависимости от модуля может подключаться к I2C и SPI шинами микроконтроллера и работать от 3-5V, если на плате есть стабилизатор, или 3V, если его нет.

На обратной стороне платы не просто так написано BME280/BMP280 – BMP является урезанной версией BME, в которой нет влажности. Как их различить, если недобросовестный китаец не поставил галочку? По корпусу датчика:

В наборе GyverKIT первых партий (все наборы 2021 года) шёл BME280 версии I2C 5V, но старт продаж набора совпал с мировым кризисом микросхем, из за которого датчик стал сильно дефицитным и китайцы начали хитрить. В наборах GyverKIT 000, 001 и 002 партий можно встретить:

  • Рабочий BME280
  • Рабочий BMP280
  • Нерабочий BMP280

В партии 003 у нас рабочий BMP280. Для влажности используется другой датчик.

Мы приносим свои извинения за эту ситуацию, вы можете запросить возврат средств за модуль у магазина Giant4.

Подключение


Модуль подключается на шину I2C и питание, как и любой другой модуль такого типа:

  • Arduino: SDA – A4, SCL – A5
  • Wemos: SDA – D2, SCL – D1

Библиотеки


  • Adafruit BME280 (для работы также нужна Adafruit Sensor) – самая известная библиотека для работы с BME280. Очень тяжёлая, часть настроек доступна только при ручном редактировании библиотеки.
  • GyverBME280 – наша библиотека, более удобная и лёгкая. Также поддерживает датчики BMP280

В примерах на этом сайте мы будем использовать GyverBME280. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverBME280. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.

Примеры


Первым делом стоит удостовериться в работоспособности датчика и узнать его адрес, он может быть 0x77 и 0x76. Загружаем следующий код:

#include <Wire.h>
void setup() {
  Serial.begin(9600);
  Serial.println("Start scan");
}

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

Значит Ардуино не находит датчиков на линии. Либо датчик подключен неправильно, либо бракованный.

Далее откроем базовый пример из библиотеки, который опрашивает значения с датчика. В begin() можно передать адрес, который мы узнали из предыдущего скетча-сканера (не забываем префикс 0x). Загружаем и открываем порт:

#include <GyverBME280.h>
GyverBME280 bme;

void setup() {
  Serial.begin(9600);
  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, т.е. без влажности.

Полезный пример?

Похожие примеры
15 Комментариев
  • Написано Версия 280BME P. Подал 5В потом 3,3 В. Думал сгорел,вышел из строй.На окно вывел -“St”-но ввел все скетчи и обрадовала работой.Только влажности нет.Сейчас разбираюсь вторым .

  • Второй не рабочий.
    Смотрите тех данные модуля. Оба на температуру от -40 до +85 С.
    В вашем районе может быть дни ниже 40 С.

  • Пробовал считать данные сдатчика BMP280, с помощью вашей библиотеки, но ничего не вышло. Попытка с читать адрес так же ничего не дала. Попробовал использовать другой код https://disk.yandex.ru/d/T3J7Azsfh7IZ5g. Он показал что адрес устройства 0x76. Указал адрес в скетче также нет результата. Загрузил библиотеку Adafruit, указал что адрес 0x76, работает. Начал разбираться в чём дело. Оказалось что в библиотеке Adafruit при инициализации указывается также CHIPID, по умолчанию он стоит 0x58. Стал искать где в вашей библиотеке указан данный параметр. Это оказался файл GyverBME280.cpp строка 33:
    if(GyverBME280::readRegister(0xD0) != 0x60) return false; // Check chip ID.

    Изменил 0x60 на 0x58 и всё заработало.

    Думаю что в вашу библиотеку также стоит внести возможность указать CHIPID при инициализации.

  • Оказывается я использовал библиотеку версии 1.4. В версии 1.5 всё работает.

  • Хороший урок, но я бы еще добавил то, что эти датчики для начала лучше бы иметь с припаянными ножками, так как в моем случае без них очень легко теряется сигнал и все тесты теряют смысл

  • подключил датчик по схеме , но при подключении в порт usb ноута мне пишет что порту не хватает электропитания , что делать ?

  • Есть ли инструкция как в проекте с метеостанцией запустить BMP280, прислали не тот к сожалению китайцы

  • Определил адрес как 76.
    запустил скетч,и он выдал все по 0.00

    “Temperature: 0.00
    Humidity: 0.00
    Pressure: 0.00”
    Датчик не рабочий?

  • Купил у китайцев один такой датчик BMP280, ответил по адресу 0x76, тут вопросов нет, видно что рабочий датчик, влажность не показывает, но это я сразу знал когда заказывал. Температуру вроде бы как корректно показывает. А вот давление выводит очень высокое, 1244 мм рт ст.
    Температура: 25.89
    Давление: 165914.21

    Температура: 25.88
    Давление: 165912.82

    Температура: 25.89
    Давление: 165915.54

    можно ли как-то откалибровать датчик или может есть другая причина?

Оставить комментарий

Ваш адрес email не будет опубликован.