adafruit_sgp40
¶
CircuitPython library for the Adafruit SGP40 Air Quality Sensor / VOC Index Sensor Breakouts
- Author(s): Bryan Siepert
Keith Murray
Implementation Notes¶
Hardware:
Adafruit SGP40 Air Quality Sensor Breakout - VOC Index <https://www.adafruit.com/product/4829>
In order to use the
measure_raw
function, a temperature and humidity sensor which updates at at least 1Hz is needed (BME280, BME688, SHT31-D, SHT40, etc. For more, see: https://www.adafruit.com/category/66)
Software and Dependencies:
Adafruit CircuitPython firmware for the supported boards: https://github.com/adafruit/circuitpython/releases
Adafruit’s Bus Device library: https://github.com/adafruit/Adafruit_CircuitPython_BusDevice
- class adafruit_sgp40.SGP40(i2c, address=89)¶
Class to use the SGP40 Air Quality Sensor Breakout
- Parameters
address (int) – The I2C address of the device. Defaults to
0x59
Quickstart: Importing and using the SGP40 temperature sensor
Here is one way of importing the
SGP40
class so you can use it with the namesgp
. First you will need to import the libraries to use the sensorimport board import adafruit_sgp40 # If you have a temperature sensor, like the bme280, import that here as well # import adafruit_bme280
Once this is done you can define your
board.I2C
object and define your sensor objecti2c = board.I2C() # uses board.SCL and board.SDA sgp = adafruit_sgp40.SGP40(i2c) # And if you have a temp/humidity sensor, define the sensor here as well # bme280 = adafruit_bme280.Adafruit_BME280_I2C(i2c)
Now you have access to the raw gas value using the
raw
attribute. And with a temperature and humidity value, you can access the class functionmeasure_raw()
for a humidity compensated raw readingraw_gas_value = sgp.raw # Lets quickly grab the humidity and temperature # temperature = bme280.temperature # humidity = bme280.relative_humidity # compensated_raw_gas = sgp.measure_raw(temperature=temperature, # relative_humidity=humidity) # temperature = temperature, relative_humidity = humidity)
Note
The operational range of temperatures for the SGP40 is -10 to 50 degrees Celsius and the operational range of relative humidity for the SGP40 is 0 to 90 % (assuming that humidity is non-condensing).
Humidity compensation is further optimized for a subset of the temperature and relative humidity readings. See Figure 3 of the Sensirion datasheet for the SGP40. At 25 degrees Celsius, the optimal range for relative humidity is 8% to 90%. At 50% relative humidity, the optimal range for temperature is -7 to 42 degrees Celsius.
Prolonged exposures outside of these ranges may reduce sensor performance, and the sensor must not be exposed towards condensing conditions at any time.
For more information see: https://www.sensirion.com/fileadmin/user_upload/customers/sensirion/Dokumente/9_Gas_Sensors/Datasheets/Sensirion_Gas_Sensors_Datasheet_SGP40.pdf and https://learn.adafruit.com/adafruit-sgp40
- initialize()¶
Reset the sensor to it’s initial unconfigured state and configure it with sensible defaults so it can be used
- measure_index(temperature=25, relative_humidity=50)¶
Measure VOC index after humidity compensation :param float temperature: The temperature in degrees Celsius, defaults to
25
:param float relative_humidity: The relative humidity in percentage, defaults to50
:note VOC index can indicate the quality of the air directly. The larger the value, the worse the air quality. :note 0-100, no need to ventilate, purify :note 100-200, no need to ventilate, purify :note 200-400, ventilate, purify :note 00-500, ventilate, purify intensely :return int The VOC index measured, ranged from 0 to 500
- measure_raw(temperature=25, relative_humidity=50)¶
A humidity and temperature compensated raw gas value which helps address fluctuations in readings due to changing humidity.
- Parameters
The raw gas value adjusted for the current temperature (c) and humidity (%)
- property raw¶
The raw gas value