8000 esp8266/modules: Split onewire.py into OneWire and DS18X20 driver. · danni/micropython@9fba618 · GitHub
[go: up one dir, main page]

Skip to content

Commit 9fba618

Browse files
committed
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.
1 parent ed0a06a commit 9fba618

File tree

2 files changed

+42
-40
lines changed

2 files changed

+42
-40
lines changed

esp8266/modules/ds18x20.py

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
# DS18x20 temperature sensor driver for MicroPython.
2+
# MIT license; Copyright (c) 2016 Damien P. George
3+
4+
_CONVERT = const(0x44)
5+
_RD_SCRATCH = const(0xbe)
6+
_WR_SCRATCH = const(0x4e)
7+
8+
class DS18X20:
9+
def __init__(self, onewire):
10+
self.ow = onewire
11+
12+
def scan(self):
13+
return [rom for rom in self.ow.scan() if rom[0] == 0x28]
14+
15+
def convert_temp(self):
16+
self.ow.reset(True)
17+
self.ow.writebyte(self.ow.SKIP_ROM)
18+
self.ow.writebyte(_CONVERT)
19+
20+
def read_scratch(self, rom):
21+
self.ow.reset(True)
22+
self.ow.select_rom(rom)
23+
self.ow.writebyte(_RD_SCRATCH)
24+
buf = self.ow.read(9)
25+
if self.ow.crc8(buf):
26+
raise Exception('CRC error')
27+
return buf
28+
29+
def write_scratch(self, rom, buf):
30+
self.ow.reset(True)
31+
self.ow.select_rom(rom)
32+
self.ow.writebyte(_WR_SCRATCH)
33+
self.ow.write(buf)
34+
35+
def read_temp(self, rom):
36+
buf = self.read_scratch(rom)
37+
return (buf[1] << 8 | buf[0]) / 16

esp8266/scripts/onewire.py renamed to esp8266/modules/onewire.py

Lines changed: 5 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,11 @@ def __init__(self, pin):
1515
self.pin = pin
1616
self.pin.init(pin.OPEN_DRAIN)
1717

18-
def reset(self):
19-
return _ow.reset(self.pin)
18+
def reset(self, required=False):
19+
reset = _ow.reset(self.pin)
20+
if required and not reset:
21+
raise OneWireError
22+
return reset
2023

2124
def readbit(self):
2225
return _ow.readbit(self.pin)
@@ -87,41 +90,3 @@ def _search_rom(self, l_rom, diff):
8790

8891
def crc8(self, data):
8992
return _ow.crc8(data)
90-
91-
class DS18B20:
92-
CONVERT = const(0x44)
93-
RD_SCRATCH = const(0xbe)
94-
WR_SCRATCH = const(0x4e)
95-
96-
def __init__(self, onewire):
97-
self.ow = onewire
98-
99-
def scan(self):
100-
return [rom for rom in self.ow.scan() if rom[0] == 0x28]
101-
102-
def convert_temp(self):
103-
if not self.ow.reset():
104-
raise OneWireError
105-
self.ow.writebyte(SKIP_ROM)
106-
self.ow.writebyte(CONVERT)
107-
108-
def read_scratch(self, rom):
109-
if not self.ow.reset():
110-
raise OneWireError
111-
self.ow.select_rom(rom)
112-
self.ow.writebyte(RD_SCRATCH)
113-
buf = self.ow.read(9)
114-
if self.ow.crc8(buf):
115-
raise OneWireError
116-
return buf
117-
118-
def write_scratch(self, rom, buf):
119-
if not self.ow.reset():
120-
raise OneWireError
121-
self.ow.select_rom(rom)
122-
self.ow.writebyte(WR_SCRATCH)
123-
self.ow.write(buf)
124-
125-
def read_temp(self, rom):
126-
buf = self.read_scratch(rom)
127-
return (buf[1] << 8 | buf[0]) / 16

0 commit comments

Comments
 (0)
0