2018-11-14 22:11:23 +01:00
|
|
|
#ifdef HAS_BME
|
|
|
|
|
2018-11-17 18:30:19 +01:00
|
|
|
#include "bme680read.h"
|
2018-11-14 22:11:23 +01:00
|
|
|
|
|
|
|
// Local logging tag
|
|
|
|
static const char TAG[] = "main";
|
|
|
|
|
|
|
|
#define SEALEVELPRESSURE_HPA (1013.25)
|
|
|
|
|
|
|
|
// I2C Bus interface
|
|
|
|
Adafruit_BME680 bme;
|
|
|
|
|
|
|
|
bmeStatus_t bme_status;
|
|
|
|
|
2018-11-17 18:30:19 +01:00
|
|
|
void bme_init(void) {
|
|
|
|
// initialize BME680 sensor using default i2c address 0x77
|
|
|
|
if (bme.begin()) {
|
|
|
|
// Set up oversampling and filter initialization
|
|
|
|
bme.setTemperatureOversampling(BME680_OS_8X);
|
|
|
|
bme.setHumidityOversampling(BME680_OS_2X);
|
|
|
|
bme.setPressureOversampling(BME680_OS_4X);
|
|
|
|
bme.setIIRFilterSize(BME680_FILTER_SIZE_3);
|
|
|
|
bme.setGasHeater(320, 150); // 320*C for 150 ms
|
|
|
|
ESP_LOGI(TAG, "BME680 chip found and initialized");
|
|
|
|
} else
|
|
|
|
ESP_LOGE(TAG, "BME680 chip not found on i2c bus");
|
|
|
|
}
|
|
|
|
|
|
|
|
bool bme_read(void) {
|
|
|
|
bool ret = bme.performReading();
|
|
|
|
if (ret) {
|
|
|
|
// read current BME data and buffer in global struct
|
|
|
|
bme_status.temperature = (uint16_t)(bme.temperature * 100.0);
|
|
|
|
bme_status.pressure = (uint16_t)(bme.pressure / 100.0);
|
|
|
|
bme_status.humidity = (uint8_t)bme.humidity;
|
|
|
|
bme_status.gas_resistance = (uint16_t)(bme.gas_resistance / 1000.0);
|
|
|
|
bme_status.altitude =
|
|
|
|
(uint16_t)(bme.readAltitude(SEALEVELPRESSURE_HPA / 1000.0));
|
|
|
|
ESP_LOGI(TAG, "BME680 sensor data read success");
|
2018-11-14 22:11:23 +01:00
|
|
|
} else {
|
2018-11-17 18:30:19 +01:00
|
|
|
ESP_LOGI(TAG, "BME680 sensor read error");
|
2018-11-14 22:11:23 +01:00
|
|
|
}
|
2018-11-17 18:30:19 +01:00
|
|
|
return ret;
|
|
|
|
}
|
2018-11-14 22:11:23 +01:00
|
|
|
|
|
|
|
#endif // HAS_BME
|