2016-05-03 01:39:04 +01:00
|
|
|
Controlling 1-wire devices
|
|
|
|
==========================
|
|
|
|
|
|
|
|
The 1-wire bus is a serial bus that uses just a single wire for communication
|
|
|
|
(in addition to wires for ground and power). The DS18B20 temperature sensor
|
|
|
|
is a very popular 1-wire device, and here we show how to use the onewire module
|
|
|
|
to read from such a device.
|
|
|
|
|
2016-08-29 03:52:50 +01:00
|
|
|
For the following code to work you need to have at least one DS18S20 or DS18B20 temperature
|
2016-05-03 01:39:04 +01:00
|
|
|
sensor with its data line connected to GPIO12. You must also power the sensors
|
|
|
|
and connect a 4.7k Ohm resistor between the data pin and the power pin. ::
|
|
|
|
|
|
|
|
import time
|
|
|
|
import machine
|
2016-08-29 03:52:50 +01:00
|
|
|
import onewire, ds18x20
|
2016-05-03 01:39:04 +01:00
|
|
|
|
|
|
|
# the device is on GPIO12
|
|
|
|
dat = machine.Pin(12)
|
|
|
|
|
|
|
|
# create the onewire object
|
2016-08-29 03:52:50 +01:00
|
|
|
ds = ds18x20.DS18X20(onewire.OneWire(dat))
|
2016-05-03 01:39:04 +01:00
|
|
|
|
|
|
|
# scan for devices on the bus
|
|
|
|
roms = ds.scan()
|
|
|
|
print('found devices:', roms)
|
|
|
|
|
|
|
|
# loop 10 times and print all temperatures
|
|
|
|
for i in range(10):
|
|
|
|
print('temperatures:', end=' ')
|
|
|
|
ds.convert_temp()
|
|
|
|
time.sleep_ms(750)
|
|
|
|
for rom in roms:
|
|
|
|
print(ds.read_temp(rom), end=' ')
|
|
|
|
print()
|
|
|
|
|
|
|
|
Note that you must execute the ``convert_temp()`` function to initiate a
|
|
|
|
temperature reading, then wait at least 750ms before reading the value.
|