
Библиотека Adafruit_BMP280 разработана специально для настройки и измерения атмосферного давления и температуры модулем BMP280.
Как подключить стороннюю библиотеку ардуино можно почитать по ссылке. Библиотеку Adafruit_BMP280.h можно скачать с сайта.
ZIP-архив с библиотекой версии 2.6.2.
Следующим шагом подготовки использования библиотеки, это объявление ее в начале скетча:
#include <Wire.h> // Библиотека для работы с шиной I2C #include <SPI.h> // Библиотека для работы с шиной SPI #include <Adafruit_BMP280.h> // Библиотека для работы с датчиком BMP280
Так же необходимо настроить подключение библиотеки для работы с датчиком через шину SPI или I2C. Для этого нужно создать переменную класса для получения доступа к функциям библиотеки. Создается экземпляр класса одним из трех способов, который зависит от того через какую шину подключается модуль:
- Используйте данный код, если подключение было по шине I2C:
Adafruit_BMP280 bmp;
- Следующий код создания экземпляра класса используется при подключении через аппаратный SPI (в таком случае указываем только пин выбора датчика CS):
#define PIN_CS 10 Adafruit_BMP280 bmp(PIN_CS);
- Если подключение датчика было через программный SPI, то необходимо указать все ножки SPI шины:
#define PIN_SCK 13 #define PIN_MISO 12 #define PIN_MOSI 11 #define PIN_CS 10 Adafruit_BMP280 bmp(PIN_CS, PIN_MOSI, PIN_MISO, PIN_SCK);
После подключения и создания экземпляра класса, мы можем использовать функции класса для работы с датчиком. И первой функцией будет функция инициализации bmp.begin()
:
if(!bmp.begin()) { // Если датчик BMP280 не найден Serial.println(“BMP280 SENSOR ERROR”); // Выводим сообщение об ошибке while(1); // Переходим в бесконечный цикл }
В коде выше, мы инициализируем нашу библиотеку, если bmp.begin()
возвращает 0, значит библиотека наш датчик не обнаружила. Необходимо проверить правильность подключения, а также проверить тем ли способом создали экземпляр класса.
Если библиотека нашла наш датчик, следующим шагом будет первоначальная настройка измерений датчика. Для этого предназначена функция setSampling
.
bmp.setSampling(Adafruit_BMP280::MODE_NORMAL, // Режим работы Adafruit_BMP280::SAMPLING_X2, // Точность изм. температуры Adafruit_BMP280::SAMPLING_X16, // Точность изм. давления Adafruit_BMP280::FILTER_X16, // Уровень фильтрации Adafruit_BMP280::STANDBY_MS_500); // Период просыпания, мСек
Функция принимает следующие параметры:
Режим работы модуля
- MODE_NORMAL – при данном режиме, во время настройки измерений 5-м параметром задается цикличность измерений модуля. Модуль просыпается в порядке установленного времени, производит измерения температуры и атмосферного давления. Сохранив результат измерения в свою память, засыпает.
- MODE_FORCED – пользовательский режим измерения, запрос на измерение подает внешний сигнал от ардуино. После получения сигнала, модуль измеряет атмосферное давление и температуру и вновь уходит в сон.
- MODE_SLEEP – режим минимального энергопотребления. В данном режиме модуль не производит измерений, но и потребления энергии самое маленькое из всех режимов.
- MODE_SOFT_RESET_CODE – данный режим означает, что модуль будет настроен на заводских настройках.
Вторым и третьим параметром настройки модуля являются настройки для точности измерений температуры и атмосферного давления.
Точность измерения
- SAMPLING_NONE – точность измерения не используется;
- SAMPLING_X1 – точность измерения АЦП 16 бит;
- SAMPLING_X2 – точность измерения АЦП 17 бит;
- SAMPLING_X4 – точность измерения АЦП 18 бит;
- SAMPLING_X8 – точность измерения АЦП 19 бит;
- SAMPLING_X16 – точность измерения АЦП 20 бит.
Внимание!
Данный датчик может реагировать на звуковые волны, поэтому для более точного измерения используйте настройку АЦП минимум _X4.
Четвертый параметр отвечает за применения фильтрации измеренных данных. Этот параметр используется в совокупности с 2 и 3 парметром.
Фильтрация
- FILTER_OFF – фильтрация отключена;
- FILTER_X2 – уровень фильтрации X2;
- FILTER_X4 – уровень фильтрации X4;
- FILTER_X8 – уровень фильтрации X8;
- FILTER_X16 –уровень фильтрации X16.
Пятый параметр устанавливает время циклической работы модуля в режиме MODE_NORMAL
:
Время цикла
- STANDBY_MS_1 – модуль просыпается каждую миллисекунду;
- STANDBY_MS_63 – модуль просыпается каждые 63 миллисекунды;
- STANDBY_MS_125 – модуль просыпается каждых 125 миллисекунд;
- STANDBY_MS_250 – модуль просыпается каждых 250 миллисекунд;
- STANDBY_MS_500 – модуль просыпается каждых 500 миллисекунд;
- STANDBY_MS_1000 – модуль просыпается каждую секунду;
- STANDBY_MS_2000 – модуль просыпается каждые 2 секунды;
- STANDBY_MS_4000 – модуль просыпается каждых 4 секунды;
На этом этапе настройка модуля завершена. Теперь мы можем воспользоваться функциями измерения атмосферного давления.
void loop() { // Выводим значение температуры Serial.print(F("Temperature = ")); Serial.print(bmp.readTemperature()); // Функция измерения температуры Serial.println(" *C"); // Выводим значение атмосферного давления Serial.print(F("Pressure = ")); Serial.print(bmp.readPressure()); // Функция измерения атм. давления Serial.println(" Pa"); // Выводим значение высоты Serial.print(F("Approx altitude = ")); Serial.print(bmp.readAltitude(1013.25)); // Функция измерения высоты Serial.println(" m"); }
Для измерения высоты используется константа 1013.25. Это значение атмосферного давления над уровнем моря, на территории, где находится датчик.
Использование библиотеки с шиной I2C
Для обмена данными через шину I2C необходимо знать уникальный адрес модуля, установленный заводом изготовителем. Модуль BMP 280 имеет два адреса 0x77 или 0x76. По умолчанию Adafruit_BMP280.h настроена на адрес 0х77. По этому некоторые модули могут не работать, если на заводе установлен адрес 0x76. Данный адрес можно установить отредактировав файл Adafruit_BMP280.h. Необходимо найти строчку в коде и изменить адрес в скобках на 0x76:
#define BMP280_ADDRESS (0x77) /**< The default I2C address for the sensor. */