主题
单总线温度传感器模块 DS18B20 在 MicroPython 下的应用
演示说明
本次主要演示多个单总线设备如何进行正常工作。由于手头只有两个DS18B20,所以只用了两个,其它数量使用起来一样的操作。
演示代码
由于当前开发板的当前版本固件自带 onewire.py ,因而,此处仅需要加入ds18x20.py文件即可,请在官方github下载 ds18x20.py文件到当前文件夹。部分开发板未包含onewire模块,则需要同时下载模块文件。
Code: Select all
# -*- coding: UTF-8 -*-
u'''
******************************************************************************
* 文 件:DS18B20_Demo.py
* 概 述:温度传感器
* 版 本:V0.10
* 作 者:Robin Chen
* 日 期:2018年5月2日
* 历 史: 日期 编辑 版本 记录
2018年5月2日 Robin Chen V0.10 创建文件
2018年5月7日 Robin Chen V0.11 修改了打印内容,并整理到分类文件夹
******************************************************************************'''
from machine import Pin
import onewire
from ds18x20 import DS18X20
from time import sleep
ow=onewire.OneWire(Pin('A0')) # 此处可修改开发板上所使用的引脚
ds = DS18X20(ow)
rom = ds.scan() # 扫描总线上的DS18B20,获取模块列表
while True:
ds.convert_temp() # 进行温度转换(必备语句)
print('--------------')
for i in range(len(rom)):
dt=ds.read_temp(rom[i]) # 读取温度值
print('DS-',i,':',dt,'℃')
print('--------------')
sleep(3)
DS18B20的工作流程大概是先发送复位信号,使各模块处理等待状态,然后发指令扫描总线上的各模块,并将扫描到的模块地址以元组的形式返回;然后提取各模块的地址,将根据地址将相应的模块存储器中的数据转换为可读的温度值。然后使用函数读出这个值。
注意:在进行read_temp之前,必须先使用convert_temp()进行数值转换,否则读取的数值不会变,即不会更新。
由于时间仓促,加之理解的还不够深入。部分内容如果有不清楚的,可以在下方留言讨论。谢谢!
本岾参考:http://www.elecfans.com/yuanqijian/sens ... 254_a.html