BME280: датчик давления, влажности и температуры для Arduino

BME280: датчик давления, влажности и температуры для Arduino

Модуль Bosch BME280 измеряет три параметра воздуха и работает по I2C или SPI. Подключение, выбор адреса, библиотеки и пример домашней метеостанции.

Место BME280 в линейке датчиков

BME280 — датчик компании Bosch Sensortec, измеряющий атмосферное давление, температуру и влажность. По сравнению с первыми представителями серии, BMP085 и BMP180, у него лучше характеристики и меньше размеры. От BMP280 он отличается встроенным гигрометром: возможность измерять относительную влажность позволяет построить на одном модуле компактную метеостанцию.

Модуль датчика BME280
ИнтерфейсыSPI, I2C
Напряжение питания3,3 В
Диапазон давления300–1100 гПа
Диапазон температурот -40 до +85 °C
Диапазон влажности0–100 %
Разрешение по давлению0,01 гПа (менее 10 см по высоте)
Разрешение по температуре0,01 °C
Точность по влажности3 %
Адрес I2C0x76 или 0x77

Два способа подключения

Датчик поддерживает оба интерфейса. При работе по I2C заняты два вывода Arduino, при работе по SPI — четыре. Важно помнить, что питается модуль от 3,3 В, а не от 5 В.

Подключение BME280 к Arduino по I2C
Подключение BME280 к Arduino по SPI

Библиотеки и адрес

Для работы нужны две библиотеки: Adafruit BME280 Library и Adafruit Sensor. При подключении по I2C сначала выясняют адрес конкретного экземпляра, так как он может быть равен 0x76 или 0x77. Делается это скетчем I2C-сканера: датчик подключают по схеме I2C, загружают сканер и смотрят результат в мониторе последовательного порта.

Вывод I2C-сканера с адресом датчика

Затем на плату загружают пример BME280test из состава Adafruit BME280 Library. Если сканер показал адрес 0x76, предварительно вносят правку в файл Adafruit BME280.h этой библиотеки. После запуска в монитор порта выводятся давление, температура и влажность.

Пример: метеостанция с OLED-дисплеем

Домашнюю метеостанцию можно собрать из минимального набора деталей:

  • плата Arduino;
  • макетная плата;
  • датчик BME280;
  • OLED-дисплей 0,96 дюйма 128x64;
  • провода.

Для дисплея используется библиотека OLED_I2C, объект создаётся как OLED oled(SDA, SCL, 8), шрифт — SmallFont. Датчик инициализируется вызовом bme280.begin(). Каждые пять секунд (интервал отсчитывается через millis) скетч очищает экран и выводит три строки по центру: температуру из readTemperature() в градусах Цельсия, влажность из readHumidity() в процентах и давление, которое получают как readPressure() / 100.0F, то есть в гектопаскалях. После этого вызывается oled.update() и отсчёт начинается заново.

Если датчик молчит

При отсутствии данных проверяют схему подключения и I2C-адрес датчика; при адресе, отличном от заданного в библиотеке, исправляют файл Adafruit BME280.h.

← Все статьи