Bme280 высота относительно чего
Перейти к содержимому

Bme280 высота относительно чего

  • автор:

Мини-метеостанция на ESP32 (Arduino) и BME280 с выводом данных на дисплей DWIN.

В этом проекте сделаем мини-метеостанцию используя ESP32 (Arduino) и датчик барометрического давления BME280, который может предоставлять информацию об атмосферном давлении, температуре и влажности в режиме реального времени. С помощью BME280 также можно измерить высоту над уровнем моря. Полученные значения выведем на дисплей DWIN.

Кратко о датчиках давления, температуры и влажности BME280 (BMP280).

BME280 довольно прост в использовании, предварительно откалиброван и не требует дополнительных компонентов. Его достаточно подключить к микроконтроллеру и начать измерение относительной влажности, температуры и атмосферного давления.

Кратко о датчиках давления, температуры и влажности BME280 (BMP280).

Виды датчиков BME280 (BMP280).

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

Как узнать, какое рабочее напряжение модуля? Если на плате есть стабилизатор, его можно запитать от источника напряжением 5В. Если на плате нет стабилизатора, то подключить можно только к источнику питания 3В.

Датчик BME280 имеет несколько разновидностей и в зависимости от модуля может подключаться к I2C и SPI

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

Датчики я покупал себе с сопутствующим товаром на будущее и информацию предварительно не почитал. Я повёлся на низкую стоимость и в результате стал счастливым обладателем BMP280. Кстати, покупал 2 модуля, и галочки нет ни на одном. Это, конечно, не критично, но есть некоторые сложности с тем, чтобы заставить датчик работать. Помогла библиотека Гайвера.

Распиновка модуля BME280 без стабилизатора на борту.

Интерфейс BME280 I2C использует следующие контакты:

Интерфейс BME280 I2C использует следующие контакты:

  • VCC: от 1,71 В до 3,6 В
  • GND: подключение к GND
  • SCL: последовательные часы (SCK)
  • SDA: последовательные данные (SDI)
  • CSB: должен быть подключен на VDDIO, чтобы выбрать интерфейс I2C.
  • SDO: контакт определяет I2C адрес устройства. Если SDO подключается к GND (0), то адрес равен 0x76. Если он подключается к VDDIO(1), то адрес равен 0x77. В этом модуле мы подключили его к VDDIO, поэтому адрес должен быть 0x77.

Интерфейс I2C.

Модуль оснащён простым двухпроводным интерфейсом I2C, который можно легко соединить с любым выводом I2C микроконтроллера. Адрес I2C модуля BME280 по умолчанию 0x76, и его можно легко изменить на 0x77.

На рынке доступен ещё один модуль, который имеет только 4 контакта. Чтобы изменить его адрес I2C, найдите перемычку для пайки рядом с микросхемой.

На рынке доступен ещё один модуль, который имеет только 4 контакта. Чтобы изменить его адрес I2C

Благодаря данной перемычке можно изменить адрес I2C.

Благодаря данной перемычке можно изменить адрес I2C.

По умолчанию средний медный контакт площадки подключён к левой контактной площадке. Поэтому вам нужно поцарапать соединение между средней и левой медными контактными площадками, чтобы отсоединить их. Затем вы можете добавить каплю припоя между средней и правой медными площадками, чтобы соединить их. Это позволит вам установить адрес I2C 0x77.

При необходимости мы можем изменить адрес датчика и подключить 2 модуля к одному микроконтроллеру.

Схема подключения дисплея DWIN, модуля BME280 к ESP32.

Датчик барометрического давления BME280 взаимодействует с ESP32 для создания простой мини-метеостанции.

Схема подключения дисплея DWIN, модуля BME280 к ESP32.

Подключите контакты SDA SCL BME280 к соответствующим контактам ESP32, то есть к контактам GPIO22 и GPIO21 соответственно. Дисплей DWIN подключаем ко второму UART порту ESP32, то есть к контактам GPIO16 и GPIO17.

Библиотека для работы с BME280.

Самая распространённая библиотека для работы с BME280 является Adafruit BME280 (для работы также нужно установить Adafruit Sensor). Но она не работает с BMP280, поэтому пришлось искать альтернативное решение.

GyverBME280 – библиотека более удобная и лёгкая. Также поддерживает датчики BMP280. То, что мне требовалось для данного проекта.

Библиотека для работы с BME280.

Библиотеку можно установить через менеджер библиотек или скачать с официального сайта разработчика. Также прикреплю библиотеку внизу статьи в разделе «Файлы для скачивания».

Код метеостанции на DWIN, модуле BME280 и ESP32.

В коде менять ничего не нужно. Максимум посмотреть, чтобы был выключен DEBUG. В противном случае вместо влажности воздуха у вас будет выводиться информация со счётчика. Счётчик я добавил для того, чтобы можно было отследить, что всё работает и информация обновляется на дисплее. А также в связи с тем, что у меня датчик BMP280 и значение влажности выводит 0.

Код метеостанции на DWIN, модуле BME280 и ESP32.

Остальные данные меняйте по мере необходимости. Например, адрес устройства по умолчанию 0x76. Возможно, вам нужно будет поменять на 0x77.

Например, адрес устройства по умолчанию 0x76. Возможно, вам нужно будет поменять на 0x77.

Прошивка для дисплея DWIN.

Для данного проекта подайте дисплей без сенсора. Благо, практически для всех моделей дисплеев DWIN доступна версия без сенсора.

Для данного проекта подайте дисплей без сенсора. Благо, практически для всех моделей дисплеев DWIN доступна версия без сенсора.

Для вывода информации будем использовать всего один инструмент — «Data variables». С данным инструментом мы уже знакомы из проекта «Панель управления подсветкой на дисплее DWIN».

Для вывода информации будем использовать всего один инструмент - «Data variables».

Но его мы использовали только для вывода целочисленных значений. Сегодня в проекте будем выводить дробные значения.

Для вывода информации будем использовать всего один инструмент - «Data variables».

Для этого данные для вывода нужно настроить следующим образом.

Для этого данные для вывода нужно настроить следующим образом.

Как видим, настройки изменились не сильно. Аналогичным образом выводим все остальные параметры.

Мини-метеостанция на Arduino и BME280 с выводом данных на дисплей DWIN.

И если у вас нет в наличии ESP32, можно сделать проект, используя классическую отладочную плату Arduino UNO или Arduino NANO.

Мини-метеостанция на Arduino и BME280 с выводом данных на дисплей DWIN.

Код для Arduino NANO (UNO).

Внизу статьи в разделе «файлы для скачивания» вы можете скачать код для Arduino NANO (UNO). Обратите внимание, что данный код я не тестировал на железе. Если у вас будут вопросы, пишите в комментариях.

Код для Arduino NANO (UNO).

Схема подключения дисплея DWIN и модуля BME280 к Arduino NANO.

Схема подключения дисплея DWIN и модуля BME280 к Arduino NANO.

Подключаем электронику дисплея DWIN, модуля BME280 к Arduino NANO по схеме.

Вывод.

Получается простая метеостанция. Но я сделал данный проект в первую очередь для демонстрации вывода целочисленных значений больше 255 и дробных значений. В проекте написаны небольшие функции, которые помогут реализовать вывод дробных и целочисленных значений. В дальнейшем планирую сделать более интересные проекты с использованием полученных знаний в данном проекте.

Приобрести дисплей DWIN можно в официальном магазине DWIN Technology на AliExpress.

Понравился проект Мини-метеостанция на ESP32 (Arduino) и BME280 с выводом данных на дисплей DWIN? Не забудь поделиться с друзьями в соц. сетях.

А также подписаться на наш канал на YouTube, вступить в группу Вконтакте.

Bme280

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

Сегодня расскажу о датчике BME280 с помощью которого можно получить показания влажности, температуры, атмосферного давления и высоту (расчетную). Данный датчик прост, предварительно откалиброван и для подключения не требуется дополнительных компонентов.

Общие сведения

Рассмотрим модуль поближе, в правой части расположен датчик 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.

Скетч 1: метеостанция с OLED-дисплеем

Для компиляции и загрузки скетча нужно установить в Arduino дополнительные библиотеки:

  • ESP8266 OLED SSD1306
  • Adafruit Unified Sensor Driver
  • Adafruit BME280 Library

После установки в файле библиотеки BME280 нужно вручную поправить адрес с 0x77 на 0x76:

(Установленные библиотеки Arduino IDE хранит в папке \Documents\Arduino\libraries текущего пользователя Windows)

После чего остается только скомпилировать и загрузить в память ESP8266 следующий скетч:

Вот так будет выглядеть собранное устройство в работе:

Датчик меряет все доступные ему показатели (температура, влажность, давление) и они выводятся на экран. Показатели обновляются – обновляется информация на экране. Все.

К слову, на фотографии выше можно увидеть какой низкий уровень влажности стоит в помещении зимой в период работы центрального отопления. Низкая влажность негативно влияет на самочувствие людей и комнатных растений, а также ускоряет деградацию деревянной мебели и картин.

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

I2C Interface

The module features a simple two-wire I2C interface which can be easily interfaced with any microcontroller of your choice.

The default I2C address of the BME280 module is 0x76HEX and can be changed to 0x77HEX easily with the solder jumper besides chip.

Procedure to Change I2C Address

  • Locate the solder jumper besides chip. By default the middle copper pad is connected to the left pad.
  • Scratch the connection between the middle and the left copper pad to disconnect those using a sharp knife.
  • Add a solder blob between the middle and the right copper pad to join them. It allows you to set the I2C address 0x77HEX.

Overview

The BME280 from Bosch Sensortec is a integrated environmental sensor designed for the mobile market. It a low power consumption design that combines high linearity and high
accuracy sensors for pressure, humidity and temperature.

The BME280 supports either SPI or I2C interface to communicate with the micro controller.

Because of the small size of the sensor, the best way to use this sensor is with a breakout board. The Adafruit breakout board is used here.

In this hookup we are only connecting one device to the Arduino using the I2C bus. We can use either address (0x77 or 0x76). It reads the barometric pressure, humidity and
temperature and displays it on the console.

Подключение BMP280 к Arduino по I2C/TWI

Так как датчик может работать по I2C и SPI, подключение можно реализовать двумя методами. При подключении по I2C нужно соединить контакты SDA и SCL.

Схема подключения BMP280 к Arduino

Для подключения понадобятся сам датчик BMP280, плата Ардуино, соединительные провода. Схема подключения показана на рисунке ниже.

Землю с Ардуино нужно соединить с землей на датчике, напряжение 3.3 В — на 3.3 В, SDA — к пину А4, SCL — к А5. Контакты А4 и А5 выбираются с учетом их поддержки интерфейса I2C.

Существуют несколько модулей с этим датчиком. Первый вариант — это модуль для работы в 3.3 В логике, данные модули будут подешевле; второй вариант — для работы в 5.0 В логике, на нём присутствуют: линейный стабилизатор напряжения на 3.3 В и преобразователи уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA. Первый подойдёт для ардуин работающих от 3.3 В и Raspberry Pi / Orange Pi / Banana Pi и т.д., а второй — для обычных ардуин на 5.0 В.

Подключение BMP280 с встроенными стабилизатором напряжения на 3.3 В и преобразователями уровней 3.3/5.0 В на линиях SCK/SCL и SDI(MOSI)/SDA к Arduino.

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
5V 5V Vin Красный
20 (SDA) A4 SDA/SDI Зелёный
21 (SCL) A5 SCL/SCK Жёлтый

Подключение BMP280 без встроенного стабилизатора напряжения на 3.3 В к Arduino. В данном случае нужно использовать внешний преобразователь уровней на линиях SCK/SCL и SDI(MOSI)/SDA.

Arduino Mega Arduino Uno/Nano/Pro Mini BMP280 модуль Цвет проводов на фото
GND GND GND Черный
3.3V 3.3V VCC/3.3V Красный
20 (SDA) A4 SDA/SDI Зелёный
21 (SCL) A5 SCL/SCK Жёлтый

Примеры скетча

После запуска вы можете инициализировать датчик с помощью:

if (!bmp.begin()) <
Serial.println(«Could not find a valid BMP280 sensor, check wiring!»);
while (1);
>

Serial.println(«Could not find a valid BMP280 sensor, check wiring!»);

вернет True, если датчик был найден, и False, если нет. В случае с False, проверьте соединение датчика с платой Arduino!

Считать температуру и давление легко, просто вызовите функции:

bmp.readTemperature(); // Температура в градусах Цельсия.
bmp.readPressure(); // Атмосферное давление в гПа

bmp.readTemperature();// Температура в градусах Цельсия.

bmp.readPressure();// Атмосферное давление в гПа

Копируйте и скомпилируйте нижеприведённый скетч в Arduino IDE.

void setup() <
Serial.begin(9600);
Serial.println(F(«BMP280»));

while (!bmp280.begin(BMP280_ADDRESS — 1)) <
Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));
delay(2000);
>
>

void loop() <
float temperature = bmp280.readTemperature();
float pressure = bmp280.readPressure();
float altitude = bmp280.readAltitude(1013.25);

Serial.print(F(«Temperature = «));
Serial.print(temperature);
Serial.println(» *C»);

Serial.print(F(«Pressure = «));
Serial.print(pressure);
Serial.println(» Pa»);

Serial.print(F(«Altitude = «));
Serial.print(altitude);
Serial.println(» m»);

Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));

Результат

Температура рассчитывается в градусах Цельсия, вы можете преобразовать ее в градусы Фаренгейта, используя классическое уравнение F = C * 9/5 + 32.

Давление возвращается в единицах СИ Паскалей. 100 Паскалей = 1 гПа = 1 миллибар. Часто барометрическое давление сообщается в миллибарах или миллиметрах ртутного столба. Для дальнейшего использования 1 паскаль = 0,00750062 миллиметров ртутного столба или 1 миллиметр ртутного столба = 133,322 Паскаля. Таким образом, если вы возьмете значение паскаля, скажем, 100734 и разделите на 133,322, вы получите 755,57 миллиметров ртутного столба.

Также возможно превратить BMP280 в альтиметр. Если вы знаете давление на уровне моря, библиотека может рассчитать текущее атмосферное давление в высоту.

bme280.setup()¶

Initializes module. Initialization is mandatory before read values.

Parameters
  • (optional) — Controls oversampling of temperature data. Default oversampling is 16x.
  • (optional) — Controls oversampling of pressure data. Default oversampling is 16x.
  • (optional) — Controls oversampling of humidity data. Default oversampling is 16x
  • (optional) — Controls the sensor mode of the device. Default sensor more is normal.
  • (optional) — Controls inactive duration in normal mode. Default inactive duration is 20ms.
  • (optional) — Controls the time constant of the IIR filter. Default filter coefficient is 16.
  • (optional) — If 0 then the BME280 chip is not initialised. Useful in a battery operated setup when the ESP deep sleeps and on wakeup needs to initialise the driver (the module) but not the chip itself. The chip was kept powered (sleeping too) and is holding the latest reading that should be fetched quickly before another reading starts (). By default the chip is initialised.

Using forced mode is recommended for applications which require low sampling rate or hostbased synchronization. The sensor enters into sleep mode after a forced readout. Please refer to BME280 Final Datasheet for more details.

t standby (ms)
0.5
1 62.5
2 125
3 250
4 500
5 1000
6 10
7 20
Filter coefficient
Filter off
1 2
2 4
3 8
4 16
Example

Or simpler and more efficient

Use for «game mode» — Oversampling settings pressure ×4, temperature ×1, humidity ×0, sensor mode: normal mode, inactive duration = 0.5 ms, IIR filter settings filter coefficient 16.

Example of readout in forced mode (asynchronous)

Код Arduino, считывание показаний температуры, относительной влажности воздуха и атмосферного давления

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

Вот как выглядит вывод в мониторе последовательного порта.

Рисунок 11 – Вывод показаний датчика BME280. Температура, относительная влажность, атмосферное давление и высота над уровнем моря

Объяснение кода

Скетч начинается с подключения четырех библиотек, а именно, Wire.h, SPI.h, Adafruit_Sensor.h и Adafruit_BME280.h.

Затем мы определяем переменную , необходимую для вычисления высоты, и создаем объект библиотеки , чтобы мы могли получить доступ к функциям, связанным с ней.

В функции мы инициализируем последовательную связь с компьютером и вызываем функцию .

Функция в качестве параметра принимает адрес модуля на шине I2C. Если ваш модуль имеет другой адрес I2C или вы изменили его, вам нужно указать его правильно. Эта функция инициализирует интерфейс I2C с заданным адресом и проверяет правильность идентификатора чипа. Затем она программно перезапускает микросхему и ждет окончания калибровки датчика после запуска.

В зацикленном фрагменте кода для считывания значений температуры, относительной влажности и атмосферного давления из модуля BME280 мы используем следующие функции:

  • функция возвращает от датчика температуру;
  • функция возвращает от датчика атмосферное давление;
  • функция вычисляет высоту (в метрах) исходя из текущего атмосферного давления (в гПа) и давления на уровне моря (в гПа);
  • функция возвращает от датчика относительную влажность воздуха.

Wrapping Up

This article was an in-depth guide on how to get pressure, temperature and humidity readings from a BME280 sensor with the ESP8266 using Arduino IDE and display the readings on a web server.

Now, you can take this project further and display your sensor readings in an OLED display; create a datalogger; save the readings in your own database or send the readings to your Home Automation platform using MQTT. Here’s some projects and tutorials that might help you implement these ideas:

  • ESP32 Publish Sensor Readings to Google Sheets
  • Low Power Weather Station Datalogger (MicroPython)
  • ESP32/ESP8266 Insert Data into MySQL Database using PHP and Arduino IDE
  • ESP8266 and Node-RED with MQTT (Publish and Subscribe)
  • What is MQTT and How It Works

Learn more about the ESP8266 with our course: Home Automation using ESP8266

Thanks for reading.

Описание библиотеки для работы с датчиком. Пример скетча

Для работы с датчиком BMP180 существуют различные библиотеки, упрощающие работу. К ним относятся SFE_BMP180, Adafruit_BMP085. Эти же библиотеки подходят для работы с датчиком BMP080. Для датчика bmp280 используется похожая библиотека Adafruit_BMP280.

Первый пробный скетч будет заставлять датчик считывать показания давления и температуры. Код подойдет как для датчика BMP180 , так и для BMP280, нужно только подключить правильную библиотеку и указать верные контакты, к которым подключен модуль. В первую очередь в коде нужно подключить все библиотеки и инициализировать работу датчика. Для определения давления нужно сначала узнать температуру. Для этого используется следующий элемент кода.

Затем нужно получить информацию об атмосферном давлении.

После загрузки скетча в окне мониторинг порта появятся данные о температуре и атмосферном давлении.

Датчик BME280 также показывает давление и температуру, дополнительно он может считывать показания о влажности, который по умолчанию выключен. При необходимости можно произвести настройки датчика и начать считывать показания о влажности. Диапазон измерения от 0 до 100%. Библиотека, которая нужна для работы с датчиком, называется Adafruit_BME280.

Код похож на тот, что описан выше, только к нему еще добавляются строки для определения влажности.

bme280.setup()¶

Initializes module. Initialization is mandatory before read values.

Parameters
  • (optional) — Controls oversampling of temperature data. Default oversampling is 16x.
  • (optional) — Controls oversampling of pressure data. Default oversampling is 16x.
  • (optional) — Controls oversampling of humidity data. Default oversampling is 16x
  • (optional) — Controls the sensor mode of the device. Default sensor more is normal.
  • (optional) — Controls inactive duration in normal mode. Default inactive duration is 20ms.
  • (optional) — Controls the time constant of the IIR filter. Default filter coefficient is 16.
  • (optional) — If 0 then the BME280 chip is not initialised. Useful in a battery operated setup when the ESP deep sleeps and on wakeup needs to initialise the driver (the module) but not the chip itself. The chip was kept powered (sleeping too) and is holding the latest reading that should be fetched quickly before another reading starts (). By default the chip is initialised.

Using forced mode is recommended for applications which require low sampling rate or hostbased synchronization. The sensor enters into sleep mode after a forced readout. Please refer to BME280 Final Datasheet for more details.

t standby (ms)
0.5
1 62.5
2 125
3 250
4 500
5 1000
6 10
7 20
Filter coefficient
Filter off
1 2
2 4
3 8
4 16
Example

Or simpler and more efficient

Use for «game mode» — Oversampling settings pressure ×4, temperature ×1, humidity ×0, sensor mode: normal mode, inactive duration = 0.5 ms, IIR filter settings filter coefficient 16.

Example of readout in forced mode (asynchronous)

Wiring BME280 Module to Arduino UNO

Let’s hook the BME280 module up to the Arduino.

Connections are fairly simple. Start by connecting VIN pin to the 5V output on the Arduino and connect GND to ground.

Now we are remaining with the pins that are used for I2C communication. Note that each Arduino Board has different I2C pins which should be connected accordingly. On the Arduino boards with the R3 layout, the SDA (data line) and SCL (clock line) are on the pin headers close to the AREF pin. They are also known as A5 (SCL) and A4 (SDA).

If you have a Mega, the pins are different! You’ll want to use digital 21 (SCL) and 20 (SDA). Refer below table for quick understanding.

SCL SDA
Arduino Uno A5 A4
Arduino Nano A5 A4
Arduino Mega 21 20
Leonardo/Micro 3 2

The following diagram shows you how to wire everything.


Wiring BME280 Module to Arduino

Software

The hookup and Arduino Sketch is for connecting a single Adafruit BME280 breakout board using either address 0x77 or 0x76.

You will need to download the cactus.io BME280_I2C library to work with this sample sketch. The library supports reading the barometric pressure,
humidity and temperature from the sensor.

To get the data from the sensor we need to call bme.readSensor(). We can then call the various functions to get the temperature, humidity and pressure.

The sensor returns the temperature in degrees celsius by design. We can call the method in the BME280 library called getTemperature_C to get the celsius
value or getTemperature_F for the value in fahrenheit.

The barometric pressure from the sensor is returned in Pascals. 100 Pascals = 1hPa = 1 millibar. The library method getPressure_P will return the
value in Pascals. The method getPressure_MB will return the value in millibars.

When we create the BME280 object in the sketch we can use the default which is BME280_I2C bme which will create an object using the default 0x77 address.
To create an object using the alternative address (0x76) we need to declare it as BME280_I2C bme(0x76).

We have found that when the BME280 is enclosed inside a case or nearby a circuit board the heat generated by voltage regulators can affect the temperature
reading from the BME280. We have included a function in the library that allows us to apply a temperature calibration offset to the value returned by getTemperature_C
or _F. Basically it justs adds the calibration offset. So if the temperature is reading 2 degrees high then we use this function:

bme.setTempCal(-2); which will subtract 2 degrees from the temperture reading.

The default calibration offset is 0. So you only have to use this function if you want to apply a calibration value other than 0.

  • The sketch Supports only I2C bus connection.
  • The sketch Supports only one sensor connected.
  • Its blocking code.

Software

The hookup and Arduino Sketch is for connecting a single Adafruit BME280 breakout board.

You will need to download the cactus.io BME280_SPI library to work with this sample sketch. The library supports reading the barometric pressure,
humidity and temperature from the sensor.

We create the BME280 object in one of two ways. The first way is if we are using the hardware SPI pins as shown above. Uncomment line 10 in the code below
and comment out line 11.

To use software SPI which allows us to use alternate digital pins we need to comment out line 10 and uncomment line 11. We also need to define what pins we are using. This is
done in lines 4 to 7. We need to change the defines pin numbering to correspond to the SPI functions. For example if digital pin 7 is connected to CS on the
breakout board we would change line 7 to #define BME280_CS from 10 to 7.

To get the data from the sensor we need to call bme.readSensor(). We can then call the various functions to get the temperature, humidity and pressure.

The sensor returns the temperature in degrees celsius by design. We can call the method in the BME280 library called getTemperature_C to get the celsius
value or getTemperature_F for the value in fahrenheit.

The barometric pressure from the sensor is returned in Pascals. 100 Pascals = 1hPa = 1 millibar. The library method getPressure_MB will return the value in millibars.

When we create the BME280 object in the sketch we define the hardware pins that are used for chip select, data in and out and finally the serial clock.

We have found that when the BME280 is enclosed inside a case or nearby a circuit board the heat generated by voltage regulators can affect the temperature
reading from the BME280. We have included a function in the library that allows us to apply a temperature calibration offset to the value returned by getTemperature_C
or _F. Basically it justs adds the calibration offset. So if the temperature is reading 2 degrees high then we use this function:

bme.setTempCal(-2); which will subtract 2 degrees from the temperture reading.

  • The sketch Supports only SPI bus connection.
  • The sketch Supports only one sensor connected.
  • Its blocking code.

Подключение модуля GY-BMP280-3.3 по шине SPI


Схема подключения к Arduino по шине SPI

  • VCC —> Arduino VCC (3.3 V)
  • GND —> Arduino GND
  • SCL —> Arduino D13 ( SPI / SCK )
  • SDO —> Arduino D12 ( SPI / MISO )
  • SDA —> Arduino D11 ( SPI / MOSI )
  • CSB —> Arduino D10 ( SPI / CS,SS )

Скетч для работы с Arduino Uno по шине SPI:

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>

#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10

//Adafruit_BMP280 bme; // I2C
Adafruit_BMP280 bme(BMP_CS); // hardware SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

void setup() <
Serial.begin(9600);
Serial.println(F(«BMP280 test»));

if (!bme.begin()) <
Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));
while (1);
>
>

void loop() <
Serial.print(F(«Temperature = «));
Serial.print(bme.readTemperature());
Serial.println(» *C»);

Serial.print(F(«Pressure = «));
Serial.print(bme.readPressure());
Serial.println(» Pa»);

Serial.print(F(«Approx altitude = «));
Serial.print(bme.readAltitude(1013.25)); // this should be adjusted to your local forcase
Serial.println(» m»);

#include <Wire.h>
#include <SPI.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BMP280.h>

#define BMP_SCK 13
#define BMP_MISO 12
#define BMP_MOSI 11
#define BMP_CS 10

//Adafruit_BMP280 bme; // I2C

Adafruit_BMP280bme(BMP_CS);// hardware SPI

//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

Serial.println(F(«Could not find a valid BMP280 sensor, check wiring!»));

Serial.print(bme.readAltitude(1013.25));// this should be adjusted to your local forcase

Скетч такой же, как и в первом примере, за исключением изменения нескольких строк:

//Adafruit_BMP280 bme; // I2C — раскомментировать для шины I²C
Adafruit_BMP280 bme(BMP_CS); // hardware SPI — раскомментировать для шины SPI
//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

//Adafruit_BMP280 bme; // I2C — раскомментировать для шины I²C

Adafruit_BMP280bme(BMP_CS);// hardware SPI — раскомментировать для шины SPI

//Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK);

Две последнии строчки отличаются режимом работы SPI — аппаратным или программным. Под программным SPI понимается использование драйвера Arduino SPI для эмуляции аппаратного SPI с использованием «битовой синхронизации». Это позволяет подключить SPI-устройство к любым контактам Arduino.

Результат работы скетча выводится на Монитор порта (Serial Monitor, вызывается клавишами CTRL+SHIFT+M) среды программирования Arduino IDE.

Обзор модуля атмосферного давления BMP280

Модуль представляет из себя высокоточный цифровой измеритель атмосферного давления на базе микро-чипа BMP280 от фирмы BOSH. После изготовления каждый датчик проходит индивидуальную калибровку в заводских условиях. Его малые размеры, низкое энергопотребление и высокая измерительная способность позволили завоевать популярность среди множества разработчиков Arduino-проектов. Модуль BMP280 был разработан фирмой как более технологичная модель своего предшественника BMP180. Данная модификация, в отличие от своего младшего брата, предоставляет пользователю целых 2 последовательных интерфейса обмена данными (SPI и I2C), а также 3 режима работы:

NORMAL – в данном режиме модуль просыпается с определённой периодичностью, выполняет необходимые измерения и снова засыпает. Частота измерений задаётся программным путём, а результат считывается при необходимости.

SLEEP – режим максимально пониженного энергопотребления.

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

Помимо способности измерять показания атмосферного давления, разработчик наделил BMP280 возможностью определять температуру окружающей среды. Все производимые вычисления могут быть отфильтрованы настраиваемым программным фильтром. На рисунке №1 показан внешний вид модуля и его электрическая схема.

Рисунок №1 — внешний вид и схема модуля BMP280

Как видно из вышеприведенной схемы на модуле предусмотрены конденсаторы для фильтрации по питанию и подтягивающие резисторы интерфейсов ввода/вывода.

Подключение датчика BME280 к Arduino

logo

В этом руководстве мы подробно разберем, как использовать модуль датчика BME280 с Arduino для считывания давления, температуры, влажности и оценки высоты. Вы узнаете как подключить датчик, установить необходимые библиотеки и написать простой скетч для отображения показаний датчика.

Обзор модуля датчика BME280

Датчик BME280 считывает барометрическое давление, температуру и влажность. Также, поскольку давление меняется с высотой, можно также примерно оценить и высоту. Существует несколько версий этого модуля, различающихся используемым протоколом связи I2C или SPI для обмена данными с микроконтроллером.

BME280 c I2C интерфесом

bme280_i2c

Этот датчик использует протокол связи I2C, поэтому подключение очень простое. Вы подключаете датчик BME280 к контактам Arduino, как показано в таблице ниже:

BME280 Arduino UNO Arduino MINI Arduino Mega Arduino Micro Arduino Nano
VIN 5V 5V 5V 5V 5V
GND GND GND GND GND GND
SCL A5 A7 21 1 A5
SDA A4 A6 20 2 A4

BME280 с SPI интерфейсом

Существуют и другие версии этого датчика, которые могут использовать протоколы связи SPI или I2C, например, модуль, показанный на следующем рисунке:

bme280_spi

Для подключения датчика по SPI подключите его к следующим контактам Arduino

BME280 Arduino Nano Arduino UNO Arduino Mega Arduino Mini
SCK (SPI Clock) Pin 13 Pin 13 Pin 52 Pin 17
SDO (MISO) Pin 12 Pin 12 Pin 50 Pin 16
SDI (MOSI) Pin 11 Pin 11 Pin 51 Pin 15
CS (Chip Select) Pin 10 Pin 10 Pin 53 Pin 14

Схема подключения

Подключите датчик BME280 к плате Arduino, как показано на следующей принципиальной схеме.

схема

Установка необходимых библиотек

Для считывания показаний датчика нам нужно установить в Arduino IDE несколько дополнительных библиотек. Это Adafruit_BME280 и Adafruit Unified Sensor. Как это сделать мы сейчас подробно рассмотрим.

Установка библиотеки Adafruit BME280

Чтобы получить показания от модуля датчика BME280, вам необходимо использовать библиотеку Adafruit_BME280. Выполните следующие шаги, чтобы установить её в Arduino IDE:

Перейдите в Скетч> Подключить библиотеку> Управление библиотеками. Должен открыться менеджер библиотек.

Найдите “adafruit bme280” в окне поиска и установите её.

library manager

Установка библиотеки Adafruit Unifed Sensor

Чтобы использовать библиотеку BME280, вам также необходимо установить библиотеку Adafruit_Sensor. Выполните следующие шаги, чтобы установить её в Arduino IDE:

Перейдите в Скетч> Подключить библиотеку> Управление библиотеками. Должен открыться менеджер библиотек. Введите “Adafruit Unified Sensor” в поле поиска. Прокрутите до конца, чтобы найти библиотеку и установить её.

unified_sensor

После установки библиотек перезапустите Arduino IDE.

Считывание давления, температуры и влажности

Чтобы прочитать давление, температуру и влажность, мы будем использовать пример скетча из библиотеки. Для этого откройте Arduino IDE и перейдите в Файл> Примеры> Adafruit BME280 Library> bme280test.

Как работает код

В данном разделе мы подробно разберем как работает код данной программы

Подключение библиотек и первичная настройка

Код начинается с включения необходимых библиотек: библиотеки wire для использования I2Cибиблиотек Adafruit_Sensor и Adafruit_BME280 для взаимодействия с датчиком BME280.

Поскольку мы собираемся использовать интерфейс I2C, следующие строки, определяющие выводы SPI, можно закомментировать

Далее создаем переменную SEALEVELPRESSURE_HPA

Эта переменная сохраняет давление на уровне моря в гектопаскалях (эквивалентно милибару). Эта переменная используется для оценки высоты для данного давления путем сравнения его с давлением на уровне моря. В этом примере используется значение по умолчанию, но для получения более точных результатов замените это значение текущим давлением на уровне моря в вашем регионе.

В этом примере по умолчанию используется протокол связи I2C. Как вы можете видеть, вам просто нужно создать объект Adafruit_BME280 с именем bme.

Чтобы использовать SPI, вам нужно закомментировать предыдущую строку и раскомментировать одну из следующих строк.

Раздел Setup()

В setup () запускаем последовательный порт со скоростью 9600 бод:

И инициализируем датчик

Вывод значений

В цикле loop() функция printValues() считывает значения с BME280 и выводит результаты в монитор последовательного порта.

Считывание температуры, влажности, давления и оценки высоты выполняем используя следующие методы объекта bme:

  • bme.readTemperature() – считывает температуру в градусах Цельсия;
  • bme.readHumidity() – считывает абсолютную влажность;
  • bme.readPressure() – считывает давление в ГПа (гектопаскаль = миллибар);
  • bme.readAltitude(SEALEVELPRESSURE_HPA) – оценивает высоту в метрах на основе давления на уровне моря.

Демонстрация работы

demo

Загрузите скетч в плату Arduino

arrow

Откройте монитор последовательного порта со скоростью передачи данных 9600 бод.

serial monitor

Если все предыдущие шаги были выполнены верно вы должны увидеть показания датчиков

com log

Подведение итогов

BME280 обеспечивает простой и недорогой способ получения показаний давления, температуры и влажности. Датчик взаимодействует через протокол связи I2C, что означает, что вам просто нужно подключить датчик к контактам Arduino I2C.

Написание кода для получения показаний датчика также очень просто благодаря библиотеке BME280_Adafruit. Вам просто нужно использовать методы readTemperature(), readHumidity() и readPressure(). Вы также можете оценить высоту, используя метод readAltitude().

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *