Quick Start

SensorBridge Example

Following example code shows how to use this driver with a Sensirion SFM3019 connected to the computer using a Sensirion SEK-SensorBridge. The driver for the SensorBridge can be installed with pip install sensirion-shdlc-sensorbridge.

import logging
import time

from sensirion_shdlc_driver import ShdlcSerialPort, ShdlcConnection
from sensirion_shdlc_sensorbridge import SensorBridgePort, SensorBridgeShdlcDevice

from sensirion_sensorbridge_i2c_sfm.sfm3019 import Sfm3019I2cSensorBridgeDevice, MeasurementMode

logging.basicConfig(format='%(asctime)s [%(levelname)s] %(message)s', level=logging.ERROR)

# Connect to the SensorBridge with default settings:
#  - baudrate:      460800
#  - slave address: 0
with ShdlcSerialPort(port='/dev/ttyUSB0', baudrate=460800) as port:
    # Initialize Sensorbridge
    bridge = SensorBridgeShdlcDevice(ShdlcConnection(port), slave_address=0)
    print("SensorBridge SN: {}".format(bridge.get_serial_number()))

    # Configure SensorBridge port 1 for SFM
    bridge.set_i2c_frequency(SensorBridgePort.ONE, frequency=400e3)
    bridge.set_supply_voltage(SensorBridgePort.ONE, voltage=3.3)
    bridge.switch_supply_on(SensorBridgePort.ONE)

    # Create SFM device
    sfm3019 = Sfm3019I2cSensorBridgeDevice(bridge, SensorBridgePort.ONE, slave_address=0x2E)

    # Define gas (or gas mixes)
    measure_mode = MeasurementMode.Air
    permille = 200  # only applies for gas mixes

    # Initialize sensor:
    # 1.) Stop any running measurement
    # 2.) Request scale factors and unit set on sensor
    sfm3019.initialize_sensor(measure_mode)

    # Read out product information
    pid, sn = sfm3019.read_product_identifier_and_serial_number()
    print("SFM3019 SN: {}".format(sn))
    print("Flow unit of sensor: {} (Volume at temperature in degree Centigrade)".format(sfm3019.flow_unit))

    # Start measurements
    sfm3019.start_continuous_measurement(measure_mode, air_o2_mix_fraction_permille=permille)

    # Read them out continuously
    while True:
        time.sleep(0.1)
        print("Flow: {}, Temperature: {}".format(*sfm3019.read_continuous_measurement()))