ELECTRONICS

Библиотека Adafruit BMP280

менеджер: Adafruit BMP280 LibraryAdafruitверсия 3.0.0

Датчик давления и температуры BMP280 по I2C или SPI: давление в паскалях, высота над уровнем моря.

BMP280 меряет атмосферное давление с точностью, достаточной, чтобы заметить подъём на один этаж, и заодно температуру. Библиотека отдаёт давление в паскалях и считает высоту, если сказать ей давление на уровне моря. Вместе с ней ставится Adafruit Unified Sensor и BusIO.

На модулях GY-BMP280 адрес обычно 0x76, а не 0x77 из примеров Adafruit — это первая причина «датчик не найден». Вторая — вместо BMP280 в модуле стоит BME280 с влажностью, у него своя библиотека.

Установка и подключение

В менеджере библиотек ищите Adafruit BMP280 Library автора Adafruit. Если менеджер предложит поставить зависимости — соглашайтесь. Как открыть менеджер и что делать, если библиотека не находится, — в общей статье про библиотеки.

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

Создание объекта — обычно до setup():

Adafruit_BMP280 bmp;              // I2C
bmp.begin(0x76);                   // в setup(); 0x76 у GY-BMP280, 0x77 у плат Adafruit

Методы

Только то, что нужно в обычном скетче. Сигнатуры сверены с версией 3.0.0.

begin(uint8_t address)
Найти датчик по адресу. false — не найден или это не BMP280.
readTemperature()
Температура, °C.
readPressure()
Давление в паскалях; делите на 100 для гектопаскалей и на 133,3 для мм рт. ст.
readAltitude(float seaLevelhPa)
Высота в метрах относительно давления на уровне моря — берут с ближайшей метеостанции, по умолчанию 1013,25.
setSampling(mode, tempOS, pressOS, filter, standby)
Режим и усреднение: для точных измерений ставят передискретизацию ×16 и фильтр.
takeForcedMeasurement()
Одно измерение в режиме FORCED — для экономии батареи.
sensorID()
Код чипа: 0x58 — BMP280, 0x60 — это BME280, нужна другая библиотека.

Пример

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

Adafruit_BMP280 bmp;

void setup() {
  Serial.begin(9600);
  if (!bmp.begin(0x76)) {
    Serial.print("Датчик не найден, id = 0x");
    Serial.println(bmp.sensorID(), HEX);
    while (1);
  }
}

void loop() {
  Serial.print(bmp.readTemperature(), 1);
  Serial.print(" C  ");
  Serial.print(bmp.readPressure() / 133.322, 1);
  Serial.print(" мм рт. ст.  ");
  Serial.print(bmp.readAltitude(1013.25), 0);
  Serial.println(" м");
  delay(2000);
}

Высота «плавает» на метр-два — это норма для давления. Для этажности хватает, для дрона нужны фильтры.

На чём попадаются

begin() возвращает false

Адрес 0x76 вместо 0x77, либо чип BME280 (sensorID 0x60): для него библиотека Adafruit BME280.

Температура завышена на пару градусов

Датчик греется от платы и собственного питания. Отодвиньте от стабилизатора или переведите в FORCED-режим с редкими измерениями.

Давление 300 или 1100 гПа

Крайние значения диапазона — датчик не откалиброван или неверно прочитаны коэффициенты. Проверьте питание 3,3 В и провода.

Где используется на сайте

Что дальше