Skip to content Skip 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, т.е. без влажности.

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

Похожие примеры
Подписаться
Уведомить о
19 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии