From 25a97fbbcc92352210c177904616b32d834f3deb Mon Sep 17 00:00:00 2001 From: Klaus K Wilting Date: Sun, 6 Jan 2019 19:41:42 +0100 Subject: [PATCH] BME680 fixes --- src/bme680mems.cpp | 45 ++++++++++++++++++++++----------------------- src/cyclic.cpp | 35 ++++++++++++++++++++--------------- src/main.cpp | 3 +-- src/wifiscan.cpp | 2 +- 4 files changed, 44 insertions(+), 41 deletions(-) diff --git a/src/bme680mems.cpp b/src/bme680mems.cpp index f888eb4e..d8803ead 100644 --- a/src/bme680mems.cpp +++ b/src/bme680mems.cpp @@ -8,8 +8,6 @@ static const char TAG[] = "main"; bmeStatus_t bme_status; TaskHandle_t BmeTask; -Bsec iaqSensor; - bsec_virtual_sensor_t sensorList[10] = { BSEC_OUTPUT_RAW_TEMPERATURE, BSEC_OUTPUT_RAW_PRESSURE, @@ -23,8 +21,11 @@ bsec_virtual_sensor_t sensorList[10] = { BSEC_OUTPUT_SENSOR_HEAT_COMPENSATED_HUMIDITY, }; +uint8_t bsecstate_buffer[BSEC_MAX_STATE_BLOB_SIZE] = {0}; uint16_t stateUpdateCounter = 0; +Bsec iaqSensor; + // initialize BME680 sensor int bme_init(void) { @@ -105,25 +106,25 @@ void bme_loop(void *pvParameters) { configASSERT(((uint32_t)pvParameters) == 1); // FreeRTOS check #ifdef HAS_BME - while (checkIaqSensorStatus()) { + // block i2c bus access + while (xSemaphoreTake(I2Caccess, portMAX_DELAY) == pdTRUE) { - // block i2c bus access - if (xSemaphoreTake(I2Caccess, (DISPLAYREFRESH_MS / portTICK_PERIOD_MS)) == - pdTRUE) { - if (iaqSensor.run()) { // If new data is available - bme_status.raw_temperature = iaqSensor.rawTemperature; - bme_status.raw_humidity = iaqSensor.rawHumidity; - bme_status.temperature = iaqSensor.temperature; - bme_status.humidity = iaqSensor.humidity; - bme_status.pressure = - (iaqSensor.pressure / 100.0); // conversion Pa -> hPa - bme_status.iaq = iaqSensor.iaqEstimate; - bme_status.iaq_accuracy = iaqSensor.iaqAccuracy; - bme_status.gas = iaqSensor.gasResistance; - } - xSemaphoreGive(I2Caccess); // release i2c bus access + if (iaqSensor.run()) { // If new data is available + iaqSensor.run(); + bme_status.raw_temperature = iaqSensor.rawTemperature; + bme_status.raw_humidity = iaqSensor.rawHumidity; + bme_status.temperature = iaqSensor.temperature; + bme_status.humidity = iaqSensor.humidity; + bme_status.pressure = + (iaqSensor.pressure / 100.0); // conversion Pa -> hPa + bme_status.iaq = iaqSensor.iaqEstimate; + bme_status.iaq_accuracy = iaqSensor.iaqAccuracy; + bme_status.gas = iaqSensor.gasResistance; + updateState(); } - } + xSemaphoreGive(I2Caccess); // release i2c bus access + + } // while #endif ESP_LOGE(TAG, "BME task ended"); vTaskDelete(BmeTask); // should never be reached @@ -131,7 +132,6 @@ void bme_loop(void *pvParameters) { } // bme_loop() void loadState(void) { - uint8_t bsecstate_buffer[BSEC_MAX_STATE_BLOB_SIZE] = {0}; if (cfg.bsecstate[BSEC_MAX_STATE_BLOB_SIZE] == BSEC_MAX_STATE_BLOB_SIZE) { // Existing state in NVS stored ESP_LOGI(TAG, "restoring BSEC state from NVRAM"); @@ -145,11 +145,10 @@ void loadState(void) { void updateState(void) { bool update = false; - uint8_t bsecstate_buffer[BSEC_MAX_STATE_BLOB_SIZE] = {0}; if (stateUpdateCounter == 0) { - // first state update when IAQ accuracy is >= 3 - if (iaqSensor.iaqAccuracy >= 3) { + // first state update when IAQ accuracy is >= 1 + if (iaqSensor.iaqAccuracy >= 1) { update = true; stateUpdateCounter++; } diff --git a/src/cyclic.cpp b/src/cyclic.cpp index 89564b01..13518cf5 100644 --- a/src/cyclic.cpp +++ b/src/cyclic.cpp @@ -33,20 +33,25 @@ void doHousekeeping() { #endif // task storage debugging // - ESP_LOGD(TAG, "Wifiloop %d bytes left", - uxTaskGetStackHighWaterMark(wifiSwitchTask)); - ESP_LOGD(TAG, "IRQhandler %d bytes left", - uxTaskGetStackHighWaterMark(irqHandlerTask)); + ESP_LOGD(TAG, "Wifiloop %d bytes left | Taskstate = %d", + uxTaskGetStackHighWaterMark(wifiSwitchTask), + eTaskGetState(wifiSwitchTask)); + ESP_LOGD(TAG, "IRQhandler %d bytes left | Taskstate = %d", + uxTaskGetStackHighWaterMark(irqHandlerTask), + eTaskGetState(irqHandlerTask)); #ifdef HAS_GPS - ESP_LOGD(TAG, "Gpsloop %d bytes left", uxTaskGetStackHighWaterMark(GpsTask)); + ESP_LOGD(TAG, "Gpsloop %d bytes left | Taskstate = %d", + uxTaskGetStackHighWaterMark(GpsTask), eTaskGetState(GpsTask)); #endif #ifdef HAS_BME - ESP_LOGD(TAG, "Bmeloop %d bytes left", uxTaskGetStackHighWaterMark(BmeTask)); + ESP_LOGD(TAG, "Bmeloop %d bytes left | Taskstate = %d", + uxTaskGetStackHighWaterMark(BmeTask), eTaskGetState(BmeTask)); #endif #if (HAS_LED != NOT_A_PIN) || defined(HAS_RGB_LED) - ESP_LOGD(TAG, "LEDloop %d bytes left", - uxTaskGetStackHighWaterMark(ledLoopTask)); + ESP_LOGD(TAG, "LEDloop %d bytes left | Taskstate = %d", + uxTaskGetStackHighWaterMark(ledLoopTask), + eTaskGetState(ledLoopTask)); #endif // read battery voltage into global variable @@ -55,10 +60,10 @@ void doHousekeeping() { ESP_LOGI(TAG, "Voltage: %dmV", batt_voltage); #endif -// display BME sensor data if present +// display BME sensor data #ifdef HAS_BME - ESP_LOGI(TAG, "BME680 Temp: %.2f°C | IAQ: %.2f | IAQacc: %d", bme_status.temperature, bme_status.iaq, bme_status.iaq_accuracy); - updateState(); + ESP_LOGI(TAG, "BME680 Temp: %.2f°C | IAQ: %.2f | IAQacc: %d", + bme_status.temperature, bme_status.iaq, bme_status.iaq_accuracy); #endif // check free heap memory @@ -66,13 +71,13 @@ void doHousekeeping() { ESP_LOGI(TAG, "Memory full, counter cleared (heap low water mark = %d Bytes / " "free heap = %d bytes)", - ESP.getMinFreeHeap() , ESP.getFreeHeap()); + ESP.getMinFreeHeap(), ESP.getFreeHeap()); SendPayload(COUNTERPORT); // send data before clearing counters reset_counters(); // clear macs container and reset all counters get_salt(); // get new salt for salting hashes - if (ESP.getMinFreeHeap() <= MEM_LOW) // check again - do_reset(); // memory leak, reset device + if (ESP.getMinFreeHeap() <= MEM_LOW) // check again + do_reset(); // memory leak, reset device } // check free PSRAM memory @@ -84,7 +89,7 @@ void doHousekeeping() { get_salt(); // get new salt for salting hashes if (ESP.getMinFreePsram() <= MEM_LOW) // check again - do_reset(); // memory leak, reset device + do_reset(); // memory leak, reset device } #endif diff --git a/src/main.cpp b/src/main.cpp index 29aa32cb..609243f8 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -353,9 +353,8 @@ void setup() { ESP_LOGI(TAG, "Starting BMEloop..."); xTaskCreatePinnedToCore(bme_loop, // task function "bmeloop", // name of task - 4096, // stack size of task + 2048, // stack size of task (void *)1, // parameter of the task - //0, // priority of the task 1, // priority of the task &BmeTask, // task handle 1); // CPU core diff --git a/src/wifiscan.cpp b/src/wifiscan.cpp index 675d511b..dcd8ebc9 100644 --- a/src/wifiscan.cpp +++ b/src/wifiscan.cpp @@ -74,7 +74,7 @@ void switchWifiChannel(void *parameter) { channel = (channel % WIFI_CHANNEL_MAX) + 1; // rotate channel 1..WIFI_CHANNEL_MAX esp_wifi_set_channel(channel, WIFI_SECOND_CHAN_NONE); - ESP_LOGD(TAG, "Wifi set channel %d", channel); + //ESP_LOGD(TAG, "Wifi set channel %d", channel); } vTaskDelete(NULL); // shoud never be reached }