Add documentation and features to BMx280 modules

pull/152/head
Phil Howard 2021-07-28 16:01:43 +01:00
rodzic be9b1437db
commit 218d8ea929
8 zmienionych plików z 283 dodań i 2 usunięć

Wyświetl plik

@ -0,0 +1,83 @@
# BME280 <!-- omit in toc -->
- [Getting Started](#getting-started)
- [Reading Temperature, Pressure & Humidity](#reading-temperature-pressure--humidity)
- [Configuring The Sensor](#configuring-the-sensor)
- [Filter Settings](#filter-settings)
- [Oversampling Settings](#oversampling-settings)
- [Mode Settings](#mode-settings)
- [Standby/Output Data Rate Settings](#standbyoutput-data-rate-settings)
- [Defaults](#defaults)
## Getting Started
Construct new `PimoroniI2C` and `BreakoutBME280` instances:
```python
from breakout_bme280 import BreakoutBME280
from pimoroni_i2c import PimoroniI2C
PINS_BREAKOUT_GARDEN = {"sda": 4, "scl": 5}
PINS_PICO_EXPLORER = {"sda": 20, "scl": 21}
i2c = PimoroniI2C(**PINS_BREAKOUT_GARDEN)
bme = BreakoutBME280(i2c)
```
## Reading Temperature, Pressure & Humidity
The `read` method will return a tuple containing Temperature (degrees C), Pressure (Pa) and Humidity (RH %) values:
```python
temperature, pressure, humidity = bme.read()
```
## Configuring The Sensor
The `configure` method allows you to set up the oversampling, filtering and operation mode.
```python
bmp.configure(filter, standby_time, os_pressure, os_humidity, os_temp, mode)
```
The `breakout_bme280` module includes constants for these:
### Filter Settings
* `FILTER_COEFF_OFF`
* `FILTER_COEFF_2`
* `FILTER_COEFF_4`
* `FILTER_COEFF_8`
* `FILTER_COEFF_16`
### Oversampling Settings
* `NO_OVERSAMPLING`
* `OVERSAMPLING_1X`
* `OVERSAMPLING_2X`
* `OVERSAMPLING_4X`
* `OVERSAMPLING_8X`
* `OVERSAMPLING_16X`
### Mode Settings
* `SLEEP_MODE`
* `FORCED_MODE`
* `NORMAL_MODE`
### Standby/Output Data Rate Settings
* `STANDBY_TIME_0_5_MS`
* `STANDBY_TIME_62_5_MS`
* `STANDBY_TIME_125_MS`
* `STANDBY_TIME_250_MS`
* `STANDBY_TIME_500_MS`
* `STANDBY_TIME_1000_MS`
* `STANDBY_TIME_2000_MS`
* `STANDBY_TIME_4000_MS`
### Defaults
```python
bme.configure(FILTER_COEFF_2, STANDBY_TIME_0_5_MS, OVERSAMPLING_16X, OVERSAMPLING_2X, OVERSAMPLING_1X)
```

Wyświetl plik

@ -6,10 +6,12 @@
/***** Methods *****/
MP_DEFINE_CONST_FUN_OBJ_1(BreakoutBME280_read_obj, BreakoutBME280_read);
MP_DEFINE_CONST_FUN_OBJ_KW(BreakoutBME280_configure_obj, 1, BreakoutBME280_configure);
/***** Binding of Methods *****/
STATIC const mp_rom_map_elem_t BreakoutBME280_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&BreakoutBME280_read_obj) },
{ MP_ROM_QSTR(MP_QSTR_configure), MP_ROM_PTR(&BreakoutBME280_configure_obj) },
};
STATIC MP_DEFINE_CONST_DICT(BreakoutBME280_locals_dict, BreakoutBME280_locals_dict_table);
@ -31,6 +33,32 @@ const mp_obj_type_t breakout_bme280_BreakoutBME280_type = {
STATIC const mp_map_elem_t breakout_bme280_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_breakout_bme280) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_BreakoutBME280), (mp_obj_t)&breakout_bme280_BreakoutBME280_type },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_OFF), MP_ROM_INT(BME280_FILTER_COEFF_OFF) },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_2), MP_ROM_INT(BME280_FILTER_COEFF_2) },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_4), MP_ROM_INT(BME280_FILTER_COEFF_4) },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_8), MP_ROM_INT(BME280_FILTER_COEFF_8) },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_16), MP_ROM_INT(BME280_FILTER_COEFF_16) },
{ MP_ROM_QSTR(MP_QSTR_NO_OVERSAMPLING), MP_ROM_INT(BME280_NO_OVERSAMPLING) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_1X), MP_ROM_INT(BME280_OVERSAMPLING_1X) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_2X), MP_ROM_INT(BME280_OVERSAMPLING_2X) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_4X), MP_ROM_INT(BME280_OVERSAMPLING_4X) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_8X), MP_ROM_INT(BME280_OVERSAMPLING_8X) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_16X), MP_ROM_INT(BME280_OVERSAMPLING_16X) },
{ MP_ROM_QSTR(MP_QSTR_SLEEP_MODE), MP_ROM_INT(BME280_SLEEP_MODE) },
{ MP_ROM_QSTR(MP_QSTR_FORCED_MODE), MP_ROM_INT(BME280_FORCED_MODE) },
{ MP_ROM_QSTR(MP_QSTR_NORMAL_MODE), MP_ROM_INT(BME280_NORMAL_MODE) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_0_5_MS), MP_ROM_INT(BME280_STANDBY_TIME_0_5_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_62_5_MS), MP_ROM_INT(BME280_STANDBY_TIME_62_5_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_125_MS), MP_ROM_INT(BME280_STANDBY_TIME_125_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_250_MS), MP_ROM_INT(BME280_STANDBY_TIME_250_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_500_MS), MP_ROM_INT(BME280_STANDBY_TIME_500_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_1000_MS), MP_ROM_INT(BME280_STANDBY_TIME_1000_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_10_MS), MP_ROM_INT(BME280_STANDBY_TIME_10_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_20_MS), MP_ROM_INT(BME280_STANDBY_TIME_20_MS) },
};
STATIC MP_DEFINE_CONST_DICT(mp_module_breakout_bme280_globals, breakout_bme280_globals_table);

Wyświetl plik

@ -93,4 +93,33 @@ mp_obj_t BreakoutBME280_read(mp_obj_t self_in) {
return mp_obj_new_tuple(3, tuple);
}
mp_obj_t BreakoutBME280_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_self, ARG_filter, ARG_standby_time, ARG_os_pressure, ARG_os_temp, ARG_os_humidity, ARG_mode };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_, MP_ARG_REQUIRED | MP_ARG_OBJ },
{ MP_QSTR_filter, MP_ARG_INT, { .u_int=BME280_FILTER_COEFF_2 } },
{ MP_QSTR_standby_time, MP_ARG_INT, { .u_int=BME280_STANDBY_TIME_0_5_MS } },
{ MP_QSTR_os_pressure, MP_ARG_INT, { .u_int=BME280_OVERSAMPLING_16X } },
{ MP_QSTR_os_temp, MP_ARG_INT, { .u_int=BME280_OVERSAMPLING_2X } },
{ MP_QSTR_os_humidity, MP_ARG_INT, { .u_int=BME280_OVERSAMPLING_1X } },
{ MP_QSTR_mode, MP_ARG_INT, { .u_int=BME280_NORMAL_MODE } },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
breakout_bme280_BreakoutBME280_obj_t *self = MP_OBJ_TO_PTR2(args[ARG_self].u_obj, breakout_bme280_BreakoutBME280_obj_t);
self->breakout->configure(
args[ARG_filter].u_int,
args[ARG_standby_time].u_int,
args[ARG_os_pressure].u_int,
args[ARG_os_temp].u_int,
args[ARG_os_humidity].u_int,
args[ARG_mode].u_int
);
return mp_const_none;
}
}

Wyświetl plik

@ -1,5 +1,6 @@
// Include MicroPython API.
#include "py/runtime.h"
#include "drivers/bme280/src/bme280_defs.h"
/***** Constants *****/
@ -9,4 +10,5 @@ extern const mp_obj_type_t breakout_bme280_BreakoutBME280_type;
/***** Extern of Class Methods *****/
extern void BreakoutBME280_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind);
extern mp_obj_t BreakoutBME280_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args);
extern mp_obj_t BreakoutBME280_read(mp_obj_t self_in);
extern mp_obj_t BreakoutBME280_read(mp_obj_t self_in);
extern mp_obj_t BreakoutBME280_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);

Wyświetl plik

@ -0,0 +1,83 @@
# BMP280 <!-- omit in toc -->
- [Getting Started](#getting-started)
- [Reading Temperature & Pressure](#reading-temperature--pressure)
- [Configuring The Sensor](#configuring-the-sensor)
- [Filter Settings](#filter-settings)
- [Oversampling Settings](#oversampling-settings)
- [Mode Settings](#mode-settings)
- [Standby/Output Data Rate Settings](#standbyoutput-data-rate-settings)
- [Defaults](#defaults)
## Getting Started
Construct new `PimoroniI2C` and `BreakoutBMP280` instances:
```python
from breakout_bmp280 import BreakoutBMP280
from pimoroni_i2c import PimoroniI2C
PINS_BREAKOUT_GARDEN = {"sda": 4, "scl": 5}
PINS_PICO_EXPLORER = {"sda": 20, "scl": 21}
i2c = PimoroniI2C(**PINS_BREAKOUT_GARDEN)
bmp = BreakoutBMP280(i2c)
```
## Reading Temperature & Pressure
The `read` method will return a tuple containing Temperature (degrees C) and Pressure (Pa) values:
```python
temperature, pressure = bmp.read()
```
## Configuring The Sensor
The `configure` method allows you to set up the oversampling, filtering and operation mode.
```python
bmp.configure(filter, standby_time, os_pressure, os_temp, mode)
```
The `breakout_bmp280` module includes constants for these:
### Filter Settings
* `FILTER_COEFF_OFF`
* `FILTER_COEFF_2`
* `FILTER_COEFF_4`
* `FILTER_COEFF_8`
* `FILTER_COEFF_16`
### Oversampling Settings
* `NO_OVERSAMPLING`
* `OVERSAMPLING_1X`
* `OVERSAMPLING_2X`
* `OVERSAMPLING_4X`
* `OVERSAMPLING_8X`
* `OVERSAMPLING_16X`
### Mode Settings
* `SLEEP_MODE`
* `FORCED_MODE`
* `NORMAL_MODE`
### Standby/Output Data Rate Settings
* `STANDBY_TIME_0_5_MS`
* `STANDBY_TIME_62_5_MS`
* `STANDBY_TIME_125_MS`
* `STANDBY_TIME_250_MS`
* `STANDBY_TIME_500_MS`
* `STANDBY_TIME_1000_MS`
* `STANDBY_TIME_2000_MS`
* `STANDBY_TIME_4000_MS`
### Defaults
```python
bmp.configure(FILTER_COEFF_2, STANDBY_TIME_1000_MS, OVERSAMPLING_4X, OVERSAMPLING_4X)
```

Wyświetl plik

@ -6,10 +6,12 @@
/***** Methods *****/
MP_DEFINE_CONST_FUN_OBJ_1(BreakoutBMP280_read_obj, BreakoutBMP280_read);
MP_DEFINE_CONST_FUN_OBJ_KW(BreakoutBMP280_configure_obj, 1, BreakoutBMP280_configure);
/***** Binding of Methods *****/
STATIC const mp_rom_map_elem_t BreakoutBMP280_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_read), MP_ROM_PTR(&BreakoutBMP280_read_obj) },
{ MP_ROM_QSTR(MP_QSTR_configure), MP_ROM_PTR(&BreakoutBMP280_configure_obj) },
};
STATIC MP_DEFINE_CONST_DICT(BreakoutBMP280_locals_dict, BreakoutBMP280_locals_dict_table);
@ -31,6 +33,32 @@ const mp_obj_type_t breakout_bmp280_BreakoutBMP280_type = {
STATIC const mp_map_elem_t breakout_bmp280_globals_table[] = {
{ MP_OBJ_NEW_QSTR(MP_QSTR___name__), MP_OBJ_NEW_QSTR(MP_QSTR_breakout_bmp280) },
{ MP_OBJ_NEW_QSTR(MP_QSTR_BreakoutBMP280), (mp_obj_t)&breakout_bmp280_BreakoutBMP280_type },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_OFF), MP_ROM_INT(BMP280_FILTER_OFF) },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_2), MP_ROM_INT(BMP280_FILTER_COEFF_2) },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_4), MP_ROM_INT(BMP280_FILTER_COEFF_4) },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_8), MP_ROM_INT(BMP280_FILTER_COEFF_8) },
{ MP_ROM_QSTR(MP_QSTR_FILTER_COEFF_16), MP_ROM_INT(BMP280_FILTER_COEFF_16) },
{ MP_ROM_QSTR(MP_QSTR_NO_OVERSAMPLING), MP_ROM_INT(BMP280_OS_NONE) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_1X), MP_ROM_INT(BMP280_OS_1X) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_2X), MP_ROM_INT(BMP280_OS_2X) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_4X), MP_ROM_INT(BMP280_OS_4X) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_8X), MP_ROM_INT(BMP280_OS_8X) },
{ MP_ROM_QSTR(MP_QSTR_OVERSAMPLING_16X), MP_ROM_INT(BMP280_OS_16X) },
{ MP_ROM_QSTR(MP_QSTR_SLEEP_MODE), MP_ROM_INT(BMP280_SLEEP_MODE) },
{ MP_ROM_QSTR(MP_QSTR_FORCED_MODE), MP_ROM_INT(BMP280_FORCED_MODE) },
{ MP_ROM_QSTR(MP_QSTR_NORMAL_MODE), MP_ROM_INT(BMP280_NORMAL_MODE) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_0_5_MS), MP_ROM_INT(BMP280_ODR_0_5_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_62_5_MS), MP_ROM_INT(BMP280_ODR_62_5_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_125_MS), MP_ROM_INT(BMP280_ODR_125_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_250_MS), MP_ROM_INT(BMP280_ODR_250_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_500_MS), MP_ROM_INT(BMP280_ODR_500_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_1000_MS), MP_ROM_INT(BMP280_ODR_1000_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_2000_MS), MP_ROM_INT(BMP280_ODR_2000_MS) },
{ MP_ROM_QSTR(MP_QSTR_STANDBY_TIME_4000_MS), MP_ROM_INT(BMP280_ODR_4000_MS) },
};
STATIC MP_DEFINE_CONST_DICT(mp_module_breakout_bmp280_globals, breakout_bmp280_globals_table);

Wyświetl plik

@ -92,4 +92,30 @@ mp_obj_t BreakoutBMP280_read(mp_obj_t self_in) {
return mp_obj_new_tuple(2, tuple);
}
mp_obj_t BreakoutBMP280_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args) {
enum { ARG_self, ARG_filter, ARG_standby_time, ARG_os_pressure, ARG_os_temp, ARG_mode };
static const mp_arg_t allowed_args[] = {
{ MP_QSTR_, MP_ARG_REQUIRED | MP_ARG_OBJ },
{ MP_QSTR_filter, MP_ARG_INT, { .u_int=BMP280_FILTER_COEFF_2 } },
{ MP_QSTR_standby_time, MP_ARG_INT, { .u_int=BMP280_ODR_0_5_MS } },
{ MP_QSTR_os_pressure, MP_ARG_INT, { .u_int=BMP280_OS_16X } },
{ MP_QSTR_os_temp, MP_ARG_INT, { .u_int=BMP280_OS_2X } },
{ MP_QSTR_mode, MP_ARG_INT, { .u_int=BMP280_NORMAL_MODE } },
};
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
mp_arg_parse_all(n_args, pos_args, kw_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
breakout_bmp280_BreakoutBMP280_obj_t *self = MP_OBJ_TO_PTR2(args[ARG_self].u_obj, breakout_bmp280_BreakoutBMP280_obj_t);
self->breakout->configure(
args[ARG_filter].u_int,
args[ARG_standby_time].u_int,
args[ARG_os_pressure].u_int,
args[ARG_os_temp].u_int,
args[ARG_mode].u_int
);
return mp_const_none;
}
}

Wyświetl plik

@ -1,5 +1,6 @@
// Include MicroPython API.
#include "py/runtime.h"
#include "drivers/bmp280/src/bmp280_defs.h"
/***** Constants *****/
@ -9,4 +10,5 @@ extern const mp_obj_type_t breakout_bmp280_BreakoutBMP280_type;
/***** Extern of Class Methods *****/
extern void BreakoutBMP280_print(const mp_print_t *print, mp_obj_t self_in, mp_print_kind_t kind);
extern mp_obj_t BreakoutBMP280_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args);
extern mp_obj_t BreakoutBMP280_read(mp_obj_t self_in);
extern mp_obj_t BreakoutBMP280_read(mp_obj_t self_in);
extern mp_obj_t BreakoutBMP280_configure(size_t n_args, const mp_obj_t *pos_args, mp_map_t *kw_args);