The esp-idf-lib apds9930 component is now working. In nvsio stop logging not updated values. Store gain and aglbit values in nvs.

Fri, 07 Apr 2023 14:31:17 +0200

author
Michiel Broek <mbroek@mbse.eu>
date
Fri, 07 Apr 2023 14:31:17 +0200
changeset 21
df8564c9701e
parent 20
c3001154416f
child 22
9c0bcc91fe1a

The esp-idf-lib apds9930 component is now working. In nvsio stop logging not updated values. Store gain and aglbit values in nvs.

esp-idf-lib/components/apds9930/apds9930.c file | annotate | diff | comparison | revisions
main/iotbalkon.c file | annotate | diff | comparison | revisions
main/nvsio.c file | annotate | diff | comparison | revisions
main/task_apds9930.c file | annotate | diff | comparison | revisions
--- 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, &reg_val));
-//    i2c_dev_read_reg(&dev->i2c_dev, (uint8_t)APDS9930_ENABLE, &reg_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, &reg_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
 	}

mercurial