树莓派python实现ds18b20温度读取和mqtt发布订阅

#!/usr/bin/python3
#----------------------------------------------------------------
#   Note:
#       ds18b20's data pin must be connected to pin4.
#       replace the 28-XXXXXXXXX as yours.
#----------------------------------------------------------------

import os  #导入操作系统的库os
import time

os.system('modprobe w1-gpio')
os.system('modprobe w1-therm')

def open_dir_temp():
    dir = '/sys/bus/w1/devices/28-3c01f0954309/w1_slave'
    #树莓派单总线1-wire是温度数据文件的地址
    file = open(dir)  
    #os.open(file, flags[, mode])打开一个文件
    text = file.read()       
    file.close()
    return text

def read_temp():
    text = open_dir_temp()
    fristline = text.split("\n")[0]
    #   string.split(str="", num=string.count(str))
    #   以 str 为分隔符切片 string,如果 num 有指定值,则仅分隔 num+ 个子字符串
    #计算机里序号是从0开始计算,取0即是第1行  
    if fristline.split()[-3:] != 'YES':
    #判断第一行倒数第三个字符串是否为YES
        time.sleep(0.3)
        secondline = text.split("\n")[1]
        temperature = secondline.find('t=')
    #寻找t=的字符串的位置
        if temperature != -1:
            temperature = float(secondline[temperature+2:]) / 1000
     #取字符串(如:t=17375)第2位及以后部分,即数字部分17375   
            return temperature
    
def loop():
    while True:
        if read_temp() != None:
           print('ds18b20’s temperature = %0.3f'%read_temp())
           time.sleep(1)
           #以单精度浮点小数的形式输出,保留三位小数
def destroy():
    pass

if __name__ == '__main__':
    try:
        loop()
    except KeyboardInterrupt:
        destroy()

执行以上程序输出结果为:

ds18b20’s temperature = 25.062
ds18b20’s temperature = 25.125
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值