LibDriver BME688
Loading...
Searching...
No Matches
driver_bme688_read_test.c
Go to the documentation of this file.
1
36
38
39static bme688_handle_t gs_handle;
40
52uint8_t bme688_read_test(bme688_interface_t interface, bme688_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 bme688_info_t info;
69
70 /* link interface function */
83
84 /* get bme688 info */
85 res = bme688_info(&info);
86 if (res != 0)
87 {
88 bme688_interface_debug_print("bme688: get info failed.\n");
89
90 return 1;
91 }
92 else
93 {
94 /* print bme688 */
95 bme688_interface_debug_print("bme688: chip is %s.\n", info.chip_name);
96 bme688_interface_debug_print("bme688: manufacturer is %s.\n", info.manufacturer_name);
97 bme688_interface_debug_print("bme688: interface is %s.\n", info.interface);
98 bme688_interface_debug_print("bme688: driver version is %d.%d.\n", info.driver_version / 1000, (info.driver_version % 1000) / 100);
99 bme688_interface_debug_print("bme688: min supply voltage is %0.1fV.\n", info.supply_voltage_min_v);
100 bme688_interface_debug_print("bme688: max supply voltage is %0.1fV.\n", info.supply_voltage_max_v);
101 bme688_interface_debug_print("bme688: max current is %0.2fmA.\n", info.max_current_ma);
102 bme688_interface_debug_print("bme688: max temperature is %0.1fC.\n", info.temperature_max);
103 bme688_interface_debug_print("bme688: min temperature is %0.1fC.\n", info.temperature_min);
104 }
105
106 /* start read test */
107 bme688_interface_debug_print("bme688: start read test.\n");
108
109 /* set interface */
110 res = bme688_set_interface(&gs_handle, interface);
111 if (res != 0)
112 {
113 bme688_interface_debug_print("bme688: set interface failed.\n");
114
115 return 1;
116 }
117
118 /* set addr pin */
119 res = bme688_set_addr_pin(&gs_handle, addr_pin);
120 if (res != 0)
121 {
122 bme688_interface_debug_print("bme688: set addr pin failed.\n");
123
124 return 1;
125 }
126
127 /* init */
128 res = bme688_init(&gs_handle);
129 if (res != 0)
130 {
131 bme688_interface_debug_print("bme688: init failed.\n");
132
133 return 1;
134 }
135
136 /* set spi wire4 */
137 res = bme688_set_spi_wire(&gs_handle, BME688_SPI_WIRE_4);
138 if (res != 0)
139 {
140 bme688_interface_debug_print("bme688: set spi wire failed.\n");
141 (void)bme688_deinit(&gs_handle);
142
143 return 1;
144 }
145
146 /* set humidity oversampling x1 */
148 if (res != 0)
149 {
150 bme688_interface_debug_print("bme688: set humidity oversampling failed.\n");
151 (void)bme688_deinit(&gs_handle);
152
153 return 1;
154 }
155
156 /* set temperature oversampling x2 */
158 if (res != 0)
159 {
160 bme688_interface_debug_print("bme688: set temperature oversampling failed.\n");
161 (void)bme688_deinit(&gs_handle);
162
163 return 1;
164 }
165
166 /* set pressure oversampling x16 */
168 if (res != 0)
169 {
170 bme688_interface_debug_print("bme688: set pressure oversampling failed.\n");
171 (void)bme688_deinit(&gs_handle);
172
173 return 1;
174 }
175
176 /* set filter 15 */
177 res = bme688_set_filter(&gs_handle, BME688_FILTER_COEFF_15);
178 if (res != 0)
179 {
180 bme688_interface_debug_print("bme688: set filter failed.\n");
181 (void)bme688_deinit(&gs_handle);
182
183 return 1;
184 }
185
186 /* set sleep mode */
187 res = bme688_set_mode(&gs_handle, BME688_MODE_SLEEP);
188 if (res != 0)
189 {
190 bme688_interface_debug_print("bme688: set mode failed.\n");
191 (void)bme688_deinit(&gs_handle);
192
193 return 1;
194 }
195
196 /* 5.0mA */
197 res = bme688_idac_heater_convert_to_register(&gs_handle, 5.0f, &reg);
198 if (res != 0)
199 {
200 bme688_interface_debug_print("bme688: idac heat convert to register failed.\n");
201 (void)bme688_deinit(&gs_handle);
202
203 return 1;
204 }
205
206 /* set idac heater */
207 res = bme688_set_idac_heater(&gs_handle, index, reg);
208 if (res != 0)
209 {
210 bme688_interface_debug_print("bme688: set idac heat failed.\n");
211 (void)bme688_deinit(&gs_handle);
212
213 return 1;
214 }
215
216 /* 200C */
217 res = bme688_resistance_heater_convert_to_register(&gs_handle, 200.0f, &reg);
218 if (res != 0)
219 {
220 bme688_interface_debug_print("bme688: resistance heat convert to register failed.\n");
221 (void)bme688_deinit(&gs_handle);
222
223 return 1;
224 }
225
226 /* set resistance heater */
227 res = bme688_set_resistance_heater(&gs_handle, index, reg);
228 if (res != 0)
229 {
230 bme688_interface_debug_print("bme688: set resistance heat failed.\n");
231 (void)bme688_deinit(&gs_handle);
232
233 return 1;
234 }
235
236 /* 150ms */
237 res = bme688_gas_wait_convert_to_register(&gs_handle, 150, &reg);
238 if (res != 0)
239 {
240 bme688_interface_debug_print("bme688: gas wait convert to register failed.\n");
241 (void)bme688_deinit(&gs_handle);
242
243 return 1;
244 }
245 res = bme688_set_gas_wait(&gs_handle, index, reg);
246 if (res != 0)
247 {
248 bme688_interface_debug_print("bme688: set gas wait failed.\n");
249 (void)bme688_deinit(&gs_handle);
250
251 return 1;
252 }
253
254 /* set convert index */
255 if (index == 0)
256 {
258
259 }
260 else if (index == 1)
261 {
263
264 }
265 else if (index == 2)
266 {
268
269 }
270 else if (index == 3)
271 {
273
274 }
275 else if (index == 4)
276 {
278
279 }
280 else if (index == 5)
281 {
283
284 }
285 else if (index == 6)
286 {
288
289 }
290 else if (index == 7)
291 {
293
294 }
295 else if (index == 8)
296 {
298
299 }
300 else if (index == 9)
301 {
303
304 }
305 else
306 {
308 }
309
310 /* set heater profile */
311 res = bme688_set_heater_profile(&gs_handle, profile);
312 if (res != 0)
313 {
314 bme688_interface_debug_print("bme688: set heater profile failed.\n");
315 (void)bme688_deinit(&gs_handle);
316
317 return 1;
318 }
319
320 /* disable heater off */
321 res = bme688_set_heater_off(&gs_handle, BME688_BOOL_FALSE);
322 if (res != 0)
323 {
324 bme688_interface_debug_print("bme688: set heat off failed.\n");
325 (void)bme688_deinit(&gs_handle);
326
327 return 1;
328 }
329
330 /* enable run gas */
331 res = bme688_set_run_gas(&gs_handle, BME688_BOOL_TRUE);
332 if (res != 0)
333 {
334 bme688_interface_debug_print("bme688: set run gas failed.\n");
335 (void)bme688_deinit(&gs_handle);
336
337 return 1;
338 }
339
340 /* delay 1000ms */
342
343 /* loop */
344 for (i = 0; i < times; i++)
345 {
346 /* read */
347 res = bme688_read(&gs_handle, BME688_SECTION_0,
348 &temperature_raw, &temperature_c,
349 &pressure_raw, &pressure_pa,
350 &humidity_raw, &humidity_percentage,
351 &adc_raw, &adc_range, &ohms, &index_output);
352 if (res != 0)
353 {
354 bme688_interface_debug_print("bme688: read failed.\n");
355 (void)bme688_deinit(&gs_handle);
356
357 return 1;
358 }
359
360 /* delay 1000ms */
362
363 /* output */
364 bme688_interface_debug_print("bme688: temperature is %0.2fC.\n", temperature_c);
365 bme688_interface_debug_print("bme688: pressure is %0.2fpa.\n", pressure_pa);
366 bme688_interface_debug_print("bme688: humidity is %0.2f%%.\n", humidity_percentage);
367 bme688_interface_debug_print("bme688: gas index is %d.\n", index_output);
368 bme688_interface_debug_print("bme688: gas resistance is %0.2fohms.\n", ohms);
369 }
370
371 /* finish read test */
372 bme688_interface_debug_print("bme688: finish read test.\n");
373 (void)bme688_set_heater_off(&gs_handle, BME688_BOOL_TRUE);
374 (void)bme688_deinit(&gs_handle);
375
376 return 0;
377}
driver bme688 read test header file
uint8_t bme688_set_filter(bme688_handle_t *handle, bme688_filter_t filter)
set filter
uint8_t bme688_set_interface(bme688_handle_t *handle, bme688_interface_t interface)
set the interface
bme688_address_t
bme688 address enumeration definition
uint8_t bme688_set_addr_pin(bme688_handle_t *handle, bme688_address_t addr_pin)
set the iic address pin
uint8_t bme688_set_heater_profile(bme688_handle_t *handle, bme688_heater_profile_t profile)
set heater profile
uint8_t bme688_read(bme688_handle_t *handle, bme688_section_t section, 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
bme688_heater_profile_t
bme688 heater profile enumeration definition
uint8_t bme688_idac_heater_convert_to_register(bme688_handle_t *handle, float ma, uint8_t *reg)
convert the idac heater to the register raw data
uint8_t bme688_set_temperature_oversampling(bme688_handle_t *handle, bme688_oversampling_t oversampling)
set temperature oversampling
uint8_t bme688_set_mode(bme688_handle_t *handle, bme688_mode_t mode)
set mode
uint8_t bme688_set_run_gas(bme688_handle_t *handle, bme688_bool_t enable)
enable or disable run gas
uint8_t bme688_set_spi_wire(bme688_handle_t *handle, bme688_spi_wire_t spi)
set spi wire
uint8_t bme688_set_idac_heater(bme688_handle_t *handle, uint8_t index, uint8_t reg)
set idac heater
uint8_t bme688_init(bme688_handle_t *handle)
initialize the chip
uint8_t bme688_info(bme688_info_t *info)
get chip's information
uint8_t bme688_gas_wait_convert_to_register(bme688_handle_t *handle, uint16_t ms, uint8_t *reg)
convert the gas wait to the register raw data
struct bme688_info_s bme688_info_t
bme688 information structure definition
uint8_t bme688_set_gas_wait(bme688_handle_t *handle, uint8_t index, uint8_t reg)
set gas wait
uint8_t bme688_resistance_heater_convert_to_register(bme688_handle_t *handle, float degree_celsius, uint8_t *reg)
convert the resistance heater to the register raw data
uint8_t bme688_deinit(bme688_handle_t *handle)
close the chip
uint8_t bme688_set_resistance_heater(bme688_handle_t *handle, uint8_t index, uint8_t reg)
set resistance heater
uint8_t bme688_set_heater_off(bme688_handle_t *handle, bme688_bool_t enable)
enable or disable heater off
bme688_interface_t
bme688 interface enumeration definition
uint8_t bme688_set_humidity_oversampling(bme688_handle_t *handle, bme688_oversampling_t oversampling)
set humidity oversampling
uint8_t bme688_set_pressure_oversampling(bme688_handle_t *handle, bme688_oversampling_t oversampling)
set pressure oversampling
struct bme688_handle_s bme688_handle_t
bme688 handle structure definition
@ BME688_MODE_SLEEP
@ BME688_HEATER_PROFILE_FORCED_STEP_8_PARALLEL_STEP_0_7
@ BME688_HEATER_PROFILE_FORCED_STEP_2_PARALLEL_STEP_0_1
@ BME688_HEATER_PROFILE_FORCED_STEP_1_PARALLEL_STEP_0
@ BME688_HEATER_PROFILE_FORCED_STEP_6_PARALLEL_STEP_0_5
@ BME688_HEATER_PROFILE_FORCED_STEP_4_PARALLEL_STEP_0_3
@ BME688_HEATER_PROFILE_FORCED_STEP_7_PARALLEL_STEP_0_6
@ BME688_HEATER_PROFILE_FORCED_STEP_3_PARALLEL_STEP_0_2
@ BME688_HEATER_PROFILE_FORCED_STEP_5_PARALLEL_STEP_0_4
@ BME688_HEATER_PROFILE_FORCED_STEP_9_PARALLEL_STEP_0_8
@ BME688_HEATER_PROFILE_FORCED_STEP_0_PARALLEL_NO_STEP
@ BME688_FILTER_COEFF_15
@ BME688_SECTION_0
@ BME688_BOOL_TRUE
@ BME688_BOOL_FALSE
@ BME688_OVERSAMPLING_x2
@ BME688_OVERSAMPLING_x1
@ BME688_OVERSAMPLING_x16
@ BME688_SPI_WIRE_4
uint8_t bme688_interface_spi_write(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus write
uint8_t bme688_interface_iic_write(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus write
void bme688_interface_receive_callback(uint8_t status, bme688_parallel_data_t *data, uint8_t len)
interface receive callback
uint8_t bme688_interface_iic_read(uint8_t addr, uint8_t reg, uint8_t *buf, uint16_t len)
interface iic bus read
void bme688_interface_delay_ms(uint32_t ms)
interface delay ms
uint8_t bme688_interface_spi_read(uint8_t reg, uint8_t *buf, uint16_t len)
interface spi bus read
void bme688_interface_debug_print(const char *const fmt,...)
interface print format data
uint8_t bme688_interface_spi_deinit(void)
interface spi bus deinit
uint8_t bme688_interface_spi_init(void)
interface spi bus init
uint8_t bme688_interface_iic_deinit(void)
interface iic bus deinit
uint8_t bme688_interface_iic_init(void)
interface iic bus init
uint8_t bme688_read_test(bme688_interface_t interface, bme688_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]