这一课应该是我们最后一课单个知识主题为主的课程,后面的课程以分析实例为主。
一、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温度传感器为例:
DS18B20 | ESP32S3 |
VCC | VCC |
GND | GND |
DQ | IO21 |
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的多功能外设,可构建高效可靠的嵌入式系统。