温度传感器(DS18B20)
前言
相信没有电子爱好者不知道DS18B20的,DS18B20是常用的数字温度传感器,其输出的是数字信号,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。DS18B20数字温度传感器接线方便,封装成后可应用于多种场合,如管道式,螺纹式,磁铁吸附式,不锈钢封装式,型号多种多样。
主要根据应用场合的不同而改变其外观。封装后的DS18B20可用于电缆沟测温,高炉水循环测温,锅炉测温,机房测温,农业大棚测温,洁净室测温,弹药库测温等各种非极限温度场合。耐磨耐碰,体积小,使用方便,封装形式多样,适用于各种狭小空间设备数字测温和控制领域。

DS18B20温度传感器

DS18B20金属探头封装
实验平台
pyWiFi-ESP32-S3 和 pyBase开发底板。DS18B20温度传感器位于右上方。

实验目的
通过MicroPython编程采集DS18B20传感器温度数据,并在OLED上显示。
实验讲解
DS18B20是单总线驱动(onewire)传感器,也就是说只占用1个IO口。我们来看看原理图:

可以看到DS18B20传感器连接到了pyBase的X11引脚上。也就是连接到pyWiFi-ESP32-S3的引脚2,如下图所示:

也就是说我们需要针对引脚2编写程序来驱动DS18B20。那么我们需要自己来编写驱动么?如果你有兴趣的可以自己尝试一下。这部分我们01Studio已经收集整理和编写好了,单总线模块文件是:onewire.py,DS18B20模块的文件是ds18x20.py。如果你学习过前面基于STM32平台应该不陌生。而对于ESP32-S3,这两个模块已经集成到了初始化固件中,也就是说我们可以直接在main.py导入模块并调用即可!
单总线模块onewire和ds18x20模块说明如下:
onewire对象
构造函数
ow = onewire.OneWire(machine.Pin(id))
构建单总线对象
id:芯片引脚编号。如:1、2。
使用方法
ow.scan()
扫描总线上的设备。返回设备地址,支持多设备同时挂载。
ow.reset()
总线设备复位。
ow.readbyte()
读1个字节。
ow.readbyte()
读1个字节。
ow.writebyte(0x12)
写入1个字节。
ow.write('123')
写入多个字节。
ow.select_rom(b'12345678')
根据ROM编号选择总线上指定设备。
ds18x20对象
构造函数
ds = ds18x20.DS18X20(ow)
构建DS18B20传感器对象。
ow:定义好的单总线对象。
使用方法
ds.scan()
扫描总线上的DS18B20设备。返回设备地址,支持多设备同时挂载。
ds.convert_temp()
温度转换。
ds.read_temp(rom)
获取温度值。rom:表示对应的设备号。
大部分场景下温度的变化不会太频繁,我们可以每隔1秒采集一次,显示精度为小数点后2位,基本满足大部分应用需求。代码编写流程如下:
参考代码
'''
实验名称:温度传感器DS18B20
版本:v1.0
平台:pyWiFi ESP32-S3
作者:01Studio
说明:通过编程采集温度数据,并在OLED上显示。。
'''
#引用相关模块
from machine import Pin,SoftI2C,Timer
from ssd1306 import SSD1306_I2C
import onewire,ds18x20,time
#初始化相关模块
i2c = SoftI2C(sda=Pin(42), scl=Pin(40))
oled = SSD1306_I2C(128, 64, i2c, addr=0x3c)
#初始化DS18B20
ow= onewire.OneWire(Pin(2)) #使能单总线
ds = ds18x20.DS18X20(ow) #传感器是DS18B20
rom = ds.scan() #扫描单总线上的传感器地址,支持多个传感器同时连接
def temp_get(tim):
ds.convert_temp()
temp = ds.read_temp(rom[0]) #温度显示,rom[0]为第1个DS18B20
#OLED数据显示
oled.fill(0) #清屏背景黑色
oled.text('MicroPython', 0, 0)
oled.text('Temp test:',0,20)
oled.text(str('%.2f'%temp)+' C',0,40) #显示temp,保留2位小数
oled.show()
#开启RTOS定时器,编号为1
tim = Timer(1)
tim.init(period=1000, mode=Timer.PERIODIC,callback=temp_get) #周期为1000ms
实验结果
实验使用到OLED显示屏,记得同时将ssd1306.py文件拷贝到设备中。
运行代码,可以在OLED看到采集到的温度信息:

DS18B20作为我们第一个实验传感器,使用MicroPython编程非常容易就用起来了,而且精度和稳定性丝毫没有影响。温度传感器只是一个敲门砖,接下来我们将会学习更多的传感器应用。