12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- --'
- -- 18b20 one wire example for NODEMCU
- -- NODEMCU TEAM
- -- LICENCE: http://opensource.org/licenses/MIT
- -- Vowstar <vowstar@nodemcu.com>
- --'
- pin = 9
- ow.setup(pin)
- count = 0
- repeat
- count = count + 1
- addr = ow.reset_search(pin)
- addr = ow.search(pin)
- tmr.wdclr()
- until((addr ~= nil) or (count > 100))
- if (addr == nil) then
- print("No more addresses.")
- else
- print(addr:byte(1,8))
- crc = ow.crc8(string.sub(addr,1,7))
- if (crc == addr:byte(8)) then
- if ((addr:byte(1) == 0x10) or (addr:byte(1) == 0x28)) then
- print("Device is a DS18S20 family device.")
- repeat
- ow.reset(pin)
- ow.select(pin, addr)
- ow.write(pin, 0x44, 1)
- tmr.delay(1000000)
- present = ow.reset(pin)
- ow.select(pin, addr)
- ow.write(pin,0xBE,1)
- print("P="..present)
- data = nil
- data = string.char(ow.read(pin))
- for i = 1, 8 do
- data = data .. string.char(ow.read(pin))
- end
- print(data:byte(1,9))
- crc = ow.crc8(string.sub(data,1,8))
- print("CRC="..crc)
- if (crc == data:byte(9)) then
- t = (data:byte(1) + data:byte(2) * 256)
- -- handle negative temperatures
- if (t > 0x7fff) then
- t = t - 0x10000
- end
- if (addr:byte(1) == 0x28) then
- t = t * 625 -- DS18B20, 4 fractional bits
- else
- t = t * 5000 -- DS18S20, 1 fractional bit
- end
- t1 = t / 10000
- t2 = t % 10000
- print("Temperature= "..t1.."."..t2.." Centigrade")
- end
- tmr.wdclr()
- until false
- else
- print("Device family is not recognized.")
- end
- else
- print("CRC is not valid!")
- end
- end
|