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

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

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


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