From e4d908ebf339deebdd49d74c520e0e8e413ec231 Mon Sep 17 00:00:00 2001 From: Pim van Pelt Date: Sun, 22 Apr 2018 08:11:52 +0200 Subject: [PATCH] Create empty BME280 driver --- include/mgos_barometer.h | 3 ++- src/main.c | 25 ++++++++++++++++--------- src/mgos_barometer.c | 7 +++++++ src/mgos_barometer_bme280.c | 37 +++++++++++++++++++++++++++++++++++++ src/mgos_barometer_bme280.h | 13 +++++++++++++ 5 files changed, 75 insertions(+), 10 deletions(-) create mode 100644 src/mgos_barometer_bme280.c create mode 100644 src/mgos_barometer_bme280.h diff --git a/include/mgos_barometer.h b/include/mgos_barometer.h index 868fb59..852330f 100644 --- a/include/mgos_barometer.h +++ b/include/mgos_barometer.h @@ -26,7 +26,8 @@ extern "C" { enum mgos_barometer_type { BARO_NONE = 0, BARO_MPL115, - BARO_MPL3115 + BARO_MPL3115, + BARO_BME280 }; struct mgos_barometer; diff --git a/src/main.c b/src/main.c index 2bd897f..bb97250 100644 --- a/src/main.c +++ b/src/main.c @@ -161,12 +161,11 @@ bool do_baro(struct mgos_barometer *sensor) { if (!sensor) return false; - if (mgos_barometer_get_pressure(sensor, &pressure)) { + if (mgos_barometer_get_pressure(sensor, &pressure)) LOG(LL_INFO, ("Pressure %.2fPa", pressure)); - } - if (mgos_barometer_get_temperature(sensor, &temperature)) { + + if (mgos_barometer_get_temperature(sensor, &temperature)) LOG(LL_INFO, ("Temperature %.2fC", temperature)); - } return true; } @@ -179,7 +178,7 @@ int main() { struct mgos_mcp9808 *mcp9808; struct mgos_ccs811 * ccs811; struct mgos_mpu9250 *mpu9250; - struct mgos_barometer *baro; + struct mgos_barometer *baro1, *baro2; if (!mgos_i2c_open(I2CBUSNR)) { LOG(LL_ERROR, ("Cannot open I2C bus %u", I2CBUSNR)); @@ -215,10 +214,16 @@ int main() { mgos_mpu9250_set_magnetometer_speed(mpu9250, MAG_100_HZ); } */ - if (!(baro=mgos_barometer_create_i2c(i2c, 0x60, BARO_MPL3115))) { + if (!(baro1=mgos_barometer_create_i2c(i2c, 0x60, BARO_MPL3115))) { LOG(LL_ERROR, ("Cannot create barometer")); } else { - mgos_barometer_set_cache_ttl(baro, 1000); + mgos_barometer_set_cache_ttl(baro1, 1000); + } + + if (!(baro2=mgos_barometer_create_i2c(i2c, 0x76, BARO_BME280))) { + LOG(LL_ERROR, ("Cannot create barometer")); + } else { + mgos_barometer_set_cache_ttl(baro2, 1000); } for (;;) { @@ -230,7 +235,8 @@ int main() { * do_ccs811(ccs811); * do_mpu9250(mpu9250); */ - do_baro(baro); + do_baro(baro1); + do_baro(baro2); sleep(1); } @@ -240,7 +246,8 @@ int main() { mgos_mcp9808_destroy(&mcp9808); mgos_ccs811_destroy(&ccs811); mgos_mpu9250_destroy(&mpu9250); - mgos_barometer_destroy(&baro); + mgos_barometer_destroy(&baro1); + mgos_barometer_destroy(&baro2); return 0; } diff --git a/src/mgos_barometer.c b/src/mgos_barometer.c index 2443e2f..dad9db1 100644 --- a/src/mgos_barometer.c +++ b/src/mgos_barometer.c @@ -18,6 +18,7 @@ #include "mgos_barometer_internal.h" #include "mgos_barometer_mpl115.h" #include "mgos_barometer_mpl3115.h" +#include "mgos_barometer_bme280.h" // Private functions follow // Private functions end @@ -48,6 +49,12 @@ struct mgos_barometer *mgos_barometer_create_i2c(struct mgos_i2c *i2c, uint8_t i sensor->create = mgos_barometer_mpl3115_create; sensor->read = mgos_barometer_mpl3115_read; break; + case BARO_BME280: + sensor->detect = mgos_barometer_bme280_detect; + sensor->create = mgos_barometer_bme280_create; + sensor->read = mgos_barometer_bme280_read; + sensor->destroy = mgos_barometer_bme280_destroy; + break; default: LOG(LL_ERROR, ("Unknown mgos_barometer_type %d", type)); free(sensor); diff --git a/src/mgos_barometer_bme280.c b/src/mgos_barometer_bme280.c new file mode 100644 index 0000000..0e0f1e3 --- /dev/null +++ b/src/mgos_barometer_bme280.c @@ -0,0 +1,37 @@ +#include "mgos_barometer_bme280.h" +#include "mgos_i2c.h" + +// Datasheet: +// https://cdn-shop.adafruit.com/datasheets/MPL115A2.pdf + +bool mgos_barometer_bme280_detect(struct mgos_barometer *dev) { + if (!dev) return false; + return false; +} + +bool mgos_barometer_bme280_create(struct mgos_barometer *dev) { + struct mgos_barometer_bme280_data *bme280_data; + + if (!dev) return false; + return false; +} + +bool mgos_barometer_bme280_destroy(struct mgos_barometer *dev) { + if (!dev) return false; + if (dev->user_data) { + free(dev->user_data); + dev->user_data=NULL; + } + return true; +} + +bool mgos_barometer_bme280_read(struct mgos_barometer *dev) { + struct mgos_barometer_bme280_data *bme280_data; + + if (!dev) return false; + bme280_data=(struct mgos_barometer_bme280_data *) dev->user_data; + if (!bme280_data) return false; + + return false; +} + diff --git a/src/mgos_barometer_bme280.h b/src/mgos_barometer_bme280.h new file mode 100644 index 0000000..fec78d5 --- /dev/null +++ b/src/mgos_barometer_bme280.h @@ -0,0 +1,13 @@ +#pragma once + +#include "mgos.h" +#include "mgos_barometer_internal.h" + +struct mgos_barometer_bme280_data { + float a0, b1, b2, c12; +}; + +bool mgos_barometer_bme280_detect(struct mgos_barometer *dev); +bool mgos_barometer_bme280_create(struct mgos_barometer *dev); +bool mgos_barometer_bme280_destroy(struct mgos_barometer *dev); +bool mgos_barometer_bme280_read(struct mgos_barometer *dev);