Fri, 07 Apr 2023 14:31:17 +0200
The esp-idf-lib apds9930 component is now working. In nvsio stop logging not updated values. Store gain and aglbit values in nvs.
--- a/esp-idf-lib/components/apds9930/apds9930.c Thu Apr 06 22:01:08 2023 +0200 +++ b/esp-idf-lib/components/apds9930/apds9930.c Fri Apr 07 14:31:17 2023 +0200 @@ -118,17 +118,6 @@ return i2c_dev_write_reg(&dev->i2c_dev, reg, &data, 1); } -static esp_err_t read_reg_8(apds9930_t *dev, uint8_t reg, uint8_t *data) -{ - I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); - I2C_DEV_CHECK(&dev->i2c_dev, read_reg_8_nolock(dev, reg, data)); - I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); - - return ESP_OK; -} - - - inline static esp_err_t write_register8(i2c_dev_t *dev, uint8_t addr, uint8_t value) { @@ -235,13 +224,9 @@ { uint8_t reg_val; -// CHECK_ARG(dev); + CHECK_ARG(dev); /* Read current ENABLE register */ - I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); - I2C_DEV_CHECK(&dev->i2c_dev, read_reg_8_nolock(dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, ®_val)); -// i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_ENABLE, ®_val, 1); - I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); - ESP_LOGI(TAG, "apds9930_setMode(%d, %d) get=%02x", mode, enable, reg_val); + reg_val = apds9930_getMode(dev); /* Change bit(s) in ENABLE register */ enable = enable & 0x01; @@ -259,15 +244,11 @@ } } - ESP_LOGI(TAG, "apds9930_setMode write %02x", reg_val); /* Write value back to ENABLE register */ I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); I2C_DEV_CHECK(&dev->i2c_dev, write_reg_8_nolock(dev, APDS9930_ENABLE | APDS9930_AUTO_INCREMENT, reg_val)); -// CHECK_LOGE(dev, write_register8(&dev->i2c_dev, APDS9930_ENABLE, reg_val), "Enable register"); -// CHECK_LOGE(dev, i2c_dev_write_reg(&dev->i2c_dev, (uint8_t)APDS9930_ENABLE, ®_val, 1), "Enable register"); I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); -//vTaskDelay(12 / portTICK_PERIOD_MS); return ESP_OK; } @@ -410,7 +391,6 @@ esp_err_t apds9930_readCh0Light(apds9930_t *dev, uint16_t *val) { - uint8_t val_byte; uint16_t val_word; *val = 0; @@ -418,17 +398,9 @@ I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); /* Read value from channel 0 */ - CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAL | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch0 low"); - ESP_LOGI(TAG, "l %02x", val_byte); - *val = val_byte; - CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAH | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch0 high"); - ESP_LOGI(TAG, "h %02x", val_byte); - *val += ((uint16_t)val_byte << 8); + CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAL | APDS9930_AUTO_INCREMENT, &val_word, 2), "Read ch0"); I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); - ESP_LOGI(TAG, "val %04x", *val); - - CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch0DATAL | APDS9930_AUTO_INCREMENT, &val_word, 2), "Read ch0 16"); - ESP_LOGI(TAG, "16 %04x", val_word); + *val = val_word; return ESP_OK; } @@ -436,16 +408,14 @@ esp_err_t apds9930_readCh1Light(apds9930_t *dev, uint16_t *val) { - uint8_t val_byte; + uint16_t val_word; *val = 0; I2C_DEV_TAKE_MUTEX(&dev->i2c_dev); /* Read value from channel 1 */ - CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_Ch1DATAL | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch1 low"); - *val = val_byte; - CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, APDS9930_Ch1DATAH | APDS9930_AUTO_INCREMENT, &val_byte, 1), "Read ch1 high"); - *val += ((uint16_t)val_byte << 8); + CHECK_LOGE(dev, i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_Ch1DATAL | APDS9930_AUTO_INCREMENT, &val_word, 2), "Read ch1"); I2C_DEV_GIVE_MUTEX(&dev->i2c_dev); + *val = val_word; return ESP_OK; }
--- a/main/iotbalkon.c Thu Apr 06 22:01:08 2023 +0200 +++ b/main/iotbalkon.c Fri Apr 07 14:31:17 2023 +0200 @@ -522,11 +522,11 @@ ESP_LOGI(TAG, "Battery Volts: %.4fV Current %.4fmA Power %.4fmW", batteryVolts, batteryCurrent, batteryPower); /* Check alarm conditions */ -// if (batteryState <= 10) { -// Alarm |= AL_ACCULOW; -// } else { + if (batteryState <= 10) { + Alarm |= AL_ACCULOW; + } else { Alarm &= ~AL_ACCULOW; -// } + } } getTempBaro(); vTaskDelay(2000 / portTICK_PERIOD_MS); @@ -593,9 +593,6 @@ break; case State_Measure: getVoltsCurrent(); - // if (isnan(Temperature)) { - // getTempHumi(); - // } gTimeNext = millis() + ST_INTERVAL; if (loopno >= ST_LOOPS) { ESP_LOGI(TAG, "Enough loops, do connect");
--- a/main/nvsio.c Thu Apr 06 22:01:08 2023 +0200 +++ b/main/nvsio.c Fri Apr 07 14:31:17 2023 +0200 @@ -82,8 +82,6 @@ nvs_set_u8(my_handle, key, val); nvs_commit(my_handle); ESP_LOGI(TAG, "nvsio_write_u8(%s) updated val %02x", key, val); - } else { - ESP_LOGI(TAG, "nvsio_write_u8(%s) already val %02x", key, val); } nvs_close(my_handle); } @@ -130,8 +128,6 @@ nvs_set_u32(my_handle, key, val); nvs_commit(my_handle); ESP_LOGI(TAG, "nvsio_write_u32(%s) updated val %08lx", key, val); - } else { - ESP_LOGI(TAG, "nvsio_write_u32(%s) already val %08lx", key, val); } nvs_close(my_handle); }
--- a/main/task_apds9930.c Thu Apr 06 22:01:08 2023 +0200 +++ b/main/task_apds9930.c Fri Apr 07 14:31:17 2023 +0200 @@ -51,7 +51,7 @@ { int tries; esp_err_t err = ESP_OK; - uint8_t l_gain = 0, l_aglbit = 0; + uint8_t l_gain, l_aglbit; ESP_LOGI(TAG, "Starting task APDS9930 sda=%d scl=%d", CONFIG_I2C_MASTER_SDA, CONFIG_I2C_MASTER_SCL); apds9930_state = malloc(sizeof(APDS9930_State)); @@ -61,6 +61,11 @@ apds9930_state->address = apds9930_dev.i2c_dev.addr; apds9930_state->error = APDS9930_ERR_NONE; + /* Gain settings are saved in NVS for quick startup. */ + l_gain = nvsio_read_u8((char *)"l_gain"); + l_aglbit = nvsio_read_u8((char *)"l_aglbit"); + ESP_LOGI(TAG, "gain %d agl: %d", l_gain, l_aglbit); + // Calculate these for auto gain scaling. ALS_maxcount = (256 - APDS9930_DEFAULT_ATIME) * 1024; ALS_mincount = ALS_maxcount / 64; @@ -81,15 +86,8 @@ if (! apds9930_state->fake) { /* Real sensor is present */ - if (xSemaphoreTake(xSemaphoreAPDS9930, 25) == pdTRUE) { - l_gain = apds9930_state->gain; - l_aglbit = apds9930_state->aglbit; - xSemaphoreGive(xSemaphoreAPDS9930); - } if (l_gain > 3) l_gain = 0; - ESP_LOGI(TAG, "1"); - // ESP_ERROR_CHECK(apds9930_enablePower(&apds9930_dev)); ESP_ERROR_CHECK(apds9930_enableLightSensor(&apds9930_dev, false)); // Does apds9930_enablePower() too. ESP_ERROR_CHECK(apds9930_disableProximitySensor(&apds9930_dev)); ESP_ERROR_CHECK(apds9930_setAmbientLightGain(&apds9930_dev, l_gain)); @@ -99,8 +97,6 @@ err = ESP_OK; while (tries) { - ESP_LOGI(TAG, "2 tries %d", tries); - err = apds9930_readAmbientLightLux(&apds9930_dev, &ambient_light); if (err == ESP_OK) { err = apds9930_readCh0Light(&apds9930_dev, &ch0); if (err == ESP_OK) { @@ -111,7 +107,7 @@ ESP_LOGE(TAG, "read APDS-9930 values error '%s'", esp_err_to_name(err)); break; } - ESP_LOGI(TAG, "2a ALS_maxcount=%d ALS_mincount=%d", ALS_maxcount, ALS_mincount); + ambient_light = apds9930_floatAmbientToLux(&apds9930_dev, ch0, ch1); /* * Check ranges @@ -144,7 +140,9 @@ } else if (l_aglbit) { ambient_light = ambient_light / 0.1666; } - ESP_LOGI(TAG, "Ambient: %.3f Ch0: %d Ch1: %d Gain: %d AGL: %d", ambient_light, ch0, ch1, l_gain, l_aglbit); + nvsio_write_u8((char *)"l_gain", l_gain); + nvsio_write_u8((char *)"l_aglbit", l_aglbit); + ESP_LOGI(TAG, "Ambient: %.2f Ch0: %d Ch1: %d Gain: %d AGL: %d", ambient_light, ch0, ch1, l_gain, l_aglbit); break; } tries--; @@ -185,7 +183,7 @@ xEventGroupClearBits(xEventGroupAPDS9930, TASK_APDS9930_REQUEST_LIGHT); xEventGroupSetBits(xEventGroupAPDS9930, TASK_APDS9930_REQUEST_DONE); -#if 1 +#if 0 ESP_LOGI(TAG, " Light: %.2f, gain: %d, error: %d", apds9930_state->ambient_light, apds9930_state->gain, apds9930_state->error); #endif }