MicroPython 开发ESP32应用教程 之 onewire及其应用DS18B20温度传感器的驱动

这一课应该是我们最后一课单个知识主题为主的课程,后面的课程以分析实例为主。

 一、OneWire协议简介

OneWire(单总线)是一种低成本、低功耗的串行通信协议,仅需一根数据线即可实现主从设备之间的通信。其优势在于简化硬件布线,适用于传感器、存储器等外设的接入。在物联网场景中,ESP32结合MicroPython的OneWire驱动模块,可高效连接DS18B20温度传感器、EEPROM等设备。而且可以同时并连多个从机设备,比如多只DS8B20温度传感器同时连在一根单线总线上,这样就可以把温度传感器放在许多不同的地方。这一特性在HVAC 环境控制、探测建筑物、仪器或机器的温度以及过程监测和控制等方面非常有用。

最新版本的MicroPython for ESP32S3已经内置了DS18X20库,我们只需要简单的调用几个API接口就能方便的控制读取温度值,大大简化了我们的开发工作,我们几乎不用考虑DS18B20温度传感器的工作原理,更不用考虑各种控制命令,所以我们对DS18B20温度传感器不作更多的介绍,有兴趣的朋友可以自己搜索相关文档资料。

二、环境配置与硬件准备

 1. 准备好支持micropython的ESP32s3开发板
  如果手上的ESP32开发板不支持micropython,可以下载相应的固件并烧录到我们的开发板上。具体 操作说明请参考:

MicroPython 开发ESP32应用教程 之 开发环境搭建

 2. 硬件连接
以DS18B20温度传感器为例:

DS18B20ESP32S3
VCCVCC
GNDGND
DQIO21

        DS18B20的数据线(DQ)接ESP32的GPIO21,需外接4.7kΩ上拉电阻至3.3V电源(实测不接也能工作)。

        DS18B20的供电方式相对比较灵活,大家可以查阅厂家提供的规格书。

 三、基础应用案例

1、初始化

from machine import Pin
import onewire
from ds18x20 import DS18X20

# 初始化OneWire总线
ow = onewire.OneWire(Pin(4))
#初始化DS18X20
ds_18b20= DS18X20(ow)

2、扫描总线上的从机设备(这里我们特指DS18B20温度传感器)
 

# 扫描设备
roms = ds_18b20.scan()
if len(roms) > 0 :
    print("Found devices:", roms)

3、温度转换

启动一次温度转换而无需其他数据。温度转换命令被执行,而后DS1820 保持等待状
态。如果总线控制器在这条命令之后跟着发出读时间隙,而DS1820 又忙于做时间转换的话,
DS1820 将在总线上输出“0”,若温度转换完成,则输出“1”。如果使用寄生电源,总线控
制器必须在发出这条命令后立即起动强上拉,并保持500ms。
 

    ds_18b20.convert_temp()
    time.sleep_ms(750)

4、读取DS18B20温度数据

    for rom in roms:
        temp = ds_18b20.read_temp(rom)
#        print(temp)
        if isinstance(temp, float):
            temp = round(temp, 2)
            return temp

四、完整代码

from machine import Pin
import onewire
import ds18x20
from micropython import const
import gc
import time

# 初始化OneWire总线
ow = onewire.OneWire(Pin(21))
#初始化DS18X20
ds_18b20 = ds18x20.DS18X20(ow)

def read_sensor():
    # 扫描设备
    roms = ds_18b20.scan()
#    if len(roms) > 0 :
#        print("Found devices:", roms)    # 获取数值
    ds_18b20.convert_temp()
    time.sleep_ms(750)
    for rom in roms:
        temp = ds_18b20.read_temp(rom)
#        print(temp)
        if isinstance(temp, float):
            temp = round(temp, 2)
            return temp


if __name__ == "__main__":
    umber = read_sensor()
    if umber is not None:
        float(umber)
        print( float(umber))

五、总结

MicroPython为ESP32提供了简洁的OneWire接口,极大简化了单总线设备的开发流程。通过本文案例,开发者可快速实现温度监测,并扩展至更复杂的物联网应用。实际开发中需注意硬件稳定性与协议细节,结合ESP32的多功能外设,可构建高效可靠的嵌入式系统。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永远的元子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值