bme680.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2019 Mesotic SAS
3  * 2020 Gunar Schorcht
4  *
5  * This file is subject to the terms and conditions of the GNU Lesser
6  * General Public License v2.1. See the file LICENSE in the top level
7  * directory for more details.
8  */
9 
10 #pragma once
11 
110 #include "periph/i2c.h"
111 #include "periph/spi.h"
112 
113 #ifdef MODULE_BME680_FP
114 #define BME680_FLOAT_POINT_COMPENSATION
115 #endif
116 
117 #include "bme680_hal.h"
118 #include "bme680_internal.h"
119 
120 #ifdef __cplusplus
121 extern "C" {
122 #endif
123 
127 #define BME680_I2C_ADDR_1 (0x76)
128 
132 #define BME680_I2C_ADDR_2 (0x77)
133 
138 #define BME680_SENSOR(d) (*((struct bme680_dev *)d))
139 
143 enum {
149 };
150 
151 #ifdef DOXYGEN
155 typedef struct bme680_field_data {
156  uint8_t status;
160  uint8_t gas_index;
161  uint8_t meas_index;
162 #ifndef MODULE_BME680_FP
163  int16_t temperature;
164  uint32_t pressure;
165  uint32_t humidity;
166  uint32_t gas_resistance;
167 #else /* MODULE_BME680_FP */
168  float temperature;
169  float pressure;
170  float humidity;
171  float gas_resistance;
172 #endif /* MODULE_BME680_FP */
173 };
174 
175 #endif /* DOXYGEN */
176 
181 
186 typedef struct bme680_dev bme680_dev_t;
187 
191 typedef struct {
193  uint8_t addr;
195 
199 typedef struct {
200  spi_t dev;
201  gpio_t nss_pin;
203 
207 typedef union {
210 } bme680_intf_t;
211 
215 typedef struct {
216  uint8_t ifsel;
217  uint8_t temp_os;
218  uint8_t hum_os;
219  uint8_t pres_os;
220  uint8_t filter;
221  uint8_t gas_measure;
222  uint16_t heater_dur;
223  uint16_t heater_temp;
224  uint8_t power_mode;
225  uint8_t settings;
228 
232 typedef struct {
233  struct bme680_dev sensor;
235 } bme680_t;
236 
240 extern bme680_t *bme680_devs[];
241 
245 extern unsigned int bme680_devs_numof;
246 
256 int bme680_init(bme680_t *dev, const bme680_params_t *params);
257 
272 
287 
304 
317 int bme680_set_ambient_temp(bme680_t* dev, int8_t temp);
318 
319 #ifdef __cplusplus
320 }
321 #endif
322 
Abstraction layer for RIOT adaption.
int bme680_init(bme680_t *dev, const bme680_params_t *params)
Initialize the BME680 sensor.
unsigned int bme680_devs_numof
Number of initialized BME680 sensor devices in bme680_devs.
int bme680_force_measurement(bme680_t *dev)
Force a single TPHG measurement cycle.
bme680_t * bme680_devs[]
References to BME680 sensor devices used by the HAL functions.
int bme680_get_duration(bme680_t *dev)
Duration one THPG measurement cycle.
int bme680_set_ambient_temp(bme680_t *dev, int8_t temp)
Set the ambient temperature.
struct bme680_dev bme680_dev_t
Shortcut type definition for BME680 sensor device structure.
Definition: bme680.h:186
int bme680_get_data(bme680_t *dev, bme680_field_data_t *data)
Get results of a TPHG measurement.
@ BME680_NO_NEW_DATA
No new data.
Definition: bme680.h:148
@ BME680_COM_FAILED
Communication with the device failed.
Definition: bme680.h:145
@ BME680_NULL_PTR
NULL pointer check failed.
Definition: bme680.h:144
@ BME680_INVALID
Invalid value or length.
Definition: bme680.h:147
@ BME680_NO_DEV
Device doesn't exist.
Definition: bme680.h:146
uint_fast8_t i2c_t
Default i2c_t type definition.
Definition: i2c.h:144
Low-level I2C peripheral driver interface definition.
Low-level SPI peripheral driver interface definition.
BME680 sensor field data.
Definition: bme680.h:155
uint32_t gas_resistance
Gas resistance in ohms.
Definition: bme680.h:166
int16_t temperature
Temperature in degree Celsius x 100.
Definition: bme680.h:163
uint32_t humidity
Relative humidity in percent x 1000.
Definition: bme680.h:165
uint8_t meas_index
Measurement index.
Definition: bme680.h:161
uint8_t gas_index
Index of used heater profile.
Definition: bme680.h:160
uint8_t status
Status for new data, gas measurement valid and heater stable.
Definition: bme680.h:156
uint32_t pressure
Pressure in Pascal.
Definition: bme680.h:164
BME680 I2C parameters.
Definition: bme680.h:191
uint8_t addr
I2C address.
Definition: bme680.h:193
i2c_t dev
I2C device which is used.
Definition: bme680.h:192
BME680 SPI parameters.
Definition: bme680.h:199
gpio_t nss_pin
Chip Select pin.
Definition: bme680.h:201
spi_t dev
SPI device which is used.
Definition: bme680.h:200
BME680 device initialization parameters.
Definition: bme680.h:215
uint8_t ifsel
Interface selection.
Definition: bme680.h:216
bme680_intf_t intf
Hardware interface parameters.
Definition: bme680.h:226
uint8_t gas_measure
Enable gas measurement.
Definition: bme680.h:221
uint8_t pres_os
Pressure oversampling.
Definition: bme680.h:219
uint8_t hum_os
Humidity oversampling.
Definition: bme680.h:218
uint16_t heater_dur
Heater duration in ms.
Definition: bme680.h:222
uint8_t power_mode
Power mode (sleep or forced)
Definition: bme680.h:224
uint16_t heater_temp
Heater temperature in °C.
Definition: bme680.h:223
uint8_t temp_os
Temperature oversampling.
Definition: bme680.h:217
uint8_t settings
Settings used.
Definition: bme680.h:225
uint8_t filter
IIR filter coefficient.
Definition: bme680.h:220
BME680 device descriptor.
Definition: bme680.h:232
bme680_intf_t intf
Device interface.
Definition: bme680.h:234
BME680 Hardware interface parameters union.
Definition: bme680.h:207
bme680_intf_spi_t spi
SPI specific interface parameters.
Definition: bme680.h:209
bme680_intf_i2c_t i2c
I2C specific interface parameters.
Definition: bme680.h:208