Execute measurements with SensorBridge
The following steps show how to use this driver on a Windows system using the Sensirion SEK-SensorBridge to execute a simple measurement.
Install the STC3X driver and all required packages as described in Installation.
Install the driver for the Sensirion SEK-SensorBridge
pip install sensirion-shdlc-sensorbridge
Connect the SEK-SensorBridge to your PC over USB
Connect the STC3X sensor to the SEK-SensorBridge
Run the example script from the root of the repository.
By default the script assumes the SensorBridge is connected to
COM1
serial port. If this is different on your system, pass the port in use with the--serial-port
parameter as outlined below.python examples/example_usage_sensorbridge_stc3x.py --serial-port <your COM port>
Example script
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# (c) Copyright 2024 Sensirion AG, Switzerland
#
# THIS FILE IS AUTOMATICALLY GENERATED!
#
# Generator: sensirion-driver-generator 0.38.1
# Product: stc3x
# Model-Version: 1.0.0
#
import argparse
import time
from sensirion_i2c_driver import I2cConnection, CrcCalculator
from sensirion_shdlc_driver import ShdlcSerialPort, ShdlcConnection
from sensirion_shdlc_sensorbridge import (SensorBridgePort,
SensorBridgeShdlcDevice,
SensorBridgeI2cProxy)
from sensirion_driver_adapters.i2c_adapter.i2c_channel import I2cChannel
from sensirion_i2c_stc3x.device import Stc3xDevice
parser = argparse.ArgumentParser()
parser.add_argument('--serial-port', '-p', default='COM1')
args = parser.parse_args()
with ShdlcSerialPort(port=args.serial_port, baudrate=460800) as port:
bridge = SensorBridgeShdlcDevice(ShdlcConnection(port), slave_address=0)
bridge.set_i2c_frequency(SensorBridgePort.ONE, frequency=100e3)
bridge.set_supply_voltage(SensorBridgePort.ONE, voltage=3.3)
bridge.switch_supply_on(SensorBridgePort.ONE)
i2c_transceiver = SensorBridgeI2cProxy(bridge, port=SensorBridgePort.ONE)
channel = I2cChannel(I2cConnection(i2c_transceiver),
slave_address=0x29,
crc=CrcCalculator(8, 0x31, 0xff, 0x0))
sensor = Stc3xDevice(channel)
time.sleep(0.014)
# Output the product identifier and serial number
(product_id, serial_number) = sensor.get_product_id()
print(f"Product id = {product_id}"
)
print(f"Serial Number = {serial_number}"
)
# Measure STC31-C CO2 in air in range 0% - 40%
# or STC31 CO2 in air in range 0% - 25%
sensor.set_binary_gas(19)
# Enable weak smoothing filter for measurement.
# This will decrease the signal noise but increase response time.
sensor.enable_weak_filter()
for i in range(100):
# Slow down the sampling to 1Hz
time.sleep(1.0)
# Set default humidity of 50%. Adjust the value to your environment or
# use the actual humidity read out from the SHT4x sensor on the STC31-C
# evaluation kit.
sensor.set_relative_humidity(50.0)
(co2_concentration, temperature
) = sensor.measure_gas_concentration()
# Print CO2 concentration in Vol% and temperature in degree celsius.
print(f"CO2 concentration = {co2_concentration}")
print(f"Temperature = {temperature}")
Execute measurements using internal Linux I²C driver
On Linux systems it is furthermore possible to use the Linux user space I²C driver directly. How this can be done is shown in the following.
Install the STC3X driver and all required packages as described in Installation.
Connect the STC3X sensor to the I²C port of your system (for example to the I²C port 1 of a Raspberry Pi).
Run the example script from the root of the repository.
By default the script assumes you have the sensor connected to
/dev/i2c-1
. If this is different on your system, pass the port in use with the--i2c-port
parameter as outlined below.python examples/example_usage_linux_stc3x.py --i2c-port <your I2C port>
Example script
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# (c) Copyright 2024 Sensirion AG, Switzerland
#
# THIS FILE IS AUTOMATICALLY GENERATED!
#
# Generator: sensirion-driver-generator 0.38.1
# Product: stc3x
# Model-Version: 1.0.0
#
import argparse
import time
from sensirion_i2c_driver import LinuxI2cTransceiver, I2cConnection, CrcCalculator
from sensirion_driver_adapters.i2c_adapter.i2c_channel import I2cChannel
from sensirion_i2c_stc3x.device import Stc3xDevice
parser = argparse.ArgumentParser()
parser.add_argument('--i2c-port', '-p', default='/dev/i2c-1')
args = parser.parse_args()
with LinuxI2cTransceiver(args.i2c_port) as i2c_transceiver:
channel = I2cChannel(I2cConnection(i2c_transceiver),
slave_address=0x29,
crc=CrcCalculator(8, 0x31, 0xff, 0x0))
sensor = Stc3xDevice(channel)
time.sleep(0.014)
# Output the product identifier and serial number
(product_id, serial_number) = sensor.get_product_id()
print(f"Product id = {product_id}")
print(f"Serial Number = {serial_number}")
# Measure STC31-C CO2 in air in range 0% - 40%
# or STC31 CO2 in air in range 0% - 25%
sensor.set_binary_gas(19)
# Enable weak smoothing filter for measurement.
# This will decrease the signal noise but increase response time.
sensor.enable_weak_filter()
for i in range(100):
# Slow down the sampling to 1Hz
time.sleep(1.0)
# Set default humidity of 50%. Adjust the value to your environment or
# use the actual humidity read out from the SHT4x sensor on the STC31-C
# evaluation kit.
sensor.set_relative_humidity(50.0)
(co2_concentration, temperature
) = sensor.measure_gas_concentration()
# Print CO2 concentration in Vol% and temperature in degree celsius.
print(f"CO2 concentration = {co2_concentration}")
print(f"Temperature = {temperature}")