Quick StartΒΆ

Following example code shows how the driver is intended to use:

Note

This is just a short example to get an idea how the driver is used. If you plan to implement a new device driver, please also read the guidelines for implementing device drivers.

from struct import pack
from circuitpython_sensirion_i2c_driver import I2cTransceiver, I2cConnection, \
    I2cDevice, SensirionI2cCommand, CrcCalculator


# Implement a command
class MyI2cCmdReadSerialNumber(SensirionI2cCommand):
    def __init__(self):
        super(MyI2cCmdReadSerialNumber, self).__init__(
            command=0xD033,
            tx_data=[],
            rx_length=48,
            read_delay=0,
            timeout=0,
            crc=CrcCalculator(8, 0x31, 0xFF),
        )

    def interpret_response(self, data):
        raw_response = SensirionI2cCommand.interpret_response(self, data)
        return str(raw_response.decode('utf-8').rstrip('\0'))


# Implement a device
class MyI2cDevice(I2cDevice):
    def __init__(self, connection, slave_address=0x69):
        super(MyI2cDevice, self).__init__(connection, slave_address)

    def read_serial_number(self):
        return self.execute(MyI2cCmdReadSerialNumber())


# Usage
# I2cTransceiver import is Automatically switched between Linux/CircuitPython
with I2cTransceiver('/dev/i2c-1') as transceiver:
    device = MyI2cDevice(I2cConnection(transceiver))
    print("Serial Number: {}".format(device.read_serial_number()))