diff options
Diffstat (limited to 'esp8266/modules/ds18x20.py')
-rw-r--r-- | esp8266/modules/ds18x20.py | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/esp8266/modules/ds18x20.py b/esp8266/modules/ds18x20.py new file mode 100644 index 0000000000..66983f5bcc --- /dev/null +++ b/esp8266/modules/ds18x20.py @@ -0,0 +1,37 @@ +# DS18x20 temperature sensor driver for MicroPython. +# MIT license; Copyright (c) 2016 Damien P. George + +_CONVERT = const(0x44) +_RD_SCRATCH = const(0xbe) +_WR_SCRATCH = const(0x4e) + +class DS18X20: + def __init__(self, onewire): + self.ow = onewire + + def scan(self): + return [rom for rom in self.ow.scan() if rom[0] == 0x28] + + def convert_temp(self): + self.ow.reset(True) + self.ow.writebyte(self.ow.SKIP_ROM) + self.ow.writebyte(_CONVERT) + + def read_scratch(self, rom): + self.ow.reset(True) + self.ow.select_rom(rom) + self.ow.writebyte(_RD_SCRATCH) + buf = self.ow.read(9) + if self.ow.crc8(buf): + raise Exception('CRC error') + return buf + + def write_scratch(self, rom, buf): + self.ow.reset(True) + self.ow.select_rom(rom) + self.ow.writebyte(_WR_SCRATCH) + self.ow.write(buf) + + def read_temp(self, rom): + buf = self.read_scratch(rom) + return (buf[1] << 8 | buf[0]) / 16 |