BME280 — датчик атмосферного давления, влажности и температуры
Сегодня расскажу о датчике BME280 с помощью которого можно получить показания влажности, температуры, атмосферного давления и высоту (расчетную). Данный датчик прост, предварительно откалиброван и для подключения не требуется дополнительных компонентов.
Технические параметры
► Напряжение питания: 3.3 В – 5 В
► Рабочий ток: 1 мA
► Диапазон измерения давления: 300 гПа – 1100 гПа (точность ±1.0 гПа)
► Диапазон измерения температуры: -40 °C до +85 °C (точность ±0.5 °C)
►Диапазон измерения влажности: 20 % до 80 % (точность ±3 %)
► Интерфейс: I2C
► Габариты: 12 мм х 10 мм
Общие сведения
Рассмотрим модуль поближе, в правой части расположен датчик BME280 фирмы Bosch (это приемник таких датчиков, как BMP180, BMP085). Данный датчик измеряет влажность, температуру и давление с помощью данных показаний осуществляется расчет высоты, но эти показания не точные, подробно о датчике можно посмотреть в документации. На обратной стороне установлен стабилизатор напряжения LM6206 на 3.3 В и преобразователь уровней I2C, поэтому можно подключить модуль к микроконтроллерам с 3.3 В или 5 В логикой, не боясь.

Назначение контактов:
► VCC, GND — питание модуля 3.3 В или 5 В
► SCL — линия тактирования (Serial CLock)
► SDA — линия данных (Serial Data)
Данный модуль работает по двухпроводному интерфейсу I2C, адрес по умолчанию 0x76, но есть возможность изменить на адрес 0x77. Если присмотреться на модуль, рядом с датчиком расположены контакты, по умолчанию левый и средний контакт замкнуты проводником. Необходимо острым предметом перерезать проводник и установить припоем перемычку между центральный и правым контактом,тем самым установив адрес 0x77. При необходимости можно вернуть адрес 0x76.

Подключение датчика давления BME280 к Arduino
Необходимые детали:
► BME280 — датчик атмосферного давления, влажности и температуры x 1 шт.
► Arduino UNO R3 (DCCduino, CH340G)x 1 шт.
► Провод DuPont 10x, 2,54 мм, 20 см, F-F (Female — Female) x 1 шт.
Подключение:
В данном примере используем датчик BME280 и плату Arduino UNO R3, все получение показание отправлять в «Мониторинг порта», принципе и все, осталось собрать схему по рисунку ниже. Для интерфейса I2C на плате arduino предусмотрено только два вывода A4 и A5, другие вывода не поддерживают I2C, так что учтите при проектирование.

Программа:
Для датчика BME280 разработана библиотека «Adafruit BME280 Library» с помощью которой можно упростить работу с датчиком. Так же, для работы датчика необходима дополнительная библиотека «Adafruit Unified Sensor«. Скачать библиотеки можно в конце статьи или можно скачать через «Менеджер библиотек» в среде разработки IDE Arduino.
Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino
Добавьте в свой следующий проект на Arduino возможность отслеживать состояние окружающей среды с помощью датчика BME280. Эти датчики довольно просты в использовании, предварительно откалиброваны и не требуют дополнительных компонентов. Поэтому вы можете начать измерение относительной влажности, температуры, атмосферного давления и приблизительного значения высоты в самые кратчайшие сроки.
Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino
BME280, датчик температуры, относительной влажности и атмосферного давления
В основе модуля находится цифровой датчик температуры, влажности и давления нового поколения производства Bosch – BME280. Он является преемником таких датчиков, как BMP180, BMP085 или BMP183.
Рисунок 1 – Чип BME280 на модуле
Этот прецизионный датчик может измерять относительную влажность воздуха от 0 до 100% с точностью ±3%, атмосферное давление от 300 гПа до 1100 гПа с абсолютной точностью ± 1 гПа, и температуру от -40°C до 85°C с точностью ±1,0°C.
Измерения давления настолько точны, что вы даже можете использовать его в качестве альтиметра (высотомера) с точностью ±1 метр.
Рисунок 2 – Диапазоны измерений датчика BME280
Требования к питанию
Модуль поставляется с встроенным стабилизатором напряжения 3,3 В LM6206 и преобразователем уровней напряжения на шине I2C, поэтому вы можете без проблем использовать его с микроконтроллером, работающим с логическими уровнями 3,3 В или 5 В, таким как Arduino.
Рисунок 3 – Модуль BME280. Преобразователь уровней на шине I2C и стабилизатор напряжения 3,3 В
Во время измерений BME280 потребляет менее 1 мА и только 5 мкА в режиме ожидания. Такое низкое энергопотребление позволяет использовать его в устройствах с батарейным питанием, таких как телефоны, модули GPS или часы.
Интерфейс I2C
Модуль использует простой двухпроводной интерфейс I2C, который можно легко подключить к любому микроконтроллеру.
Адрес I2C по умолчанию для модуля BME280 равен 0x76HEX и может быть легко изменен на 0x77HEX с помощью перемычки из припоя, устанавливаемой между площадками рядом с микросхемой.
Рисунок 4 – Модуль BME280. Площадки для напайки перемычки для выбора адреса I2C
Процедура изменения адреса I2C
- Найдите перемычку из припоя рядом с чипом. По умолчанию средняя медная площадка подключена к левой площадке.
- Перережьте ножом соединение между средней и левой медными площадками.
- Добавьте каплю припоя между средней и правой медными площадками, чтобы установить между ними электрическое соединение. Это сменит адрес I2C на 0x77HEX.
Распиновка датчика BME280
Для связи с внешним миром у модуля BME280 есть только 4 контакта. Их назначение показано на рисунке ниже.
Рисунок 6 – Распиновка BME280, датчика атмосферного давления, температуры и влажности
VIN – вывод для подключения источника питания для модуля, напряжение питания может находиться в диапазоне от 3,3 до 5 В.
GND подключается к выводу земля на Arduino
SCL – это вывод синхронизации для интерфейса I2C.
SDA – вывод данных для интерфейса I2C.
Подключение модуля BME280 к Arduino UNO
Давайте подключим модуль BME280 к Arduino.
Подключение довольно простое. Начните с соединения выводов GND на модуле и на плате Arduino, затем подключите вывод VIN к выводу 5V на Arduino.
Теперь остаются выводы, которые используются для связи I2C. Обратите внимание, что у разных плат Arduino для I2C используются разные выводы. На платах Arduino с разводкой R3 SDA (линия передачи данных) и SCL (линия синхронизации) находятся на разъеме выводов рядом с выводом AREF. Они также известны как A5 (SCL) и A4 (SDA).
Если у вас Arduino Mega, выводы будут отличаться! Вам необходимо использовать цифровые выводы 21 (SCL) и 20 (SDA). В таблице ниже приведены выводы, использующиеся для I2C на разных платах Arduino.
| SCL | SDA | |
|---|---|---|
| Arduino Uno | A5 | A4 |
| Arduino Nano | A5 | A4 |
| Arduino Mega | 21 | 20 |
| Leonardo/Micro | 3 | 2 |
Следующая диаграмма показывает, как всё подключить.
Рисунок 7 – Схема подключения модуля BME280 к Arduino
Установка необходимых библиотек
Для связи с модулем BME280 необходимо выполнить кучу работы. К счастью, чтобы скрыть все сложности, была написана библиотека Adafruit BME280, чтобы мы могли выполнять простые команды для считывания данных о температуре, относительной влажности и атмосферном давлении.
Чтобы установить библиотеку, перейдите в раздел «Скетч»→ «Подключить библиотеку» → «Управлять библиотеками…». Подождите, пока менеджер библиотек загрузит индекс библиотек и обновит список установленных библиотек.
Рисунок 8 – Установка библиотеки Arduino – выбор управления библиотеками в Arduino IDE
Отфильтруйте результаты поиска, набрав «bme280». Там должно быть пара записей. Ищите библиотеку Adafruit BME280 by Adafruit. Нажмите на эту запись, а затем выберите «Установка».
Рисунок 9 – Установка библиотеки BME280 в Arduino IDE
Библиотека датчиков BME280 использует Adafruit Sensor support backend, поэтому при установке Arduino IDE предложит установить и эти библиотеки. Соглашайтесь (Install all).
Рисунок 10 – Установка Adafruit Unified Sensor
Код Arduino, считывание показаний температуры, относительной влажности воздуха и атмосферного давления
Следующий скетч даст вам полное представление о том, как считывать показания температуры, относительной влажности и барометрического давления с модуля BME280, и может послужить основой для более практических экспериментов и проектов.
Вот как выглядит вывод в мониторе последовательного порта.
Рисунок 11 – Вывод показаний датчика BME280. Температура, относительная влажность, атмосферное давление и высота над уровнем моря
Объяснение кода
Скетч начинается с подключения четырех библиотек, а именно, Wire.h, SPI.h, Adafruit_Sensor.h и Adafruit_BME280.h.
Затем мы определяем переменную SEALEVELPRESSURE_HPA , необходимую для вычисления высоты, и создаем объект библиотеки Adafruit_BME280 , чтобы мы могли получить доступ к функциям, связанным с ней.
В функции setup() мы инициализируем последовательную связь с компьютером и вызываем функцию begin() .
Функция begin(I2C_ADDR) в качестве параметра принимает адрес модуля на шине I2C. Если ваш модуль имеет другой адрес I2C или вы изменили его, вам нужно указать его правильно. Эта функция инициализирует интерфейс I2C с заданным адресом и проверяет правильность идентификатора чипа. Затем она программно перезапускает микросхему и ждет окончания калибровки датчика после запуска.
В зацикленном фрагменте кода для считывания значений температуры, относительной влажности и атмосферного давления из модуля BME280 мы используем следующие функции:
- функция readTemperature() возвращает от датчика температуру;
- функция readPressure() возвращает от датчика атмосферное давление;
- функция readAltitude(SEALEVELPRESSURE_HPA) вычисляет высоту (в метрах) исходя из текущего атмосферного давления (в гПа) и давления на уровне моря (в гПа);
- функция readHumidity() возвращает от датчика относительную влажность воздуха.
На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.
В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.
вероятно от стабилизатора напряжения нагревается плата(датчик), отсюда и повышение температуры и как следствие понижение влажности, имеет смысл удалить стабилизатор с платы и использовать либо внешний, либо взять со встроенного в ардуино(выход 3.3 в). Возможно и преобразователь уровней для I2C шины тоже греется(хз что там за микра стоит), но при питании от 3,3 в от него тоже можно избавиться
У меня такого не наблюдается. Показания на 3 и 5 Вольтах не различаются. А вот сам датчик врёт на +2 градуса по отношению к датчику ds18b20 и лабораторному ртутному термометру.
Температура и влажность меняются. При повышении напряжения растет температура и падает влажность.
Давление не скачет.
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 Sensor) – самая известная библиотека для работы с BME280. Очень тяжёлая, часть настроек доступна только при ручном редактировании библиотеки. – наша библиотека, более удобная и лёгкая. Также поддерживает датчики BMP280
В примерах на этом сайте мы будем использовать GyverBME280. Библиотека идёт в архиве к набору GyverKIT, а свежую версию всегда можно установить/обновить из встроенного менеджера библиотек Arduino по названию GyverBME280. Краткая документация находится по ссылке выше, базовые примеры есть в самой библиотеке.
Примеры
Первым делом стоит удостовериться в работоспособности датчика и узнать его адрес, он может быть 0x77 и 0x76 . Загружаем следующий код:
Открываем монитор порта:
- Если вывелось только Start scan и ничего больше – датчик бракованный и не будет работать
- Если это рабочий BMP/BME – получим вывод такого вида:
Значит датчик ответил по адресу 0x76. Может ответить по 0x77.
- Если вывод имеет вид
Значит Ардуино не находит датчиков на линии. Либо датчик подключен неправильно, либо бракованный.
Далее откроем базовый пример из библиотеки, который опрашивает значения с датчика. В begin() можно передать адрес, который мы узнали из предыдущего скетча-сканера (не забываем префикс 0x). Загружаем и открываем порт:
- Если выведется только слово Start – датчик бракованный и из-за этого программа зависла
- Если выведется Error! – датчик бракованный или адрес не соответствует, вернись к предыдущему пункту
- Корректно выводятся все три параметра
Start
Temperature: 24.78
Humidity: 41.69
Pressure: 99701.28
Датчик рабочий, и это BME280
- Выводится температура и давление, влажность – 0
Start
Temperature: 24.78
Humidity: 0
Pressure: 99701.28
Bme280 высота относительно чего
Pic 3. Нижняя сторона платы
Pic 4. Верхняя сторона платы
Pic 5. Сборка верхней стороны платы
Pic 6. Заставка при включении
DS1820‘ data-lightbox=’Arduino’>
Pic 9. Измерение давления в мм рт. ст.
Pic 10. Вывод температуры с внешнего датчика
Pic 11. В процессе разработки соединений модуля
Pic 12. Начало изготовления
Pic 13. Модуль в нижней части корпуса DS1820‘ data-lightbox=’Arduino’>
Pic 16. Вид справа
Pic 17. Вид на части корпуса и сам модуль
Pic 18. Вид общий
Pic 19. Вид на клавишу включения
Pic 20. Вид на разъём для внешнего датчика температуры DS1820
Pic 21. Вид снизу. Идёт зарядка аккумулятора
Pic 22. Версия v3.10. Давление в кПа 2020-02-07
Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino
Взаимодействие BME280, датчика температуры, влажности и давления, с Arduino
BME280, датчик температуры, относительной влажности и атмосферного давления
Рисунок 1 – Чип BME280 на модуле
Рисунок 2 – Диапазоны измерений датчика BME280
Рисунок 3 – Модуль BME280. Преобразователь уровней на шине I2C и стабилизатор напряжения 3,3 В
Рисунок 4 – Модуль BME280. Площадки для напайки перемычки для выбора адреса I2C
- Найдите перемычку из припоя рядом с чипом. По умолчанию средняя медная площадка подключена к левой площадке.
- Перережьте ножом соединение между средней и левой медными площадками.
- Добавьте каплю припоя между средней и правой медными площадками, чтобы установить между ними электрическое соединение. Это сменит адрес I2C на 0x77HEX.
Распиновка датчика BME280
Рисунок 6 – Распиновка BME280, датчика атмосферного давления, температуры и влажности
Подключение модуля BME280 к Arduino UNO
| SCL | SDA | |
|---|---|---|
| Arduino Uno | A5 | A4 |
| Arduino Nano | A5 | A4 |
| Arduino Mega | 21 | 20 |
| Leonardo/Micro | 3 | 2 |
Рисунок 7 – Схема подключения модуля BME280 к Arduino
Рисунок 8 – Установка библиотеки Arduino – выбор управления библиотеками в Arduino IDE
Рисунок 9 – Установка библиотеки BME280 в Arduino IDE
Рисунок 10 – Установка Adafruit Unified Sensor
Код Arduino, считывание показаний температуры, относительной влажности воздуха и атмосферного давления
Рисунок 11 – Вывод показаний датчика BME280. Температура, относительная влажность, атмосферное давление и высота над уровнем моря