10. 1-wire 设备

1-wire总线是仅将单一线用于通信的串行总线(地线和电源线除外)。 DS18B20温度传感器是一个广为人知的1-wire设备,此处我们会显示如何使用1-wire协议读取数据。

运行以下代码,您至少需有DS18S20或DS18B20温度传感器,且传感器的数据线与GPIO12相连接。 您必须给传感器供电,并在数据引脚与电源引脚间连接一个4.7k欧姆的电阻:

import time
import machine
import onewire, ds18x20

# the device is on GPIO12
dat = machine.Pin(12)

# create the onewire object
ds = ds18x20.DS18X20(onewire.OneWire(dat))

# 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()

注意:您必须执行convert_temp()函数以启动温度读数,并在读取数值前等待至少750ms。