Содержание
Constructor & Destructor Documentation
BMP280 | ( | int | bus = , |
int | addr = , | ||
int | cs = | ||
) |
BMP280 constructor.
This driver supports both the BMP280 and the BME280. The BME280 adds a humidity sensor. The device type is detected automatically by querying the chip id register.
This device can support both I2C and SPI. For SPI, set the addr to -1, and specify a positive integer representing the Chip Select (CS) pin for the cs argument. If you are using a hardware CS pin, then you can connect the proper pin to the hardware CS pin on your MCU and supply -1 for cs. The default operating mode is I2C.
- Parameters
-
bus I2C or SPI bus to use. addr The I2C address for this device. Use -1 for SPI. cs The gpio pin to use for the SPI Chip Select. Use -1 for I2C, or for SPI with a hardware controlled pin.
- Exceptions
-
std::runtime_error on failure.
Here is the caller graph for this function:
|
virtual |
BMP280 Destructor.
Here is the call graph for this function:
How to use BMP280?
Connect the power supply pins Vcc and GND to 3.3 volts and ground of a circuit. Now, you need to select the digital interface. For I²C, connect chip select pin (CSB) to Vcc otherwise connect it to the ground or leave it unconnected. Set the I²C address. If you want to set 0x77 address, connect the SDO pin to Vcc. To set 0x76 address, leave the pin unconnected. This module does not contain any onboard voltage regulator or a level shifter. Therefore, for connecting it to devices whose operating voltage is 5V or any voltage other than 3.3V, you need a level shifter and voltage regulator.
Interfacing With Arduino
We have used a 2N7000 bidirectional level shifter module for connecting the 3.3V module to a 5V Arduino. This transistor is performing a function of level shifting. It performs a bidirectional conversion of 3.3V logic of sensor module to 5V and 5V logic of Arduino to 3.3V. Connect the Vcc pin of a module with a 3.3V pin or Arduino.
I²C Interfacing
For I²C interfacing, connect
- pin1 to 3.3V pin of Arduino
- pin2 to the ground pin of Arduino
- pin3 to analog pin 5 or SCL pin using level shifter circuit
- Pin4 to analog pin 4 or SDA pin using level shifter circuit
- Pin5 is left unconnected
- Pin6 to pin1 of sensor module
SPI Interfacing
For SDO and SCL pin use level shifter circuit or any other module performing conversion between the two voltages. Power the module from 3.3 V pin of Arduino.
Connect the sensor to the SPI pins on the ICSP header of Arduino as follows:
- Pin3 to Arduino’s pin13
- Pin6 to MISO pin12 and MOSI pin11 of Arduino
- Pin5 to Arduino’s pin10.
Connections for pin 1 and 2 are the same.
Датчик атмосферного давления bmp280
Датчик BMP280 был разработан также фирмой Bosh как более продвинутая модель своего предшественника BMP180. Данная модификация, в отличие от bmp180, может работать по двум интерфейсам (SPI и I2C), а также 3 режима работы:
- NORMAL – в данном режиме модуль просыпается с определённой периодичностью, выполняет необходимые измерения и снова засыпает. Частота измерений задаётся программным путём, а результат считывается при необходимости;
- SLEEP – режим максимально пониженного энергопотребления;
- FORCED – этот режим позволяет будить модуль подачей внешнего управляющего сигнала. После выполнения измерений, модуль автоматически переходит в режим пониженного энергопотребления.
Помимо способности измерять показания атмосферного давления,BMP280 может также определять температуру окружающей среды, что является очень хорошим бонусом.
Все производимые вычисления могут быть отфильтрованы настраиваемым программным фильтром. На рисунке показан внешний вид модуля bmp280 его электрическая схема и распиновка выводов.
Характеристики датчика bmp280
Модель bmp280 обладает такими техническими характеристиками:
- Размер 2 х 2,5 х 0,95 мм;
- Уровень давления 300-1100 гПа;
- Температурный диапазон от 0 до 65 С;
- Поддерживает интерфейс I2C и SPI;
- Аккумулятор 1,7 В – 3,6 В;
- Потребляемый ток 2,7 мкА
Схема подключения датчика BMP280 к плате Arduino по протоколу SPI
Для работы с датчиком нужна специальная библиотека. В нашем случае это библиотека Adafruit_BMP280 которая специально заточена для работы с датчиком BMP280.
В библиотеке есть методы которые дают возможность пользователю выбрать способ подключения, а также настроить период и точность измерений при том или ином режиме работы.
Для того чтобы начать работу с BMP280 нужно скачать и установить библиотеку Adafruit_BMP280 , подключить сам заголовочный файл Adafruit_BMP280.h, а также ещё два файла Wire.h и SPI.h, которые нужны для доступа к необходимым интерфейсам.
Программа для работы с датчиком BMP280
В этом примере следует обратить внимание на число 1013.25 в функции bmp.readAltitude(). Это значение давления над уровнем моря конкретной местности, где располагается в данный момент модуль
Значение можно узнать в интернете.
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
Работа NRF24L01
NRF24L01 — это цифровой приемопередатчик с SPI-подключением, способный передавать и принимать данные в диапазоне 24 ГГц ISM (ISM — промышленный, научный и медицинский; Industrial, Scientific, Medical).
NRF24L01
Это тот же самый диапазон, который используется Bluetooth и WiFi, и не требует лицензирования, так как он маломощный. Это устройство с питанием от 3 В, но линии данных соответствуют 5 В, поэтому преобразование не требуется. Вы можете управлять его VCC выводом прямо с вывода 3,3 В Arduino Uno.
Интерфейс SPI работает со скоростью до 10 Мбит/с. Каждый модуль работает на одной и той же частоте или канале в диапазоне от 2,400 до 2,525 ГГц. Внутри каждого канала имеется 6 «линий», позволяющих установить до 6 связей в каждом канале. Это означает, что один мастер может прослушивать 6 ведомых устройств, все на одном канале, но на разных «линиях».
Использование
bool begin(void); // запустить со стандартным адресом (0x76) bool begin(uint8_t address); // запустить с указанием адреса bool isMeasuring(void); // возвращает true, пока идёт измерение float readPressure(void); // прочитать давление в Па float readHumidity(void); // Прочитать влажность в % void oneMeasurement(void); // Сделать одно измерение и уйти в сон float readTemperature(void); // Прочитать температуру в градусах С void setMode(uint8_t mode); // установить режим работы // режимы: NORMAL_MODE FORCED_MODE void setFilter(uint8_t mode); // изменить коэффициент фильтрации. Вызывать перед begin // коэффициенты: FILTER_DISABLE FILTER_COEF_2 FILTER_COEF_4 FILTER_COEF_8 FILTER_COEF_16 void setStandbyTime(uint8_t mode); // Изменить время между измерениями. Вызывать перед begin // режимы: STANDBY_500US STANDBY_10MS STANDBY_20MS STANDBY_6250US STANDBY_125MS STANDBY_250MS STANDBY_500MS STANDBY_1000MS void setHumOversampling(uint8_t mode); // Настроить оверсэмплинг или отключить влажность. Вызывать перед begin void setTempOversampling(uint8_t mode); // Настроить оверсэмплинг или отключить температуру. Вызывать перед begin void setPressOversampling(uint8_t mode); // Настроить оверсэмплинг или отключить давление. Вызывать перед begin // режимы: MODULE_DISABLE OVERSAMPLING_1 OVERSAMPLING_2 OVERSAMPLING_4 OVERSAMPLING_8 OVERSAMPLING_16
Подключение 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);
}
1 |
if(!bmp.begin()){ Serial.println(«Could not find a valid BMP280 sensor, check wiring!»); while(1); } |
вернет True, если датчик был найден, и False, если нет. В случае с False, проверьте соединение датчика с платой Arduino!
Считать температуру и давление легко, просто вызовите функции:
bmp.readTemperature(); // Температура в градусах Цельсия.
bmp.readPressure(); // Атмосферное давление в гПа
1 |
bmp.readTemperature();// Температура в градусах Цельсия. bmp.readPressure();// Атмосферное давление в гПа |
Копируйте и скомпилируйте нижеприведённый скетч в Arduino IDE.
#include <Adafruit_BMP280.h>
Adafruit_BMP280 bmp280;
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();
delay(2000);
}
1 |
#include <Adafruit_BMP280.h> Adafruit_BMP280bmp280; voidsetup(){ 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); } } voidloop(){ floattemperature=bmp280.readTemperature(); floatpressure=bmp280.readPressure(); floataltitude=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(); delay(2000); } |
Результат
Температура рассчитывается в градусах Цельсия, вы можете преобразовать ее в градусы Фаренгейта, используя классическое уравнение F = C * 9/5 + 32.
Давление возвращается в единицах СИ Паскалей. 100 Паскалей = 1 гПа = 1 миллибар. Часто барометрическое давление сообщается в миллибарах или миллиметрах ртутного столба. Для дальнейшего использования 1 паскаль = 0,00750062 миллиметров ртутного столба или 1 миллиметр ртутного столба = 133,322 Паскаля. Таким образом, если вы возьмете значение паскаля, скажем, 100734 и разделите на 133,322, вы получите 755,57 миллиметров ртутного столба.
Также возможно превратить BMP280 в альтиметр. Если вы знаете давление на уровне моря, библиотека может рассчитать текущее атмосферное давление в высоту.
Подключение модуля 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
Подключение модуля 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:
Arduino
#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»);
Serial.println();
delay(2000);
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
#include <Wire.h> #define BMP_SCK 13 //Adafruit_BMP280 bme; // I2C Adafruit_BMP280bme(BMP_CS);// hardware SPI //Adafruit_BMP280 bme(BMP_CS, BMP_MOSI, BMP_MISO, BMP_SCK); voidsetup(){ 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); } } voidloop(){ 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»); Serial.println(); delay(2000); } |
Скетч такой же, как и в первом примере, за исключением изменения нескольких строк:
Arduino
//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);
1 2 3 |
//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 Features
- It requires 3.3V power for operation.
- It does not possess any onboard voltage regulator or level shifters.
- The board uses the BMP280 sensor which is an upgraded version of BMP085 or BMP180 or BMP183.
- It measures barometric pressure and temperature with an accuracy of ±1 hPa and ±1.0°C.
- The peak current of module is 1.12mA.
- The temperature required for its operation lies between -40 °C to +85 °C.
- The pressure range is from 300 hPa to 1100 hPa which is equivalent to +9000 to -500m above sea level.
- It supports I²C (up to 3.4 MHz) and SPI digital interfaces (up to 10 MHz).
- The size of module is 11.5mm * 15mm.
Что измеряет сенсор
Давление — некая физическая величина численно равная перпендикулярно направленной силе действующей на единицу площади поверхности. Сам датчик можно представить своеобразными очень чувствительными весами. Последнее замечание сделано по причине того, что и вода, и газы тоже имеют свою массу, которая влияет на поверхность под ними. На практике, за счет указанного фактора, можно определить глубину погружения (чем ниже, тем больше вес слоя воды) или высоту подъема в атмосферу (чем выше — тем меньше плотность, а значит и слабее воздействие). Кроме того, в отношении давления воздуха не стоит забывать о погодных колебаниях. Резкое падение названой характеристики атмосферы — к дождю или буре.
Опять же, насчет газов и частично жидкостей. Их можно сжимать. Но, уплотненные вещества будут стремиться вернуться в первоначальное состояние. И чем сильнее компрессия, тем мощнее будет конечное давление газа или жидкости внутри сосуда их содержащего.
Собственно, детектор Ардуино о котором идет речь, и измеряет силу воздействия на единицу площади сенсорного элемента прибора. Правда, в большинстве выпускаемых моделей, описанное — не все их функциональные возможности. Бонусом, у многих идет замер температуры окружающей среды, а у некоторых еще и влажности или ускорения.
О проекте
Иногда непрактично использовать один Arduino для чтения с датчика и показания результата здесь же. Например, устройство планируется разместить в недоступном или опасном месте, или там, где прокладка кабеля нецелесообразна. В таких случаях, мы должны передавать полученные данные на второй удаленный Arduino, например, в соседней комнате управления или диспетчерской.
В данном руководстве мы будем использовать барометрический датчик давления и температуры BMP280, подключенный к одному Arduino, а затем использовать 24 ГГц радиосвязь, предоставляемую двумя цифровыми приемопередатчиками NRF24L01 (трансивер), для передачи этих данных на второй Arduino, который расположен на некотором расстоянии.
Это расстояние должно быть менее 50 м в зависимости от наличия стен между ними. Трансивер означает комбинированный передатчик и приемник в одном устройстве.
В проекте один Arduino будет оснащен BMP280, подключенный как I2C, а также NRF24L01 соединенный через SPI. Он будет передавать радиосигнал на второй Arduino, который также оснащен другим NRF24L01 работает в качестве приемника, который будет отображать входящие данные на последовательном мониторе.
Вы можете использовать ЖК-дисплей. NRF может работать в обоих направлениях, то есть приемник может ответить с подтверждением, но это добавит больше сложности в реализации устройства, чем нам нужно.
Следует иметь в виду, что это настоящая радиосвязь SHF (Super High Frequency — Супер высокая частота), и чем она выше, тем лучше, как и во всех подобных радиосвязях. К тому же, она имеет тенденцию «вести себя» как разряженный световой луч, поэтому чем меньше препятствий, т.е. стен, тем лучше.
Описание библиотеки для работы с датчиком. Пример скетча
Для работы с датчиком BMP180 существуют различные библиотеки, упрощающие работу. К ним относятся SFE_BMP180, Adafruit_BMP085. Эти же библиотеки подходят для работы с датчиком BMP080. Для датчика bmp280 используется похожая библиотека Adafruit_BMP280.
Первый пробный скетч будет заставлять датчик считывать показания давления и температуры. Код подойдет как для датчика BMP180 , так и для BMP280, нужно только подключить правильную библиотеку и указать верные контакты, к которым подключен модуль. В первую очередь в коде нужно подключить все библиотеки и инициализировать работу датчика. Для определения давления нужно сначала узнать температуру. Для этого используется следующий элемент кода.
status = pressure.startTemperature();// Считываются данные с датчика о температуре if(status!=0){ delay(status); // Ожидание status = pressure.getTemperature(T); // Сохранение полученных данных о температуре if(status!=0){ Serial.print("Temperature: "); // Выведение на экран слова «Температура» Serial.print(T,2); // Вывод на экран значения температуры. Serial.println("deg C, "); //Печать символа градуса Цельсия.
Затем нужно получить информацию об атмосферном давлении.
status = pressure.startPressure(3); // происходит считывание давления if(status!=0){ delay(status); // Ожидание status = pressure.getPressure(P,T); // получение давления, сохранение if(status!=0){ Serial.print("Absolute pressure: "); // Вывод на экран слов «Атмосферное давление» Serial.print(P,2); // Вывод на экран значения переменной mBar Serial.print(" mbar, "); // Вывод на экран текста "mBar" Serial.print(P*0.7500637554192,2); // вывод на экран значения в mmHg (мм.рт.ст.) Serial.println(" mmHg");} // вывод на экран единицы измерения давления "mmHg" (мм. Рт.ст.).
После загрузки скетча в окне мониторинг порта появятся данные о температуре и атмосферном давлении.
Датчик BME280 также показывает давление и температуру, дополнительно он может считывать показания о влажности, который по умолчанию выключен. При необходимости можно произвести настройки датчика и начать считывать показания о влажности. Диапазон измерения от 0 до 100%. Библиотека, которая нужна для работы с датчиком, называется Adafruit_BME280.
Код похож на тот, что описан выше, только к нему еще добавляются строки для определения влажности.
void printValues() { Serial.print("Temperature = "); Serial.print(bme.readTemperature()); Serial.println(" C"); //определение температуры, вывод ее на экран в градусах Цельсия. Serial.print("Pressure = "); Serial.print(bme.readPressure() / 100.0F); Serial.println(" hPa"); //определение давления, вывод его на экран Serial.print("Humidity = "); Serial.print(bme.readHumidity()); Serial.println(" %"); //определение влажности в процентах, вывод измеренного значения на экран. Serial.println(); }
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.
Different libraries give the same result
Here the adafruit library was given the actual forecast sea level pressure
to get an altitude. I don’t think it is too accurate because you have to have
the actual ground level pressure value at your location. where I am is about
23m above sea level not 2m see the readings below!
The I2C Sensor library does not let you change the default value of
1013.25mb so you would need to go and write some code to allow accurate height
measurement adjustment.
Different libraries Adafruit and I2C library (same result) 07:41 13/8/17 forecast pressure 1020mbar avg sea level pressure I2C Sensor LIB: Probe BMP280: Sensor found HeightPT1: 1.82 m; Height: 20.03 Pressure: 101758.00 Pa; T: 23.27 C HeightPT1: 3.50 m; Height: 20.28 Pressure: 101755.00 Pa; T: 23.34 C HeightPT1: 5.01 m; Height: 20.12 Pressure: 101757.00 Pa; T: 23.33 C 07:42 13/8/17 Adafruit library forecast pressure 1020mbar Temperature = 23.70 *C Pressure = 101755.11 Pa Approx altitude = 20.27 m
Note: The I2C sensor library code averages the 1st 10 readings (see example
2 below) so the left hand values are not stable (until 10 values are gathered)
the next measurement is the unaveraged height reading (20.03).
Interestingly there is a difference in temperature readings; Maybe one of
the library code implementations is not right.
Warning: Getting a calibrated height using a predicted
forecast pressure reading is not accurate as it will be slightly different at
your location, so it is best to design code to store the value (when you are at
ground level — by pressing a dedicated button, or gather the data on power up).
Then use this value as the calibration value for measuring relative height from
ground level.
Why your BMP280 won’t start
If you’re like me, and you have a breakout board without level shifters, and
you create some using a few components (see the schematic on this page), to get
I2C mode going, and then burn the example code into the Arduino uno r3. You
then wonder why it’s doing absolutely nothing!
As a typical engineer you give it a go and then — it’s time to read the
manual! — this is always a last resort unless there is a danger of blowing up a
$800 component! In which case read the manual first.
It turns out that the communication mode of the BMP280 is set on power up by
the state of various control inputs.
One «gotcha» is that an OUTPUT in SPI mode turns into an INPUT in I2C
mode!
SPI mode uses more pins to define its interface and one of these unused the
outputs (in SPI mode) is used as an input in I2C mode!. If you have a breakout
board then these control inputs are left floating, meaning its just not going
to work unless you set them before power up.
Warning: Holding any interface pin high while VDDIO
is switched off will damage the chip due to current flow through protection
diode. This could happen if you are designing a complex power management system
where control pins are connected to the processor and power to the chip is
controlled separately.
Conversely, if VDD is off and VDDIO is supplied,
control pins at the chip are held at high-z (inactive).
Описание
BME280 – высокоточный метеодатчик, измеряющий такие параметры микроклимата как температура, влажность и атмосферное давление. В зависимости от модуля может подключаться к I2C и SPI шинами микроконтроллера и работать от 3-5V, если на плате есть стабилизатор, или 3V, если его нет.
На обратной стороне платы не просто так написано BME280/BMP280 – BMP является урезанной версией BME, в которой нет влажности. Как их различить, если недобросовестный китаец не поставил галочку? По корпусу датчика:
В наборе GyverKIT первых партий (все наборы 2021 года) шёл BME280 версии I2C 5V, но старт продаж набора совпал с мировым кризисом микросхем, из за которого датчик стал сильно дефицитным и китайцы начали хитрить. В наборах GyverKIT 2021 года можно встретить:
- Рабочий BME280
- Рабочий BMP280
- Нерабочий BMP280
Мы приносим свои извинения за эту ситуацию, вы можете запросить возврат средств за модуль у магазина Giant4.