LibDriver BME680
Loading...
Searching...
No Matches
driver_bme680.h
Go to the documentation of this file.
1
36
37#ifndef DRIVER_BME680_H
38#define DRIVER_BME680_H
39
40#include <stdio.h>
41#include <stdint.h>
42#include <string.h>
43
44#ifdef __cplusplus
45extern "C"{
46#endif
47
53
58
62typedef enum
63{
67
76
80typedef enum
81{
82 BME680_ADDRESS_ADO_LOW = (0x76 << 1),
85
98
102typedef enum
103{
107
122
126typedef enum
127{
131
135typedef struct bme680_handle_s
136{
137 uint8_t iic_addr;
138 uint8_t (*iic_init)(void);
139 uint8_t (*iic_deinit)(void);
140 uint8_t (*iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len);
141 uint8_t (*iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len);
142 uint8_t (*spi_init)(void);
143 uint8_t (*spi_deinit)(void);
144 uint8_t (*spi_read)(uint8_t reg, uint8_t *buf, uint16_t len);
145 uint8_t (*spi_write)(uint8_t reg, uint8_t *buf, uint16_t len);
146 void (*delay_ms)(uint32_t ms);
147 void (*debug_print)(const char *const fmt, ...);
148 uint8_t inited;
149 uint8_t iic_spi;
150 uint8_t page;
151 uint16_t par_h1;
152 uint16_t par_h2;
153 int8_t par_h3;
154 int8_t par_h4;
155 int8_t par_h5;
156 uint8_t par_h6;
157 int8_t par_h7;
158 int8_t par_gh1;
159 int16_t par_gh2;
160 int8_t par_gh3;
161 uint16_t par_t1;
162 int16_t par_t2;
163 int8_t par_t3;
164 uint16_t par_p1;
165 int16_t par_p2;
166 int8_t par_p3;
167 int16_t par_p4;
168 int16_t par_p5;
169 int8_t par_p6;
170 int8_t par_p7;
171 int16_t par_p8;
172 int16_t par_p9;
173 uint8_t par_p10;
177 int8_t amb_temp;
178 float t_fine;
180
196
200
207
214#define DRIVER_BME680_LINK_INIT(HANDLE, STRUCTURE) memset(HANDLE, 0, sizeof(STRUCTURE))
215
222#define DRIVER_BME680_LINK_IIC_INIT(HANDLE, FUC) (HANDLE)->iic_init = FUC
223
230#define DRIVER_BME680_LINK_IIC_DEINIT(HANDLE, FUC) (HANDLE)->iic_deinit = FUC
231
238#define DRIVER_BME680_LINK_IIC_READ(HANDLE, FUC) (HANDLE)->iic_read = FUC
239
246#define DRIVER_BME680_LINK_IIC_WRITE(HANDLE, FUC) (HANDLE)->iic_write = FUC
247
254#define DRIVER_BME680_LINK_SPI_INIT(HANDLE, FUC) (HANDLE)->spi_init = FUC
255
262#define DRIVER_BME680_LINK_SPI_DEINIT(HANDLE, FUC) (HANDLE)->spi_deinit = FUC
263
270#define DRIVER_BME680_LINK_SPI_READ(HANDLE, FUC) (HANDLE)->spi_read = FUC
271
278#define DRIVER_BME680_LINK_SPI_WRITE(HANDLE, FUC) (HANDLE)->spi_write = FUC
279
286#define DRIVER_BME680_LINK_DELAY_MS(HANDLE, FUC) (HANDLE)->delay_ms = FUC
287
294#define DRIVER_BME680_LINK_DEBUG_PRINT(HANDLE, FUC) (HANDLE)->debug_print = FUC
295
299
306
315uint8_t bme680_info(bme680_info_t *info);
316
327
337uint8_t bme680_get_interface(bme680_handle_t *handle, bme680_interface_t *interface);
338
348uint8_t bme680_set_addr_pin(bme680_handle_t *handle, bme680_address_t addr_pin);
349
359uint8_t bme680_get_addr_pin(bme680_handle_t *handle, bme680_address_t *addr_pin);
360
374uint8_t bme680_init(bme680_handle_t *handle);
375
387uint8_t bme680_deinit(bme680_handle_t *handle);
388
413uint8_t bme680_read(bme680_handle_t *handle, uint32_t *temperature_raw, float *temperature_c,
414 uint32_t *pressure_raw, float *pressure_pa,
415 uint32_t *humidity_raw, float *humidity_percentage,
416 uint16_t *adc_raw, uint8_t *adc_range, float *ohms, uint8_t *index);
417
436uint8_t bme680_read_temperature_pressure_humidity(bme680_handle_t *handle, uint32_t *temperature_raw, float *temperature_c,
437 uint32_t *pressure_raw, float *pressure_pa,
438 uint32_t *humidity_raw, float *humidity_percentage);
439
454uint8_t bme680_read_pressure(bme680_handle_t *handle, uint32_t *pressure_raw, float *pressure_pa);
455
470uint8_t bme680_read_temperature(bme680_handle_t *handle, uint32_t *temperature_raw, float *temperature_c);
471
486uint8_t bme680_read_humidity(bme680_handle_t *handle, uint32_t *humidity_raw, float *humidity_percentage);
487
506uint8_t bme680_read_gas_resistance(bme680_handle_t *handle, uint16_t *adc_raw, uint8_t *adc_range, float *ohms, uint8_t *index);
507
518uint8_t bme680_soft_reset(bme680_handle_t *handle);
519
532
545
558
571
584
597
609uint8_t bme680_set_mode(bme680_handle_t *handle, bme680_mode_t mode);
610
622uint8_t bme680_get_mode(bme680_handle_t *handle, bme680_mode_t *mode);
623
635uint8_t bme680_set_filter(bme680_handle_t *handle, bme680_filter_t filter);
636
648uint8_t bme680_get_filter(bme680_handle_t *handle, bme680_filter_t *filter);
649
662
675
688
701
714
727
740
752uint8_t bme680_get_gas_measuring_index(bme680_handle_t *handle, uint8_t *index);
753
766
779
791uint8_t bme680_set_heat_off(bme680_handle_t *handle, bme680_bool_t enable);
792
804uint8_t bme680_get_heat_off(bme680_handle_t *handle, bme680_bool_t *enable);
805
817uint8_t bme680_set_run_gas(bme680_handle_t *handle, bme680_bool_t enable);
818
830uint8_t bme680_get_run_gas(bme680_handle_t *handle, bme680_bool_t *enable);
831
844uint8_t bme680_set_convert_index(bme680_handle_t *handle, uint8_t index);
845
857uint8_t bme680_get_convert_index(bme680_handle_t *handle, uint8_t *index);
858
872uint8_t bme680_set_idac_heat(bme680_handle_t *handle, uint8_t index, uint8_t reg);
873
887uint8_t bme680_get_idac_heat(bme680_handle_t *handle, uint8_t index, uint8_t *reg);
888
902uint8_t bme680_set_resistance_heat(bme680_handle_t *handle, uint8_t index, uint8_t reg);
903
917uint8_t bme680_get_resistance_heat(bme680_handle_t *handle, uint8_t index, uint8_t *reg);
918
932uint8_t bme680_set_gas_wait(bme680_handle_t *handle, uint8_t index, uint8_t reg);
933
947uint8_t bme680_get_gas_wait(bme680_handle_t *handle, uint8_t index, uint8_t *reg);
948
960uint8_t bme680_resistance_heat_convert_to_register(bme680_handle_t *handle, float degree_celsius, uint8_t *reg);
961
974uint8_t bme680_gas_wait_convert_to_register(bme680_handle_t *handle, uint16_t ms, uint8_t *reg);
975
987uint8_t bme680_idac_heat_convert_to_register(bme680_handle_t *handle, float ma, uint8_t *reg);
988
1000uint8_t bme680_idac_heat_convert_to_data(bme680_handle_t *handle, uint8_t reg, float *ma);
1001
1005
1012
1026uint8_t bme680_set_reg(bme680_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len);
1027
1041uint8_t bme680_get_reg(bme680_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len);
1042
1046
1050
1051#ifdef __cplusplus
1052}
1053#endif
1054
1055#endif
uint8_t bme680_set_run_gas(bme680_handle_t *handle, bme680_bool_t enable)
enable or disable run gas
uint8_t bme680_gas_wait_convert_to_register(bme680_handle_t *handle, uint16_t ms, uint8_t *reg)
convert the gas wait to the register raw data
uint8_t bme680_set_filter(bme680_handle_t *handle, bme680_filter_t filter)
set filter
uint8_t bme680_read(bme680_handle_t *handle, uint32_t *temperature_raw, float *temperature_c, uint32_t *pressure_raw, float *pressure_pa, uint32_t *humidity_raw, float *humidity_percentage, uint16_t *adc_raw, uint8_t *adc_range, float *ohms, uint8_t *index)
read the temperature pressure humidity and gas resistance
uint8_t bme680_get_measuring_status(bme680_handle_t *handle, bme680_bool_t *enable)
get measuring status
uint8_t bme680_deinit(bme680_handle_t *handle)
close the chip
uint8_t bme680_get_mode(bme680_handle_t *handle, bme680_mode_t *mode)
get mode
uint8_t bme680_get_gas_measuring_index(bme680_handle_t *handle, uint8_t *index)
get gas measuring index
bme680_filter_t
bme680 filter enumeration definition
uint8_t bme680_set_temperature_oversampling(bme680_handle_t *handle, bme680_oversampling_t oversampling)
set temperature oversampling
uint8_t bme680_set_heat_off(bme680_handle_t *handle, bme680_bool_t enable)
enable or disable heat off
bme680_mode_t
bme680 mode enumeration definition
uint8_t bme680_set_interface(bme680_handle_t *handle, bme680_interface_t interface)
set the interface
uint8_t bme680_set_idac_heat(bme680_handle_t *handle, uint8_t index, uint8_t reg)
set idac heat
uint8_t bme680_set_convert_index(bme680_handle_t *handle, uint8_t index)
set convert index
uint8_t bme680_get_spi_wire_3_data_interrupt(bme680_handle_t *handle, bme680_bool_t *enable)
get spi wire3 data interrupt status
uint8_t bme680_read_pressure(bme680_handle_t *handle, uint32_t *pressure_raw, float *pressure_pa)
read the pressure data
uint8_t bme680_set_spi_wire_3_data_interrupt(bme680_handle_t *handle, bme680_bool_t enable)
enable or disable spi wire3 data interrupt
uint8_t bme680_get_temperature_oversampling(bme680_handle_t *handle, bme680_oversampling_t *oversampling)
get temperature oversampling
uint8_t bme680_get_resistance_heat(bme680_handle_t *handle, uint8_t index, uint8_t *reg)
get resistance heat
uint8_t bme680_get_heat_off(bme680_handle_t *handle, bme680_bool_t *enable)
get heat off status
uint8_t bme680_get_interface(bme680_handle_t *handle, bme680_interface_t *interface)
get the interface
bme680_interface_t
bme680 interface enumeration definition
uint8_t bme680_set_resistance_heat(bme680_handle_t *handle, uint8_t index, uint8_t reg)
set resistance heat
uint8_t bme680_set_gas_wait(bme680_handle_t *handle, uint8_t index, uint8_t reg)
set gas wait
uint8_t bme680_info(bme680_info_t *info)
get chip's information
struct bme680_info_s bme680_info_t
bme680 information structure definition
uint8_t bme680_read_temperature(bme680_handle_t *handle, uint32_t *temperature_raw, float *temperature_c)
read the temperature data
uint8_t bme680_get_idac_heat(bme680_handle_t *handle, uint8_t index, uint8_t *reg)
get idac heat
uint8_t bme680_read_humidity(bme680_handle_t *handle, uint32_t *humidity_raw, float *humidity_percentage)
read the humidity data
uint8_t bme680_get_filter(bme680_handle_t *handle, bme680_filter_t *filter)
get filter
uint8_t bme680_resistance_heat_convert_to_register(bme680_handle_t *handle, float degree_celsius, uint8_t *reg)
convert the resistance heat to the register raw data
uint8_t bme680_init(bme680_handle_t *handle)
initialize the chip
uint8_t bme680_get_spi_wire(bme680_handle_t *handle, bme680_spi_wire_t *spi)
get spi wire
bme680_address_t
bme680 address enumeration definition
uint8_t bme680_read_gas_resistance(bme680_handle_t *handle, uint16_t *adc_raw, uint8_t *adc_range, float *ohms, uint8_t *index)
read the gas resistance
uint8_t bme680_soft_reset(bme680_handle_t *handle)
soft reset
bme680_oversampling_t
bme680 oversampling enumeration definition
uint8_t bme680_get_humidity_oversampling(bme680_handle_t *handle, bme680_oversampling_t *oversampling)
get humidity oversampling
uint8_t bme680_get_new_data_status(bme680_handle_t *handle, bme680_bool_t *enable)
get new data status
uint8_t bme680_idac_heat_convert_to_register(bme680_handle_t *handle, float ma, uint8_t *reg)
convert the idac heat to the register raw data
uint8_t bme680_set_spi_wire(bme680_handle_t *handle, bme680_spi_wire_t spi)
set spi wire
bme680_bool_t
bme680 bool enumeration definition
uint8_t bme680_get_gas_measuring_status(bme680_handle_t *handle, bme680_bool_t *enable)
get gas measuring status
uint8_t bme680_set_addr_pin(bme680_handle_t *handle, bme680_address_t addr_pin)
set the iic address pin
uint8_t bme680_set_pressure_oversampling(bme680_handle_t *handle, bme680_oversampling_t oversampling)
set pressure oversampling
uint8_t bme680_set_mode(bme680_handle_t *handle, bme680_mode_t mode)
set mode
struct bme680_handle_s bme680_handle_t
bme680 handle structure definition
uint8_t bme680_get_run_gas(bme680_handle_t *handle, bme680_bool_t *enable)
get run gas status
bme680_spi_wire_t
bme680 spi wire enumeration definition
uint8_t bme680_read_temperature_pressure_humidity(bme680_handle_t *handle, uint32_t *temperature_raw, float *temperature_c, uint32_t *pressure_raw, float *pressure_pa, uint32_t *humidity_raw, float *humidity_percentage)
read the temperature pressure and humidity data
uint8_t bme680_idac_heat_convert_to_data(bme680_handle_t *handle, uint8_t reg, float *ma)
convert the register raw data to idac heat
uint8_t bme680_get_heater_stability_status(bme680_handle_t *handle, bme680_bool_t *enable)
get heater stability status
uint8_t bme680_set_humidity_oversampling(bme680_handle_t *handle, bme680_oversampling_t oversampling)
set humidity oversampling
uint8_t bme680_get_convert_index(bme680_handle_t *handle, uint8_t *index)
get convert index
uint8_t bme680_get_gas_wait(bme680_handle_t *handle, uint8_t index, uint8_t *reg)
get gas wait
uint8_t bme680_get_gas_valid_status(bme680_handle_t *handle, bme680_bool_t *enable)
get gas valid status
uint8_t bme680_get_addr_pin(bme680_handle_t *handle, bme680_address_t *addr_pin)
get the iic address pin
uint8_t bme680_get_pressure_oversampling(bme680_handle_t *handle, bme680_oversampling_t *oversampling)
get pressure oversampling
@ BME680_FILTER_COEFF_63
@ BME680_FILTER_COEFF_1
@ BME680_FILTER_COEFF_31
@ BME680_FILTER_COEFF_3
@ BME680_FILTER_COEFF_7
@ BME680_FILTER_OFF
@ BME680_FILTER_COEFF_15
@ BME680_FILTER_COEFF_127
@ BME680_MODE_FORCED
@ BME680_MODE_SLEEP
@ BME680_INTERFACE_SPI
@ BME680_INTERFACE_IIC
@ BME680_ADDRESS_ADO_LOW
@ BME680_ADDRESS_ADO_HIGH
@ BME680_OVERSAMPLING_x1
@ BME680_OVERSAMPLING_x16
@ BME680_OVERSAMPLING_x4
@ BME680_OVERSAMPLING_x8
@ BME680_OVERSAMPLING_x2
@ BME680_OVERSAMPLING_SKIP
@ BME680_BOOL_TRUE
@ BME680_BOOL_FALSE
@ BME680_SPI_WIRE_3
@ BME680_SPI_WIRE_4
uint8_t bme680_get_reg(bme680_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
get the chip register
uint8_t bme680_set_reg(bme680_handle_t *handle, uint8_t reg, uint8_t *buf, uint16_t len)
set the chip register
bme680 handle structure definition
uint8_t(* spi_init)(void)
void(* delay_ms)(uint32_t ms)
uint8_t(* spi_read)(uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* spi_write)(uint8_t reg, uint8_t *buf, uint16_t len)
void(* debug_print)(const char *const fmt,...)
uint8_t(* iic_init)(void)
uint8_t(* spi_deinit)(void)
uint8_t(* iic_write)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_read)(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
uint8_t(* iic_deinit)(void)
bme680 information structure definition
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]