#!/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