ds18x20 --- ds18b20温度传感器驱动

one wire总线是一种串行总线,仅使用一根电线进行通信(除了用于接地和电源的电线)。DS18B20温度传感器是一种非常流行的单线设备,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。




https://potentiallabs.com/cart/image/cache/catalog/nov-dec/DS18B20-500x500-800x800.jpg https://www.botshop.co.za/wp-content/uploads/2018/06/ds18b20-module.png https://imgaz.staticbg.com/thumb/large/oaupload/banggood/images/89/FC/cebe2df9-a7d2-4f28-8477-9fd5ffc0ab46.jpg
  • 独特的onewire(单总线)接口方式,DS18B20在与微处理器连接时仅需要一条口线即可实现微处理器与DS18B20的双向通讯。

  • 测温范围 -55℃~+125℃,

  • 支持多点组网功能,多个DS18B20可以并联在唯一的三线上,最多只能并联8个,实现多点测温,如果数量过多,会使供电电源电压过低,从而造成信号传输的不稳定。

  • 工作电源: 3.0~5.5V/DC



../../_images/ds18x20_res.jpeg

如果你使用的ds18b20单个器件,为保证数据传输稳定,信号OUT引脚需接4.7K的上拉电阻。


DS18X20类

class ds18x20.DS18X20(onewire)

构建DS18X20类。

  • onewire - one wire实例对象

DS18X20.scan()

扫描单总线上的ds18b20设备,返回设备地址的列表。

DS18X20.convert_temp()

获取采样温度并进行温度单位转换。

DS18X20.read_temp(rom)

返回该设备的温度值。注意,在 convert_temp() 转换温度后,至少需要等待750毫秒,才能读取温度值。

  • rom - 设备地址

示例-ds18b20
 1from machine import Pin
 2import onewire 
 3import time, ds18x20
 4# 创建one wire总线,引脚为P0
 5ow = onewire.OneWire(Pin(Pin.P0)) 
 6# 实例DS18X20类
 7ds = ds18x20.DS18X20(ow)
 8# 扫描总线上的DS18B20,获取设备列表
 9roms = ds.scan()  
10
11while True:
12    # 转换温度值,每次获取温度前必须调用convert_temp,否则温度数据不会更新
13    ds.convert_temp()
14    # convert_temp后至少等待750ms
15    time.sleep_ms(750)
16    # 返回总线的上ds18b20设备的温度值
17    for rom in roms:
18        print('Device %s temperature is %d'%(bytes(rom),ds.read_temp(rom)))