I wrote the following in python to read from a SI7021 sensor. I had to the use smBUS2 library that I found on pypi as the original smbus library wouldnt let me read/write bytes in the format that the manual for the SI7021 showed.
fromsmbus2importSMBus,i2c_msg,SMBusWrapperimporttimeclasstemp_humid:  """My class to handle the readings from the SI7021 temp humid sensor  """
  def__init__(self):
    self.address=0x40
    self.humidityCommand=0xF5
    self.tempCommand=0xE0
    self.temp_value=None
    self.humidity_value=None
  defhumidity_temp_set(self):    """Sends command to read humidity. Then reads humidity with a pause between the two bytes.    Temperature then reads as a temp reading is taken by the sensor for compensation for humidity reading    """
    #---HUMIDITY I2C WRITE READ---#
    withSMBusWrapper(1)asbus:
      self.humidity_write=i2c_msg.write(self.address,[self.humidityCommand])
      self.humidity_read=i2c_msg.read(self.address,2)
      bus.i2c_rdwr(self.humidity_write)
      time.sleep(0.25)
      bus.i2c_rdwr(self.humidity_read)
    #---TEMP I2C WRITE READ---#
    withSMBusWrapper(1)asbus:
      self.temp_write=i2c_msg.write(self.address,[self.tempCommand])
      self.temp_read=i2c_msg.read(self.address,2)
      bus.i2c_rdwr(self.temp_write)
      bus.i2c_rdwr(self.temp_read)
  defhumidity_get(self):    """Carries out the maths for the humidity reading and returns it in %    """
    #---HUMIDITY VALUE EDITING---#
    humidity_byte_list=list(self.humidity_read)
    humidity_MSB=humidity_byte_list[0]
    humidity_LSB=humidity_byte_list[1]
    humidity_word=(humidity_MSB<<8)+humidity_LSB
    self.humidity_value=((125.0*humidity_word)/65536.0)-6
    returnround(self.humidity_value,2)
  deftemp_get(self):    """Carries out the maths for the temperature reading and returns it in DegC    """
    #---TEMPERATURE VALUE EDITIING---#
    temp_byte_list=list(self.temp_read)
    temp_MSB=temp_byte_list[0]
    temp_LSB=temp_byte_list[1]
    temp_word=(temp_MSB<<8)+temp_LSB
    self.temp_value=((175.72*temp_word)/65536)-46.85
    returnround(self.temp_value,2)
Could anyone point me in the right direction for writing something similar for this in codesys? Do I have to write a device description or can I just write a function that calls the correct I2C blocks? (whats the deal with the Super^ call also?) I've tried to follow the PDF that comes with the codesys pi controller documentation but I don't find it the easiest thing to follow.
Thanks in advance.
Sam.
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hi all,
I wrote the following in python to read from a SI7021 sensor. I had to the use smBUS2 library that I found on pypi as the original smbus library wouldnt let me read/write bytes in the format that the manual for the SI7021 showed.
Could anyone point me in the right direction for writing something similar for this in codesys? Do I have to write a device description or can I just write a function that calls the correct I2C blocks? (whats the deal with the Super^ call also?) I've tried to follow the PDF that comes with the codesys pi controller documentation but I don't find it the easiest thing to follow.
Thanks in advance.
Sam.