Skip to content

rogiervandergeer/sgp30-driver

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

sgp30-driver

Easy-to-use python driver for the Sensirion SGP30 multi gas sensor

GitHub Workflow Status PyPI PyPI - License PyPI - Downloads

Installation

The package is available on PyPI. Installation is can be done with your favourite package manager. For example:

pip install sgp30-driver

Usage

In order to initialise the device we need an open SMBus object. Depending on the machine that you are running on you may need to provide another bus number or path:

from sgp30 import SGP30
from smbus2 import SMBus


with SMBus(1) as bus:
    device = SGP30(bus=bus)

The address of the SGP30 defaults to 0x58. This is the (fixed) address of the SGP30 devices, so you should never have to change it. If you do want to change it, you can provide it like SGP30(bus=bus, address=0x59).

Initialisation

After every restart the SGP30 has to be initialised:

device.initialise()

This process can take up to 20 seconds.

This process can be sped up by passing recent values of the baseline compensation algorithm: store the result of device.baseline somewhere in non-volatile memory, and restore it with:

device.initialise(baseline)

Measuring

After initialisation the device is ready for taking measurements. The measure() method returns an SGP30Measurement object which has two attributes: equivalent_co2 which represents the CO2 concentration in ppm (parts-per-million) and tvoc which represents the TVOC (total volatile organic compounds) in ppb (parts-per-billion).

measurement = device.measure()
print(f"{measurement.equivalent_co2} ppm CO2, {measurement.tvoc} ppb TVOC")

In order to ensure the proper working of the baseline compensation algorithm one should call the measure() method in regular intervals of 1 second.

Humidity compensation

The SGP30 has on-chip humidity compensation. In order to enable the compensation, you will need to get a humidity measurement from another sensor, and then set the humidity using set_humidity():

device.set_humidity(15.2)

The accepted humidity value is the absolute humidity in g/m3.

Alternatively, if only the relative humidity is available:

device.set_relative_humidity(
    humidity=0.5,  # 50 %RH
    temperature=20,  # 20°C
)