picofuse

bme680.h
Go to the documentation of this file.
1 
7 #pragma once
8 
9 #include <picofuse/hw.h>
10 #include <stdbool.h>
11 #include <stdint.h>
12 
14 // CONSTANTS
15 
21 #define DEV_BME680_I2C_ADDR_PRIMARY 0x76
22 
28 #define DEV_BME680_I2C_ADDR_SECONDARY 0x77
29 
36 #define DEV_BME680_CHIP_ID 0x61
37 
43 #define DEV_BME680_REG_CHIP_ID 0xD0u
44 
51 #define DEV_BME680_REG_VARIANT_ID 0xF0u
52 
59 #define DEV_BME680_REG_SOFT_RESET 0xE0u
60 
66 #define DEV_BME680_REG_FIELD0 0x1Du
67 
73 #define DEV_BME680_REG_RES_HEAT0 0x5Au
74 
80 #define DEV_BME680_REG_GAS_WAIT0 0x64u
81 
87 #define DEV_BME680_REG_CTRL_GAS_0 0x70u
88 
94 #define DEV_BME680_REG_CTRL_GAS_1 0x71u
95 
101 #define DEV_BME680_REG_CTRL_HUM 0x72u
102 
108 #define DEV_BME680_REG_CTRL_MEAS 0x74u
109 
115 #define DEV_BME680_REG_CONFIG 0x75u
116 
122 #define DEV_BME680_REG_COEFF1 0x8Au
123 
129 #define DEV_BME680_REG_COEFF2 0xE1u
130 
136 #define DEV_BME680_REG_COEFF3 0x00u
137 
144 #define DEV_BME680_SOFT_RESET_CMD 0xB6u
145 
152 #define DEV_BME680_VARIANT_GAS_LOW 0x00u
153 
160 #define DEV_BME680_VARIANT_GAS_HIGH 0x01u
161 
163 // TYPES
164 
169 typedef struct dev_bme680_t dev_bme680_t;
170 
171 typedef enum {
172  dev_bme680_oversampling_skip = 0,
173  dev_bme680_oversampling_1x = 1,
174  dev_bme680_oversampling_2x = 2,
175  dev_bme680_oversampling_4x = 3,
176  dev_bme680_oversampling_8x = 4,
177  dev_bme680_oversampling_16x = 5,
178 } dev_bme680_oversampling_t;
179 
180 typedef enum {
181  dev_bme680_iir_filter_off = 0,
182  dev_bme680_iir_filter_1 = 1,
183  dev_bme680_iir_filter_3 = 2,
184  dev_bme680_iir_filter_7 = 3,
185  dev_bme680_iir_filter_15 = 4,
186  dev_bme680_iir_filter_31 = 5,
187  dev_bme680_iir_filter_63 = 6,
188  dev_bme680_iir_filter_127 = 7,
189 } dev_bme680_iir_filter_t;
190 
191 typedef enum {
192  dev_bme680_heater_temp_200c = 200,
193  dev_bme680_heater_temp_250c = 250,
194  dev_bme680_heater_temp_300c = 300,
195  dev_bme680_heater_temp_320c = 320,
196  dev_bme680_heater_temp_350c = 350,
197  dev_bme680_heater_temp_400c = 400,
198 } dev_bme680_heater_temp_t;
199 
200 typedef enum {
201  dev_bme680_heater_dur_50ms = 50,
202  dev_bme680_heater_dur_100ms = 100,
203  dev_bme680_heater_dur_120ms = 120,
204  dev_bme680_heater_dur_150ms = 150,
205  dev_bme680_heater_dur_200ms = 200,
206 } dev_bme680_heater_duration_t;
207 
208 typedef enum {
209  dev_bme680_ambient_temp_0c = 0,
210  dev_bme680_ambient_temp_10c = 10,
211  dev_bme680_ambient_temp_20c = 20,
212  dev_bme680_ambient_temp_25c = 25,
213  dev_bme680_ambient_temp_30c = 30,
214  dev_bme680_ambient_temp_35c = 35,
215  dev_bme680_ambient_temp_40c = 40,
216 } dev_bme680_ambient_temp_t;
217 
218 typedef enum {
219  dev_bme680_gas_disabled = 0,
220  dev_bme680_gas_enabled = 1,
221 } dev_bme680_gas_mode_t;
222 
227 typedef struct {
229  float pressure_pa;
230  float humidity_pct;
233 
240 typedef struct {
241  dev_bme680_oversampling_t os_temp;
242  dev_bme680_oversampling_t os_press;
243  dev_bme680_oversampling_t os_hum;
244  dev_bme680_iir_filter_t iir_filter;
245  dev_bme680_heater_temp_t heater_temp_c;
246  dev_bme680_heater_duration_t heater_duration_ms;
247  dev_bme680_ambient_temp_t ambient_temp_c;
248  dev_bme680_gas_mode_t gas_mode;
250 
252 // LIFECYCLE
253 
263 
274  const dev_bme680_config_t *config);
275 
284 void dev_bme680_deinit(dev_bme680_t *bme680);
285 
288 // PROPERTIES
290 
300 uint8_t dev_bme680_chip_id(const dev_bme680_t *bme680);
301 
318 
321 // METHODS
323 
335 bool dev_bme680_read(dev_bme680_t *bme680, dev_bme680_data_t *data);
336 
struct hw_deviceio_t hw_deviceio_t
Opaque device I/O handle.
Definition: deviceio.h:48
BME680 measurement values.
Definition: bme680.h:227
BME680 runtime configuration.
Definition: bme680.h:240
float pressure_pa
Pressure in pascals.
Definition: bme680.h:229
float humidity_pct
Relative humidity in percent.
Definition: bme680.h:230
float temperature_c
Temperature in degrees Celsius.
Definition: bme680.h:228
float gas_resistance_ohms
Gas resistance in ohms.
Definition: bme680.h:231
struct dev_bme680_t dev_bme680_t
Opaque BME680 handle.
Definition: bme680.h:169
Hardware abstraction headers for on-board peripherals.
bool dev_bme680_read(dev_bme680_t *bme680, dev_bme680_data_t *data)
Read sensor data from BME680.
uint32_t dev_bme680_measurement_duration_ms(const dev_bme680_config_t *config)
Calculate how long a measurement takes to complete for a given configuration.
void dev_bme680_default_config(dev_bme680_config_t *config)
Fill a BME680 config struct with safe defaults.
dev_bme680_t * dev_bme680_init(hw_deviceio_t *device, const dev_bme680_config_t *config)
Initialize a BME680 sensor.
void dev_bme680_deinit(dev_bme680_t *bme680)
Deinitialize a BME680 sensor.
uint8_t dev_bme680_chip_id(const dev_bme680_t *bme680)
Get the detected chip ID.