LibDriver BME680
Loading...
Searching...
No Matches
driver_bme680_read_test.c
Go to the documentation of this file.
1
36
38
39static bme680_handle_t gs_handle;
40
52uint8_t bme680_read_test(bme680_interface_t interface, bme680_address_t addr_pin, uint8_t index, uint32_t times)
53{
54 uint8_t res;
55 uint8_t reg;
56 uint32_t i;
57 uint32_t temperature_raw;
58 uint32_t pressure_raw;
59 uint32_t humidity_raw;
60 float temperature_c;
61 float pressure_pa;
62 float humidity_percentage;
63 uint16_t adc_raw;
64 uint8_t adc_range;
65 float ohms;
66 uint8_t index_output;
67 bme680_info_t info;
68
69 /* link interface function */
81
82 /* get bme680 info */
83 res = bme680_info(&info);
84 if (res != 0)
85 {
86 bme680_interface_debug_print("bme680: get info failed.\n");
87
88 return 1;
89 }
90 else
91 {
92 /* print bme680 */
93 bme680_interface_debug_print("bme680: chip is %s.\n", info.chip_name);
94 bme680_interface_debug_print("bme680: manufacturer is %s.\n", info.manufacturer_name);
95 bme680_interface_debug_print("bme680: interface is %s.\n", info.interface);
96 bme680_interface_debug_print("bme680: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
97 bme680_interface_debug_print("bme680: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
98 bme680_interface_debug_print("bme680: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
99 bme680_interface_debug_print("bme680: max current is %0.2fmA.\n", info.max_current_ma);
100 bme680_interface_debug_print("bme680: max temperature is %0.1fC.\n", info.temperature_max);
101 bme680_interface_debug_print("bme680: min temperature is %0.1fC.\n", info.temperature_min);
102 }
103
104 /* start read test */
105 bme680_interface_debug_print("bme680: start read test.\n");
106
107 /* set interface */
108 res = bme680_set_interface(&gs_handle, interface);
109 if (res != 0)
110 {
111 bme680_interface_debug_print("bme680: set interface failed.\n");
112
113 return 1;
114 }
115
116 /* set addr pin */
117 res = bme680_set_addr_pin(&gs_handle, addr_pin);
118 if (res != 0)
119 {
120 bme680_interface_debug_print("bme680: set addr pin failed.\n");
121
122 return 1;
123 }
124
125 /* init */
126 res = bme680_init(&gs_handle);
127 if (res != 0)
128 {
129 bme680_interface_debug_print("bme680: init failed.\n");
130
131 return 1;
132 }
133
134 /* set spi wire4 */
135 res = bme680_set_spi_wire(&gs_handle, BME680_SPI_WIRE_4);
136 if (res != 0)
137 {
138 bme680_interface_debug_print("bme680: set spi wire failed.\n");
139 (void)bme680_deinit(&gs_handle);
140
141 return 1;
142 }
143
144 /* set humidity oversampling x1 */
146 if (res != 0)
147 {
148 bme680_interface_debug_print("bme680: set humidity oversampling failed.\n");
149 (void)bme680_deinit(&gs_handle);
150
151 return 1;
152 }
153
154 /* set temperature oversampling x2 */
156 if (res != 0)
157 {
158 bme680_interface_debug_print("bme680: set temperature oversampling failed.\n");
159 (void)bme680_deinit(&gs_handle);
160
161 return 1;
162 }
163
164 /* set pressure oversampling x16 */
166 if (res != 0)
167 {
168 bme680_interface_debug_print("bme680: set pressure oversampling failed.\n");
169 (void)bme680_deinit(&gs_handle);
170
171 return 1;
172 }
173
174 /* set filter 15 */
175 res = bme680_set_filter(&gs_handle, BME680_FILTER_COEFF_15);
176 if (res != 0)
177 {
178 bme680_interface_debug_print("bme680: set filter failed.\n");
179 (void)bme680_deinit(&gs_handle);
180
181 return 1;
182 }
183
184 /* set sleep mode */
185 res = bme680_set_mode(&gs_handle, BME680_MODE_SLEEP);
186 if (res != 0)
187 {
188 bme680_interface_debug_print("bme680: set mode failed.\n");
189 (void)bme680_deinit(&gs_handle);
190
191 return 1;
192 }
193
194 /* 5.0mA */
195 res = bme680_idac_heat_convert_to_register(&gs_handle, 5.0f, &reg);
196 if (res != 0)
197 {
198 bme680_interface_debug_print("bme680: idac heat convert to register failed.\n");
199 (void)bme680_deinit(&gs_handle);
200
201 return 1;
202 }
203
204 /* set idac heat */
205 res = bme680_set_idac_heat(&gs_handle, index, reg);
206 if (res != 0)
207 {
208 bme680_interface_debug_print("bme680: set idac heat failed.\n");
209 (void)bme680_deinit(&gs_handle);
210
211 return 1;
212 }
213
214 /* 200C */
215 res = bme680_resistance_heat_convert_to_register(&gs_handle, 200.0f, &reg);
216 if (res != 0)
217 {
218 bme680_interface_debug_print("bme680: resistance heat convert to register failed.\n");
219 (void)bme680_deinit(&gs_handle);
220
221 return 1;
222 }
223
224 /* set resistance heat */
225 res = bme680_set_resistance_heat(&gs_handle, index, reg);
226 if (res != 0)
227 {
228 bme680_interface_debug_print("bme680: set resistance heat failed.\n");
229 (void)bme680_deinit(&gs_handle);
230
231 return 1;
232 }
233
234 /* 150ms */
235 res = bme680_gas_wait_convert_to_register(&gs_handle, 150, &reg);
236 if (res != 0)
237 {
238 bme680_interface_debug_print("bme680: gas wait convert to register failed.\n");
239 (void)bme680_deinit(&gs_handle);
240
241 return 1;
242 }
243 res = bme680_set_gas_wait(&gs_handle, index, reg);
244 if (res != 0)
245 {
246 bme680_interface_debug_print("bme680: set gas wait failed.\n");
247 (void)bme680_deinit(&gs_handle);
248
249 return 1;
250 }
251
252 /* set convert index */
253 res = bme680_set_convert_index(&gs_handle, index);
254 if (res != 0)
255 {
256 bme680_interface_debug_print("bme680: set convert index failed.\n");
257 (void)bme680_deinit(&gs_handle);
258
259 return 1;
260 }
261
262 /* disable heat off */
263 res = bme680_set_heat_off(&gs_handle, BME680_BOOL_FALSE);
264 if (res != 0)
265 {
266 bme680_interface_debug_print("bme680: set heat off failed.\n");
267 (void)bme680_deinit(&gs_handle);
268
269 return 1;
270 }
271
272 /* enable run gas */
273 res = bme680_set_run_gas(&gs_handle, BME680_BOOL_TRUE);
274 if (res != 0)
275 {
276 bme680_interface_debug_print("bme680: set run gas failed.\n");
277 (void)bme680_deinit(&gs_handle);
278
279 return 1;
280 }
281
282 /* delay 1000ms */
284
285 /* loop */
286 for (i = 0; i < times; i++)
287 {
288 /* read */
289 res = bme680_read(&gs_handle, &temperature_raw, &temperature_c,
290 &pressure_raw, &pressure_pa,
291 &humidity_raw, &humidity_percentage,
292 &adc_raw, &adc_range, &ohms, &index_output);
293 if (res != 0)
294 {
295 bme680_interface_debug_print("bme680: read failed.\n");
296 (void)bme680_deinit(&gs_handle);
297
298 return 1;
299 }
300
301 /* delay 1000ms */
303
304 /* output */
305 bme680_interface_debug_print("bme680: temperature is %0.2fC.\n", temperature_c);
306 bme680_interface_debug_print("bme680: pressure is %0.2fpa.\n", pressure_pa);
307 bme680_interface_debug_print("bme680: humidity is %0.2f%%.\n", humidity_percentage);
308 bme680_interface_debug_print("bme680: gas index is %d.\n", index_output);
309 bme680_interface_debug_print("bme680: gas resistance is %0.2fohms.\n", ohms);
310 }
311
312 /* finish read test */
313 bme680_interface_debug_print("bme680: finish read test.\n");
314 (void)bme680_set_heat_off(&gs_handle, BME680_BOOL_TRUE);
315 (void)bme680_deinit(&gs_handle);
316
317 return 0;
318}
driver bme680 read test header file
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_deinit(bme680_handle_t *handle)
close the chip
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
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
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_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
bme680_address_t
bme680 address enumeration definition
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
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_set_humidity_oversampling(bme680_handle_t *handle, bme680_oversampling_t oversampling)
set humidity oversampling
@ BME680_FILTER_COEFF_15
@ BME680_MODE_SLEEP
@ BME680_OVERSAMPLING_x1
@ BME680_OVERSAMPLING_x16
@ BME680_OVERSAMPLING_x2
@ BME680_BOOL_TRUE
@ BME680_BOOL_FALSE
@ BME680_SPI_WIRE_4
uint8_t bme680_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
void bme680_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t bme680_interface_iic_init(void)
interface iic bus init
uint8_t bme680_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t bme680_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void bme680_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t bme680_interface_spi_init(void)
interface spi bus init
uint8_t bme680_interface_iic_deinit(void)
interface iic bus deinit
uint8_t bme680_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
uint8_t bme680_interface_spi_deinit(void)
interface spi bus deinit
uint8_t bme680_read_test(bme680_interface_t interface, bme680_address_t addr_pin, uint8_t index, uint32_t times)
read test
float supply_voltage_max_v
uint32_t driver_version
char manufacturer_name[32]
float supply_voltage_min_v
char chip_name[32]