Hello all,
I bought a few VOC-LP tags recently.
I planned to used them with a board which is deviation of esp32-s2.
I’m using esp-idf framework for programming.
However it seems that isn’t really easy to do it so
I found two open source libs 1, 2 for sensor SGP30
.
For some reason any of these don’t work properly with VOC-LP TAG.
Both were failing when readings measured values. I started to debug 2nd lib. I figure-out that the issue was with wait interval/delay between sending the i2c command to sensor and reading it:
FYI it seems that delay should be higher in all commands for VOC-LP TAG.
Once I adjusted the ESP lib to match TWR delay it stopped failing.
I was running measurements for 25 hours in my test script / app.
eCO2 values were fluctuating between 10-30 so it seems to work somehow but TVOC values were 65535 ppb all the time. It is worth to mention that I didn’t set any humidity before measurement.
I have a few questions in my mind. It would be super cool if somebody would find the time to help me find answers:
-
VOC-LP TAG has 5 pins. 4 of them are common for i2c sensors but I’m not familiar with the pin marked as INT. Does this INT pin needs to be connected to the board for measurements ? if so how to use it
-
VOC-LP TAG has really low power consumption. It should be around 0.065 mA per info from ESHOP. How is it possible that it is so effective ? In comparison VOC TAG and original SGP30 sensor claim power consumption around 48 mA. I’m asking whether I had to do something special in order to achieve such low power consumption.
- I noticed state TWR_SGPC3_STATE_SET_POWER_MODE
in TWR lib. However it isn’t called within the file. So I wonder what it should be used for ?
- Do you have any idea why my measurements were 65535 ppb all the time in my case?
- I also noticed that TWR lib always expect to set humidity TWR_SGPC3_STATE_SET_HUMIDITY after init state - link. Is it expected that this VOC-LP TAG always run by side with some humidity sensor / TAG ?
- I planned to disconnect VOC-LT TAG from power every time after measurements e.g. to do measurements in intervals. Is it OK strategy for VOC-LP TAG?
Looking forward to your replies.
Thx
BR
Adrian
Hello Adrian,
- On this TAG, the INT interrupt pin is unconnected. See bc-hardware/bc-tag-voc-rev-1-0-sch.pdf at master · hardwario/bc-hardware · GitHub
- 65 uA is the sleep current. You have to also add some uA because on that VOC-LP TAG there is also an LDO chip. See schematic above.
- You are right, this state seems like is not used in our SDK. You can track the function based on a command that is sent to the sensor.. I’m not able to help you more.
- 65535 is the maximal
uint16
value. So it might be because conversion or some command wasn’t triggered? You’ll have to dig deeper into the original datasheet.
https://www.mouser.com/pdfdocs/Sensirion_Gas_Sensors_SGP30_Datasheet_EN-1148053.pdf
- According to the datasheet you can run without humidity compensation
- The sensor needs at least 24 hours to display reliable data. So I don’t think that power cycling is right way to save power.
I would rather suggest studying the original datasheet than sticking with our SDK implementation.
https://www.mouser.com/pdfdocs/Sensirion_Gas_Sensors_SGP30_Datasheet_EN-1148053.pdf
Hi @hub.martin ,
First of all thx for reply.
I spend several hours on it during Easter holiday … I was reading datasheet, code, testing, etc and here are some notes …
It seems that VOC-LP TAG doesn’t use SGP30 sensor but SGPC3. The sensors are similar but the later one provides TVOC values only. Links to datasheets just for the reference: SGP30, SGPC3.
There are actually two separate TWR libs for these sensors. I noticed these differences as far my concern is going:
-
sgpc.c uses init command
{ 0x20, 0xae };
but sgp30.c uses { 0x20, 0x03 };
.
-
sgpc.c reads only TVOC value from measurement, sgp30.c reads both TVOC and eCO2.
- Now I understand why this tag is called
low power
one because sgpc3
has two power modes: lower power and ultra-low power:
The SGPC3 offers two operation modes with different power consumptions and sampling intervals. The low-power mode with
1mA average current and 2s sampling interval and the ultra-low power mode with 0.065mA average current and 30s sampling
interval. By default, the SGPC3 is using the low-power mode.
Looking back on your reply to 2nd point:
65 uA is the sleep current. You have to also add some uA because on that VOC-LP TAG there is also an LDO chip. See schematic above.
Now we know that 65 uA refers to the consumption in ultra-low power mode.
Some questions to think about:
- It seems that TWR lib doesn’t enable ultra-low power mode. Maybe the reason was to don’t affect sensor accuracy? There is a warning in sgpc3 datasheet but I’m not quite sure whether the accuracy is affected also when ultra-low mode is enabled:
It is recommended to test the two modes on different SGPC3 sensors, as switching the power mode back and forth with the
same sensor will impact sensor accuracy.
- Currently I’m not sure if VOC-LP TAG reports TVOC values in range
0 ppb to 60000 ppb
as defined in sgpc3 datasheet or it provides some indexed values. There is some table on VOC-LP TAG eshop page. Does this table provides some indexes or it just describes 0-60000 ppb range?
TLDR it seems that ESP lib somehow works with VOC-LP tag after adjustments because sgpc3
provides only one value (TVOC) but I/It expects two as it was designed for SGP30. So value ** 65535 I referenced above is just redundant one for sgpc3 sensor.
Thx
BR
Adrian
Now I see that I linked the wrong schematics of “VOC” and not “VOC-LP”. Sorry for the confusion.
The sensor is not put to sleep between measurements, because after wake-up, it needs at least 24 hours to calibrate. And our projects send values a few times every hour.
The sensor should reply with 0 ppb to 60000 ppb
, which nicely fits that 16-bit value/register. The table on our e-shop is there just for illustration.