Source code for PyExpLabSys.drivers.omron_d6fph
"""Hint for implementation found at http://forum.arduino.cc/index.php?topic=285116.0 """
import smbus
import time
from PyExpLabSys.common.supported_versions import python2_and_3
python2_and_3(__file__)
[docs]class OmronD6fph(object):
"""Class for reading pressure and temperature from Omron D6F-PH series
Ranging not implemented for all models"""
[docs] def __init__(self):
self.bus = smbus.SMBus(1)
self.device_address = 0x6C
self.full_range = 1000.0
self.init_device()
[docs] def init_device(self):
""" Sensor needs to be initiated after power up """
init_command = [0x0B, 0x00]
self.bus.write_i2c_block_data(self.device_address, 0, init_command)
[docs] def read_value(self, command):
""" Read a value from the sensor """
mcu_mode_command = [0xD0, 0x40, 0x18, 0x06]
self.bus.write_i2c_block_data(self.device_address, 0, mcu_mode_command)
time.sleep(0.033)
self.bus.write_i2c_block_data(self.device_address, 0, command)
self.bus.write_byte(self.device_address, 0x07)
high = self.bus.read_byte(self.device_address)
low = self.bus.read_byte(self.device_address)
value = int(hex(high) + hex(low)[2:].zfill(2), 16)
return value
[docs] def read_pressure(self):
""" Read the pressure value """
value = self.read_value([0xD0, 0x51, 0x2C])
# TODO: Implement range calculation for all sensor models
pressure = (value - 1024) * self.full_range / 60000 - self.full_range / 2
return pressure
[docs] def read_temperature(self):
""" Read the temperature value """
value = self.read_value([0xD0, 0x61, 0x2C])
temperature = (value - 10214) / 37.39
return temperature
if __name__ == '__main__':
OMRON = OmronD6fph()
print(OMRON.read_pressure())
print(OMRON.read_temperature())