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
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
from machine import Pin
import onewire 
import time, ds18x20
# 创建one wire总线,引脚为P0
ow = onewire.OneWire(Pin(Pin.P0)) 
# 实例DS18X20类
ds = ds18x20.DS18X20(ow)
# 扫描总线上的DS18B20,获取设备列表
roms = ds.scan()  

while True:
    # 转换温度值,每次获取温度前必须调用convert_temp,否则温度数据不会更新
    ds.convert_temp()
    # convert_temp后至少等待750ms
    time.sleep_ms(750)
    # 返回总线的上ds18b20设备的温度值
    for rom in roms:
        print('Device %s temperature is %d'%(bytes(rom),ds.read_temp(rom)))