在ESP32上驱动DS18B20温度传感器
引言
在物联网和嵌入式系统中,温度传感器是一种常见的设备,用于测量环境温度。本文将介绍如何在ESP32上驱动DS18B20温度传感器。
ds18b20
DS18B20是一种单总线数字温度传感器,测试温度范围-55℃-125℃
,具有体积小,硬件开销低,抗干扰能力强,精度高的特点。单总线,意味着没有时钟线,只有一根通信线。单总线读写数据是靠控制起始时间和采样时间来完成,所以时序要求很严格,这也是DS18B20
驱动编程的难点。
不过在MicroPython
有现成的API
可以驱动DS18B20
macroPython中DS18B20 设备有一个特定的驱动程序:
import time, ds18x20
ds = ds18x20.DS18X20(ow)
roms = ds.scan()
ds.convert_temp()
time.sleep_ms(750)
for rom in roms:
print(ds.read_temp(rom))
具体详情点击下方链接查看macroPython
手册:
OneWire驱动器
硬件连接
首先,我们需要将DS18B20连接到ESP32。DS18B20有3个引脚,其中1个是数据线(DQ),另外两个是电源线(VDD和GND)。我们将数据线连接到ESP32的GPIO13
引脚,电源线直接连接到ESP32的3.3V
或5V
引脚。
代码实现
以下是在ESP32上驱动DS18B20的Python代码:
from machine import Pin, OneWire
import ds18x20
import time
# 定义DS18B20的数据引脚
GP_ds = Pin(13)
# 初始化OneWire对象
ow = OneWire(GP_ds)
# 初始化DS18X20对象
ds_sensor = ds18x20.DS18X20(ow)
def read_ds_sensor():
roms = ds_sensor.scan()
print('发现设备: ', roms) #打印18B20传感器地址
ds_sensor.convert_temp() #转换当前温度
for rom in roms:
temp = ds_sensor.read_temp(rom)
if isinstance(temp, float):
temp = round(temp, 2)
return temp
def main():
while True:
print(read_ds_sensor())
time.sleep(1)
if __name__ == "__main__":
main()
在这段代码中,我们首先导入了必要的库,然后定义了DS18B20的数据引脚。接着,我们初始化了一个OneWire对象和一个DS18X20对象。在read_ds_sensor
函数中,我们扫描所有的设备,转换温度,并读取温度值。最后,在main
函数中,我们无限循环地读取并打印温度值。
效果演示
我们在wokwi中进行仿真如下图链接电路
在仿真器中修改温度为17
成功在控制台打印温度
wokwi项目地址
通过以上步骤,我们已经成功地在ESP32上驱动了DS18B20温度传感器。这个简单的示例可以帮助你理解如何使用ESP32来读取环境温度,并将其发送到你的物联网系统。