10. 控制 1-wire 设备

1-wire 总线是一种串行总线,它只使用单线进行通信(除了接地线和电源线)。DS18B20 温度传感器是一种非常流行的 1-wire 设备,这里我们将展示如何使用 onewire 模块从此类设备中读取数据。

要使以下代码工作,您需要至少有一个 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()函数以启动温度读数,然后在读取该值之前至少等待 750 毫秒。