Source code for sensirion_i2c_sdp.sdp.device

# -*- coding: utf-8 -*-
# (c) Copyright 2021 Sensirion AG, Switzerland

from __future__ import absolute_import, division, print_function

from sensirion_i2c_driver import I2cDevice

from sensirion_i2c_sdp.sdp.commands import SdpI2cCmdPrepareProductIdentifier, SdpI2cCmdReadProductIdentifier, \
    SdpI2cCmdStartContinuousMeasurementWithMassFlowTCompAndAveraging, SdpI2cCmdStopContinuousMeasurement, \
    SdpI2cCmdReadMeasurement, SdpI2cCmdStartContinuousMeasurementWithMassFlowTComp, \
    SdpI2cCmdStartContinuousMeasurementWithDiffPressureTCompAndAveraging, \
    SdpI2cCmdStartContinuousMeasurementWithDiffPressureTComp, \
    SdpI2cCmdTriggerMeasurementWithMassFlowTCompAndAveraging, SdpI2cCmdTriggerMeasurementWithDiffPressureTComp, \
    SdpI2cCmdEnterSleepMode, SdpI2cCmdExitSleepMode


[docs]class SdpI2cDevice(I2cDevice): """ SDP I²C device class to allow executing I²C commands. Adjust the I2C address according to your setup. SDP8xx can support 0x25 and 0x26. SDP3x can support 0x21, 0x22 and 0x23. Please refer to the dedicated Datasheet for more details on the supported I2C address range. """
[docs] def __init__(self, connection, slave_address=0x25): """ Constructs a new SDP I²C device. :param ~sensirion_i2c_driver.connection.I2cConnection connection: The I²C connection to use for communication. :param byte slave_address: The I²C slave address, defaults to 0x25. """ super().__init__(connection, slave_address)
[docs] def read_product_identifier(self): """ Read the product identifier and serial number of the sensor. :return: The product number and serial number. :rtype: tuple """ self.execute(SdpI2cCmdPrepareProductIdentifier()) return self.execute(SdpI2cCmdReadProductIdentifier())
[docs] def start_continuous_measurement_with_mass_flow_t_comp_and_averaging(self): """ This command starts continuous measurements with mass flow temperature compensation and the average till read feature. .. note:: The measurement command must only be sent once, if acknowledged. The command must not be resent or other commands must not be sent until the stop measurement command has been issued. After the start measurement command is sent, the first measurement result is available after 8ms. Small accuracy deviations (few % of reading) can occur during the next 12ms. The measured values are updated every 0.5ms and can be read using the read measurement interface. """ return self.execute(SdpI2cCmdStartContinuousMeasurementWithMassFlowTCompAndAveraging())
[docs] def start_continuous_measurement_with_mass_flow_t_comp(self): """ This command starts continuous measurements with mass flow temperature compensation. .. note:: The measurement command must only be sent once, if acknowledged. The command must not be resent or other commands must not be sent until the stop measurement command has been issued. After the start measurement command is sent, the first measurement result is available after 8ms. Small accuracy deviations (few % of reading) can occur during the next 12ms. The measured values are updated every 0.5ms and can be read using the read measurement interface. """ return self.execute(SdpI2cCmdStartContinuousMeasurementWithMassFlowTComp())
[docs] def start_continuous_measurement_with_diff_pressure_t_comp_and_averaging(self): """ This command starts continuous measurements with differential pressure temperature compensation and the average till read feature. .. note:: The measurement command must only be sent once, if acknowledged. The command must not be resent or other commands must not be sent until the stop measurement command has been issued. After the start measurement command is sent, the first measurement result is available after 8ms. Small accuracy deviations (few % of reading) can occur during the next 12ms. The measured values are updated every 0.5ms and can be read using the read measurement interface. """ return self.execute(SdpI2cCmdStartContinuousMeasurementWithDiffPressureTCompAndAveraging())
[docs] def start_continuous_measurement_with_diff_pressure_t_comp(self): """ This command starts continuous measurements with differential pressure temperature compensation. .. note:: The measurement command must only be sent once, if acknowledged. The command must not be resent or other commands must not be sent until the stop measurement command has been issued. After the start measurement command is sent, the first measurement result is available after 8ms. Small accuracy deviations (few % of reading) can occur during the next 12ms. The measured values are updated every 0.5ms and can be read using the read measurement interface. """ return self.execute(SdpI2cCmdStartContinuousMeasurementWithDiffPressureTComp())
[docs] def trigger_measurement_with_mass_flow_t_comp_and_averaging(self): """ This command triggers a single shot measurement with mass flow temperature compensation. .. note:: During a triggered measurement the sensor measures both differential pressure and temperature. The measurement starts directly after the command has been sent. The command needs to be repeated with every measurement. During the 45ms that the sensor is measuring, no command can be sent to the sensor. After the 45ms the result can be read out and any command can be sent to the sensor. """ return self.execute(SdpI2cCmdTriggerMeasurementWithMassFlowTCompAndAveraging())
[docs] def trigger_measurement_with_diff_pressure_t_comp_and_averaging(self): """ This command triggers a single shot measurement with differential pressure temperature compensation. .. note:: During a triggered measurement the sensor measures both differential pressure and temperature. The measurement starts directly after the command has been sent. The command needs to be repeated with every measurement. During the 45ms that the sensor is measuring, no command can be sent to the sensor. After the 45ms the result can be read out and any command can be sent to the sensor. """ return self.execute(SdpI2cCmdTriggerMeasurementWithDiffPressureTComp())
[docs] def stop_continuous_measurement(self): """ This command stops the continuous measurement and puts the sensor in idle mode. It powers off the heater and makes the sensor receptive to another command after 500us. The Stop command is also required when switching between different continuous measurement commands. """ return self.execute(SdpI2cCmdStopContinuousMeasurement())
[docs] def read_measurement(self): """ Read Measurement from sensor. After a start continuous measurement commands, the measurement results can be read out at most every 0.5ms. After a triggered measurement command, the results can be read out when the sensor is finished with the measurement. :return: - differential_pressure (:py:class:sensirion_i2c_sdp.sdp.response_types.SdpDifferentialPressure) Differential Pressure response object - temperature (:py:class:sensirion_i2c_sdp.sdp.reasponse_types.SdpTemperature) Temperature response object. :rtype: tuple """ return self.execute(SdpI2cCmdReadMeasurement())
[docs] def enter_sleep_mode(self): """ In sleep mode the sensor uses the minimum amount of current. The mode can only be entered from idle mode, i.e. when the sensor is not measuring. This mode is particularly useful for battery operated devices. To minimize the current in this mode, the complexity of the sleep mode circuit has been reduced as much as possible, which is mainly reflected by the way the sensor exits the sleep mode. In sleep mode the sensor cannot be soft reset. .. note:: Triggered mode: the sleep command can be sent after the result have been read out and the sensor is in idle mode. Continuous mode: the sleep command can be sent after a stop continuous measurement command has been issued and the sensor is in idle mode. """ self.execute(SdpI2cCmdEnterSleepMode())
[docs] def exit_sleep_mode(self): """ Exit sleep mode. See the data sheet for more detailed information """ self.execute(SdpI2cCmdExitSleepMode())