summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
authorDamien George <damien.p.george@gmail.com>2016-08-29 12:12:49 +1000
committerDamien George <damien.p.george@gmail.com>2016-08-29 12:12:49 +1000
commit9fba618356679b0eede00b7cd746d1a53e6b3772 (patch)
treed85db417528ed3338cc5e75ded4d888fcd4df4ea
parented0a06a93fc275e4f3980b81e4e5314ed63279c6 (diff)
downloadmicropython-9fba618356679b0eede00b7cd746d1a53e6b3772.tar.gz
micropython-9fba618356679b0eede00b7cd746d1a53e6b3772.zip
esp8266/modules: Split onewire.py into OneWire and DS18X20 driver.
The OneWire class is now in its own onewire.py module, and the temperature sensor class is in its own ds18x20.py module. The latter is renamed to DS18X20 to reflect the fact that it will support both the "S" and "B" variants of the device. These files are moved to the modules/ subdirectory to take advantage of frozen bytecode.
-rw-r--r--esp8266/modules/ds18x20.py37
-rw-r--r--esp8266/modules/onewire.py (renamed from esp8266/scripts/onewire.py)45
2 files changed, 42 insertions, 40 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
diff --git a/esp8266/scripts/onewire.py b/esp8266/modules/onewire.py
index 686616950a..af5675649b 100644
--- a/esp8266/scripts/onewire.py
+++ b/esp8266/modules/onewire.py
@@ -15,8 +15,11 @@ class OneWire:
self.pin = pin
self.pin.init(pin.OPEN_DRAIN)
- def reset(self):
- return _ow.reset(self.pin)
+ def reset(self, required=False):
+ reset = _ow.reset(self.pin)
+ if required and not reset:
+ raise OneWireError
+ return reset
def readbit(self):
return _ow.readbit(self.pin)
@@ -87,41 +90,3 @@ class OneWire:
def crc8(self, data):
return _ow.crc8(data)
-
-class DS18B20:
- CONVERT = const(0x44)
- RD_SCRATCH = const(0xbe)
- WR_SCRATCH = const(0x4e)
-
- 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):
- if not self.ow.reset():
- raise OneWireError
- self.ow.writebyte(SKIP_ROM)
- self.ow.writebyte(CONVERT)
-
- def read_scratch(self, rom):
- if not self.ow.reset():
- raise OneWireError
- self.ow.select_rom(rom)
- self.ow.writebyte(RD_SCRATCH)
- buf = self.ow.read(9)
- if self.ow.crc8(buf):
- raise OneWireError
- return buf
-
- def write_scratch(self, rom, buf):
- if not self.ow.reset():
- raise OneWireError
- 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