import machine, onewire, ds18x20, time
ds_pin = machine.Pin(4) # DS18B20 数据引脚(根据实际接线调整)
ow = onewire.OneWire(ds_pin) # 初始化单总线
ds = ds18x20.DS18X20(ow) # 初始化 DS18X20 驱动
roms = ds.scan() # 扫描总线上所有 DS18B20(返回传感器地址列表)
print('Found DS18x20 devices: ', roms)
if not roms: # 优化:如果没扫描到传感器,直接退出(避免后续报错)
print("No DS18B20 found! Check wiring.")
raise SystemExit # 终止程序
while True:
ds.convert_temp() # 发送温度转换命令(所有传感器同时开始转换)
time.sleep_ms(750) # 等待转换完成(DS18B20 转换需要 ~750ms,不可省略)
# 遍历所有传感器,读取对应地址的温度(修复核心错误)
for i, rom in enumerate(roms):
temp = ds.read_temp(rom) # 用循环变量 rom(当前传感器地址)读取温度
print(f"Sensor {i+1} Temp: {temp:.2f} °C") # 区分不同传感器,添加温度单位
time.sleep(1) # 间隔1秒再次读取