commit
95f050bbee
|
|
@ -0,0 +1,32 @@
|
||||||
|
name: Arduino Library CI
|
||||||
|
|
||||||
|
on: [pull_request, push]
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
|
steps:
|
||||||
|
- uses: actions/setup-python@v1
|
||||||
|
with:
|
||||||
|
python-version: '3.x'
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
- uses: actions/checkout@v2
|
||||||
|
with:
|
||||||
|
repository: adafruit/ci-arduino
|
||||||
|
path: ci
|
||||||
|
|
||||||
|
- name: pre-install
|
||||||
|
run: bash ci/actions_install.sh
|
||||||
|
|
||||||
|
- name: test platforms
|
||||||
|
run: python3 ci/build_platform.py main_platforms
|
||||||
|
|
||||||
|
- name: clang
|
||||||
|
run: python3 ci/run-clang-format.py -e "ci/*" -e "bin/*" -r .
|
||||||
|
|
||||||
|
- name: doxygen
|
||||||
|
env:
|
||||||
|
GH_REPO_TOKEN: ${{ secrets.GH_REPO_TOKEN }}
|
||||||
|
PRETTYNAME : "Adafruit BME280 Library"
|
||||||
|
run: bash ci/doxy_gen_and_deploy.sh
|
||||||
26
.travis.yml
26
.travis.yml
|
|
@ -1,26 +0,0 @@
|
||||||
language: c
|
|
||||||
sudo: false
|
|
||||||
cache:
|
|
||||||
directories:
|
|
||||||
- ~/arduino_ide
|
|
||||||
- ~/.arduino15/packages/
|
|
||||||
git:
|
|
||||||
depth: false
|
|
||||||
quiet: true
|
|
||||||
env:
|
|
||||||
global:
|
|
||||||
- PRETTYNAME="Adafruit BME280 Arduino Library"
|
|
||||||
|
|
||||||
before_install:
|
|
||||||
- source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/install.sh)
|
|
||||||
|
|
||||||
install:
|
|
||||||
- arduino --install-library "Adafruit Unified Sensor"
|
|
||||||
|
|
||||||
script:
|
|
||||||
- build_main_platforms
|
|
||||||
|
|
||||||
# Generate and deploy documentation
|
|
||||||
after_success:
|
|
||||||
- source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/library_check.sh)
|
|
||||||
- source <(curl -SLs https://raw.githubusercontent.com/adafruit/travis-ci-arduino/master/doxy_gen_and_deploy.sh)
|
|
||||||
|
|
@ -61,6 +61,18 @@ Adafruit_BME280::Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin,
|
||||||
int8_t sckpin)
|
int8_t sckpin)
|
||||||
: _cs(cspin), _mosi(mosipin), _miso(misopin), _sck(sckpin) {}
|
: _cs(cspin), _mosi(mosipin), _miso(misopin), _sck(sckpin) {}
|
||||||
|
|
||||||
|
Adafruit_BME280::~Adafruit_BME280(void) {
|
||||||
|
if (temp_sensor) {
|
||||||
|
delete temp_sensor;
|
||||||
|
}
|
||||||
|
if (pressure_sensor) {
|
||||||
|
delete pressure_sensor;
|
||||||
|
}
|
||||||
|
if (humidity_sensor) {
|
||||||
|
delete humidity_sensor;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
* @brief Initialise sensor with given parameters / settings
|
* @brief Initialise sensor with given parameters / settings
|
||||||
* @param addr the I2C address the device can be found on
|
* @param addr the I2C address the device can be found on
|
||||||
|
|
@ -153,7 +165,6 @@ void Adafruit_BME280::setSampling(sensor_mode mode,
|
||||||
// making sure sensor is in sleep mode before setting configuration
|
// making sure sensor is in sleep mode before setting configuration
|
||||||
// as it otherwise may be ignored
|
// as it otherwise may be ignored
|
||||||
write8(BME280_REGISTER_CONTROL, MODE_SLEEP);
|
write8(BME280_REGISTER_CONTROL, MODE_SLEEP);
|
||||||
|
|
||||||
|
|
||||||
// you must make sure to also set REGISTER_CONTROL after setting the
|
// you must make sure to also set REGISTER_CONTROL after setting the
|
||||||
// CONTROLHUMID register, otherwise the values won't be applied (see
|
// CONTROLHUMID register, otherwise the values won't be applied (see
|
||||||
|
|
@ -528,3 +539,159 @@ float Adafruit_BME280::seaLevelForAltitude(float altitude, float atmospheric) {
|
||||||
* @returns Sensor ID 0x60 for BME280, 0x56, 0x57, 0x58 BMP280
|
* @returns Sensor ID 0x60 for BME280, 0x56, 0x57, 0x58 BMP280
|
||||||
*/
|
*/
|
||||||
uint32_t Adafruit_BME280::sensorID(void) { return _sensorID; }
|
uint32_t Adafruit_BME280::sensorID(void) { return _sensorID; }
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief Gets an Adafruit Unified Sensor object for the temp sensor component
|
||||||
|
@return Adafruit_Sensor pointer to temperature sensor
|
||||||
|
*/
|
||||||
|
Adafruit_Sensor *Adafruit_BME280::getTemperatureSensor(void) {
|
||||||
|
if (!temp_sensor) {
|
||||||
|
temp_sensor = new Adafruit_BME280_Temp(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
return temp_sensor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief Gets an Adafruit Unified Sensor object for the pressure sensor
|
||||||
|
component
|
||||||
|
@return Adafruit_Sensor pointer to pressure sensor
|
||||||
|
*/
|
||||||
|
Adafruit_Sensor *Adafruit_BME280::getPressureSensor(void) {
|
||||||
|
if (!pressure_sensor) {
|
||||||
|
pressure_sensor = new Adafruit_BME280_Pressure(this);
|
||||||
|
}
|
||||||
|
return pressure_sensor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*!
|
||||||
|
@brief Gets an Adafruit Unified Sensor object for the humidity sensor
|
||||||
|
component
|
||||||
|
@return Adafruit_Sensor pointer to humidity sensor
|
||||||
|
*/
|
||||||
|
Adafruit_Sensor *Adafruit_BME280::getHumiditySensor(void) {
|
||||||
|
if (!humidity_sensor) {
|
||||||
|
humidity_sensor = new Adafruit_BME280_Humidity(this);
|
||||||
|
}
|
||||||
|
return humidity_sensor;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************/
|
||||||
|
/*!
|
||||||
|
@brief Gets the sensor_t data for the BME280's temperature sensor
|
||||||
|
*/
|
||||||
|
/**************************************************************************/
|
||||||
|
void Adafruit_BME280_Temp::getSensor(sensor_t *sensor) {
|
||||||
|
/* Clear the sensor_t object */
|
||||||
|
memset(sensor, 0, sizeof(sensor_t));
|
||||||
|
|
||||||
|
/* Insert the sensor name in the fixed length char array */
|
||||||
|
strncpy(sensor->name, "BME280", sizeof(sensor->name) - 1);
|
||||||
|
sensor->name[sizeof(sensor->name) - 1] = 0;
|
||||||
|
sensor->version = 1;
|
||||||
|
sensor->sensor_id = _sensorID;
|
||||||
|
sensor->type = SENSOR_TYPE_AMBIENT_TEMPERATURE;
|
||||||
|
sensor->min_delay = 0;
|
||||||
|
sensor->min_value = -40.0; /* Temperature range -40 ~ +85 C */
|
||||||
|
sensor->max_value = +85.0;
|
||||||
|
sensor->resolution = 0.01; /* 0.01 C */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************/
|
||||||
|
/*!
|
||||||
|
@brief Gets the temperature as a standard sensor event
|
||||||
|
@param event Sensor event object that will be populated
|
||||||
|
@returns True
|
||||||
|
*/
|
||||||
|
/**************************************************************************/
|
||||||
|
bool Adafruit_BME280_Temp::getEvent(sensors_event_t *event) {
|
||||||
|
/* Clear the event */
|
||||||
|
memset(event, 0, sizeof(sensors_event_t));
|
||||||
|
|
||||||
|
event->version = sizeof(sensors_event_t);
|
||||||
|
event->sensor_id = _sensorID;
|
||||||
|
event->type = SENSOR_TYPE_AMBIENT_TEMPERATURE;
|
||||||
|
event->timestamp = millis();
|
||||||
|
event->temperature = _theBME280->readTemperature();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************/
|
||||||
|
/*!
|
||||||
|
@brief Gets the sensor_t data for the BME280's pressure sensor
|
||||||
|
*/
|
||||||
|
/**************************************************************************/
|
||||||
|
void Adafruit_BME280_Pressure::getSensor(sensor_t *sensor) {
|
||||||
|
/* Clear the sensor_t object */
|
||||||
|
memset(sensor, 0, sizeof(sensor_t));
|
||||||
|
|
||||||
|
/* Insert the sensor name in the fixed length char array */
|
||||||
|
strncpy(sensor->name, "BME280", sizeof(sensor->name) - 1);
|
||||||
|
sensor->name[sizeof(sensor->name) - 1] = 0;
|
||||||
|
sensor->version = 1;
|
||||||
|
sensor->sensor_id = _sensorID;
|
||||||
|
sensor->type = SENSOR_TYPE_PRESSURE;
|
||||||
|
sensor->min_delay = 0;
|
||||||
|
sensor->min_value = 300.0; /* 300 ~ 1100 hPa */
|
||||||
|
sensor->max_value = 1100.0;
|
||||||
|
sensor->resolution = 0.012; /* 0.12 hPa relative */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************/
|
||||||
|
/*!
|
||||||
|
@brief Gets the pressure as a standard sensor event
|
||||||
|
@param event Sensor event object that will be populated
|
||||||
|
@returns True
|
||||||
|
*/
|
||||||
|
/**************************************************************************/
|
||||||
|
bool Adafruit_BME280_Pressure::getEvent(sensors_event_t *event) {
|
||||||
|
/* Clear the event */
|
||||||
|
memset(event, 0, sizeof(sensors_event_t));
|
||||||
|
|
||||||
|
event->version = sizeof(sensors_event_t);
|
||||||
|
event->sensor_id = _sensorID;
|
||||||
|
event->type = SENSOR_TYPE_PRESSURE;
|
||||||
|
event->timestamp = millis();
|
||||||
|
event->pressure = _theBME280->readPressure() / 100; // convert Pa to hPa
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************/
|
||||||
|
/*!
|
||||||
|
@brief Gets the sensor_t data for the BME280's humidity sensor
|
||||||
|
*/
|
||||||
|
/**************************************************************************/
|
||||||
|
void Adafruit_BME280_Humidity::getSensor(sensor_t *sensor) {
|
||||||
|
/* Clear the sensor_t object */
|
||||||
|
memset(sensor, 0, sizeof(sensor_t));
|
||||||
|
|
||||||
|
/* Insert the sensor name in the fixed length char array */
|
||||||
|
strncpy(sensor->name, "BME280", sizeof(sensor->name) - 1);
|
||||||
|
sensor->name[sizeof(sensor->name) - 1] = 0;
|
||||||
|
sensor->version = 1;
|
||||||
|
sensor->sensor_id = _sensorID;
|
||||||
|
sensor->type = SENSOR_TYPE_RELATIVE_HUMIDITY;
|
||||||
|
sensor->min_delay = 0;
|
||||||
|
sensor->min_value = 0;
|
||||||
|
sensor->max_value = 100; /* 0 - 100 % */
|
||||||
|
sensor->resolution = 3; /* 3% accuracy */
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************/
|
||||||
|
/*!
|
||||||
|
@brief Gets the humidity as a standard sensor event
|
||||||
|
@param event Sensor event object that will be populated
|
||||||
|
@returns True
|
||||||
|
*/
|
||||||
|
/**************************************************************************/
|
||||||
|
bool Adafruit_BME280_Humidity::getEvent(sensors_event_t *event) {
|
||||||
|
/* Clear the event */
|
||||||
|
memset(event, 0, sizeof(sensors_event_t));
|
||||||
|
|
||||||
|
event->version = sizeof(sensors_event_t);
|
||||||
|
event->sensor_id = _sensorID;
|
||||||
|
event->type = SENSOR_TYPE_RELATIVE_HUMIDITY;
|
||||||
|
event->timestamp = millis();
|
||||||
|
event->relative_humidity = _theBME280->readHumidity();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -105,26 +105,49 @@ typedef struct {
|
||||||
} bme280_calib_data;
|
} bme280_calib_data;
|
||||||
/*=========================================================================*/
|
/*=========================================================================*/
|
||||||
|
|
||||||
/*
|
class Adafruit_BME280;
|
||||||
class Adafruit_BME280_Unified : public Adafruit_Sensor
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Adafruit_BME280_Unified(int32_t sensorID = -1);
|
|
||||||
|
|
||||||
bool begin(uint8_t addr = BME280_ADDRESS);
|
/** Adafruit Unified Sensor interface for temperature component of BME280 */
|
||||||
void getTemperature(float *temp);
|
class Adafruit_BME280_Temp : public Adafruit_Sensor {
|
||||||
void getPressure(float *pressure);
|
public:
|
||||||
float pressureToAltitude(float seaLevel, float atmospheric, float temp);
|
/** @brief Create an Adafruit_Sensor compatible object for the temp sensor
|
||||||
float seaLevelForAltitude(float altitude, float atmospheric, float temp);
|
@param parent A pointer to the BME280 class */
|
||||||
void getEvent(sensors_event_t*);
|
Adafruit_BME280_Temp(Adafruit_BME280 *parent) { _theBME280 = parent; }
|
||||||
void getSensor(sensor_t*);
|
bool getEvent(sensors_event_t *);
|
||||||
|
void getSensor(sensor_t *);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
uint8_t _i2c_addr;
|
int _sensorID = 280;
|
||||||
int32_t _sensorID;
|
Adafruit_BME280 *_theBME280 = NULL;
|
||||||
};
|
};
|
||||||
|
|
||||||
*/
|
/** Adafruit Unified Sensor interface for pressure component of BME280 */
|
||||||
|
class Adafruit_BME280_Pressure : public Adafruit_Sensor {
|
||||||
|
public:
|
||||||
|
/** @brief Create an Adafruit_Sensor compatible object for the pressure sensor
|
||||||
|
@param parent A pointer to the BME280 class */
|
||||||
|
Adafruit_BME280_Pressure(Adafruit_BME280 *parent) { _theBME280 = parent; }
|
||||||
|
bool getEvent(sensors_event_t *);
|
||||||
|
void getSensor(sensor_t *);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int _sensorID = 280;
|
||||||
|
Adafruit_BME280 *_theBME280 = NULL;
|
||||||
|
};
|
||||||
|
|
||||||
|
/** Adafruit Unified Sensor interface for humidity component of BME280 */
|
||||||
|
class Adafruit_BME280_Humidity : public Adafruit_Sensor {
|
||||||
|
public:
|
||||||
|
/** @brief Create an Adafruit_Sensor compatible object for the humidity sensor
|
||||||
|
@param parent A pointer to the BME280 class */
|
||||||
|
Adafruit_BME280_Humidity(Adafruit_BME280 *parent) { _theBME280 = parent; }
|
||||||
|
bool getEvent(sensors_event_t *);
|
||||||
|
void getSensor(sensor_t *);
|
||||||
|
|
||||||
|
private:
|
||||||
|
int _sensorID = 280;
|
||||||
|
Adafruit_BME280 *_theBME280 = NULL;
|
||||||
|
};
|
||||||
|
|
||||||
/**************************************************************************/
|
/**************************************************************************/
|
||||||
/*!
|
/*!
|
||||||
|
|
@ -190,10 +213,9 @@ public:
|
||||||
// constructors
|
// constructors
|
||||||
Adafruit_BME280();
|
Adafruit_BME280();
|
||||||
Adafruit_BME280(int8_t cspin, SPIClass *theSPI = &SPI);
|
Adafruit_BME280(int8_t cspin, SPIClass *theSPI = &SPI);
|
||||||
Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin,
|
Adafruit_BME280(int8_t cspin, int8_t mosipin, int8_t misopin, int8_t sckpin);
|
||||||
int8_t sckpin);
|
~Adafruit_BME280(void);
|
||||||
|
bool begin(uint8_t addr = BME280_ADDRESS, TwoWire *theWire = &Wire);
|
||||||
bool begin(uint8_t addr=BME280_ADDRESS, TwoWire *theWire=&Wire);
|
|
||||||
bool init();
|
bool init();
|
||||||
|
|
||||||
void setSampling(sensor_mode mode = MODE_NORMAL,
|
void setSampling(sensor_mode mode = MODE_NORMAL,
|
||||||
|
|
@ -212,9 +234,23 @@ public:
|
||||||
float seaLevelForAltitude(float altitude, float pressure);
|
float seaLevelForAltitude(float altitude, float pressure);
|
||||||
uint32_t sensorID(void);
|
uint32_t sensorID(void);
|
||||||
|
|
||||||
|
Adafruit_Sensor *getTemperatureSensor(void);
|
||||||
|
Adafruit_Sensor *getPressureSensor(void);
|
||||||
|
Adafruit_Sensor *getHumiditySensor(void);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
TwoWire *_wire; //!< pointer to a TwoWire object
|
TwoWire *_wire; //!< pointer to a TwoWire object
|
||||||
SPIClass *_spi; //!< pointer to SPI object
|
SPIClass *_spi; //!< pointer to SPI object
|
||||||
|
|
||||||
|
Adafruit_BME280_Temp *temp_sensor = NULL;
|
||||||
|
//!< Adafruit_Sensor compat temperature sensor component
|
||||||
|
|
||||||
|
Adafruit_BME280_Pressure *pressure_sensor = NULL;
|
||||||
|
//!< Adafruit_Sensor compat pressure sensor component
|
||||||
|
|
||||||
|
Adafruit_BME280_Humidity *humidity_sensor = NULL;
|
||||||
|
//!< Adafruit_Sensor compat humidity sensor component
|
||||||
|
|
||||||
void readCoefficients(void);
|
void readCoefficients(void);
|
||||||
bool isReadingCalibration(void);
|
bool isReadingCalibration(void);
|
||||||
uint8_t spixfer(uint8_t x);
|
uint8_t spixfer(uint8_t x);
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
# Adafruit BME280 Library [](https://travis-ci.com/adafruit/Adafruit_BME280_Library)
|
# Adafruit BME280 Library 
|
||||||
|
|
||||||
<a href="http://www.adafruit.com/products/2652"><img src="./assets/board.jpg" width="500"/></a>
|
<a href="http://www.adafruit.com/products/2652"><img src="./assets/board.jpg" width="500"/></a>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -38,7 +38,7 @@ void setup() {
|
||||||
Serial.begin(9600);
|
Serial.begin(9600);
|
||||||
Serial.println(F("BME280 test"));
|
Serial.println(F("BME280 test"));
|
||||||
|
|
||||||
if (! bme.begin(&Wire)) {
|
if (! bme.begin(0x77, &Wire)) {
|
||||||
Serial.println("Could not find a valid BME280 sensor, check wiring!");
|
Serial.println("Could not find a valid BME280 sensor, check wiring!");
|
||||||
while (1);
|
while (1);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,62 @@
|
||||||
|
/***************************************************************************
|
||||||
|
This is a library for the BME280 humidity, temperature & pressure sensor
|
||||||
|
This example shows how to take Sensor Events instead of direct readings
|
||||||
|
|
||||||
|
Designed specifically to work with the Adafruit BME280 Breakout
|
||||||
|
----> http://www.adafruit.com/products/2652
|
||||||
|
|
||||||
|
These sensors use I2C or SPI to communicate, 2 or 4 pins are required
|
||||||
|
to interface.
|
||||||
|
|
||||||
|
Adafruit invests time and resources providing this open source code,
|
||||||
|
please support Adafruit and open-source hardware by purchasing products
|
||||||
|
from Adafruit!
|
||||||
|
|
||||||
|
Written by Limor Fried & Kevin Townsend for Adafruit Industries.
|
||||||
|
BSD license, all text above must be included in any redistribution
|
||||||
|
***************************************************************************/
|
||||||
|
|
||||||
|
#include <Wire.h>
|
||||||
|
#include <SPI.h>
|
||||||
|
#include <Adafruit_BME280.h>
|
||||||
|
|
||||||
|
Adafruit_BME280 bme; // use I2C interface
|
||||||
|
Adafruit_Sensor *bme_temp = bme.getTemperatureSensor();
|
||||||
|
Adafruit_Sensor *bme_pressure = bme.getPressureSensor();
|
||||||
|
Adafruit_Sensor *bme_humidity = bme.getHumiditySensor();
|
||||||
|
|
||||||
|
void setup() {
|
||||||
|
Serial.begin(9600);
|
||||||
|
Serial.println(F("BME280 Sensor event test"));
|
||||||
|
|
||||||
|
if (!bme.begin()) {
|
||||||
|
Serial.println(F("Could not find a valid BME280 sensor, check wiring!"));
|
||||||
|
while (1) delay(10);
|
||||||
|
}
|
||||||
|
|
||||||
|
bme_temp->printSensorDetails();
|
||||||
|
bme_pressure->printSensorDetails();
|
||||||
|
bme_humidity->printSensorDetails();
|
||||||
|
}
|
||||||
|
|
||||||
|
void loop() {
|
||||||
|
sensors_event_t temp_event, pressure_event, humidity_event;
|
||||||
|
bme_temp->getEvent(&temp_event);
|
||||||
|
bme_pressure->getEvent(&pressure_event);
|
||||||
|
bme_humidity->getEvent(&humidity_event);
|
||||||
|
|
||||||
|
Serial.print(F("Temperature = "));
|
||||||
|
Serial.print(temp_event.temperature);
|
||||||
|
Serial.println(" *C");
|
||||||
|
|
||||||
|
Serial.print(F("Humidity = "));
|
||||||
|
Serial.print(humidity_event.relative_humidity);
|
||||||
|
Serial.println(" %");
|
||||||
|
|
||||||
|
Serial.print(F("Pressure = "));
|
||||||
|
Serial.print(pressure_event.pressure);
|
||||||
|
Serial.println(" hPa");
|
||||||
|
|
||||||
|
Serial.println();
|
||||||
|
delay(1000);
|
||||||
|
}
|
||||||
|
|
@ -1,5 +1,5 @@
|
||||||
name=Adafruit BME280 Library
|
name=Adafruit BME280 Library
|
||||||
version=1.1.0
|
version=2.0.0
|
||||||
author=Adafruit
|
author=Adafruit
|
||||||
maintainer=Adafruit <info@adafruit.com>
|
maintainer=Adafruit <info@adafruit.com>
|
||||||
sentence=Arduino library for BME280 sensors.
|
sentence=Arduino library for BME280 sensors.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue