09-07-2022 06:47 PM
Hello everyone,
Currently, I am working with an IoT application on the board Nucleo-WL55JC1 with the sensor BME688. The example I am using is LoRaWAN_End_Node downloaded from STM32Cube MX.
What I did: I initialized the the BME688 and set up some configuration after the initialization of MX_LoRaWAN_Init(). I, then, set up some configuration outside the while loop. I "extern"ed the variables below so that I can used them elsewhere:
struct bme68x_dev bme;
struct bme68x_conf conf;
struct bme68x_heatr_conf heatr_conf;
Order of initialization are below:
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_LoRaWAN_Init();
MX_I2C3_Init();
/* USER CODE BEGIN 2 */
int8_t rslt = bme68x_interface_init(&bme, BME68X_I2C_INTF);
//bme68x_check_rslt("bme68x_interface_init", rslt);
// UART_Transmit_IT("/init\n");
rslt = bme68x_init(&bme);
//Set up the measurement
conf.filter = BME68X_FILTER_OFF;
conf.odr = BME68X_ODR_NONE;
conf.os_hum = BME68X_OS_16X;
conf.os_pres = BME68X_OS_1X;
conf.os_temp = BME68X_OS_2X;
rslt = bme68x_set_conf(&conf, &bme);
heatr_conf.enable = BME68X_ENABLE;
heatr_conf.heatr_temp = 300;
heatr_conf.heatr_dur = 100;
rslt = bme68x_set_heatr_conf(BME68X_SEQUENTIAL_MODE, &heatr_conf, &bme);
rslt = bme68x_set_op_mode(BME68X_SEQUENTIAL_MODE, &bme);
For obtaining the temperature/pressure/humidity/gas level, I got the data of the sensor in the function SendTxData in the file lora_app.c:
struct bme68x_data data;
uint32_t del_period;
uint8_t n_fields;
#ifdef CAYENNE_LPP
uint8_t channel = 0;
#else
uint16_t pressure = 0;
int16_t temperature = 0;
uint16_t humidity = 0;
uint32_t i = 0;
int32_t latitude = 0;
int32_t longitude = 0;
uint16_t altitudeGps = 0;
#endif /* CAYENNE_LPP */
//EnvSensors_Read(&sensor_data);
del_period = bme68x_get_meas_dur(BME68X_SEQUENTIAL_MODE, &conf, &bme) + (heatr_conf.heatr_dur * 1000);
bme.delay_us(del_period, bme.intf_ptr);
int8_t rslt = bme68x_get_data(BME68X_SEQUENTIAL_MODE, &data, &n_fields, &bme);
float senTemp = data.temperature;
float senPres = data.pressure;
float senHumid = data.humidity;
The problem: as in the code, I set the sensor to work in sequential mode, however, the whole setup stopped working after the first measurement. The same thing happened when I set the sensor to work in parallel mode. Sleep mode worked okay and for Forced mode, I could achieve the first measurement before the sensor turned to sleep mode (correct).
(the end device started the first measurement and stopped at that point).
Question: Where should I start tracking the problem or how do I fix this problem?
I hope to have responses from you.
Thank you very much, Huy Nguyen.
11-24-2022 02:53 AM
Hi huytyskland,
One task is enough for BME688 sensor data read. You could refer previous attached example code on STM32 which run same platform with your's.