NanoPi通过DS18B20实时采集温度

室温的监控是我们智能家居的一个基本传感器,因为通过监控家里的温度可以通过编程的方式对家里的空调电风扇进行开关控制。并且可以把室温记录到日志文件以便以后进行统计和分析。下面我们讲解NanoPi如何监测室内温度并连接数据线进行系统编程控制。

NanoPi通过DS18B20实时采集温度

DS18B20温度传感器介绍及针脚的定义

该款温度传感器里面封装了一颗TO-92的DS18B20内核芯片。并且从DS18B20读出的温度或要写入DS18B20的信息仅需要一根GPIO针脚就可以驱动这款温度传感器了, 每个传感器都有一个唯一的编号这个在出厂时已经给定了这个序列号。
DS18B20温度传感器介绍及针脚的定义



DS18B20内部采集温度的机制

这里我来介绍DS18B20在低温度系数晶振的震荡频率对室温本身影响很小,所以DS18B20能够比较精准的记录我们日常的温度(温度范围在-55度到+125度之间)。
由于用于产生固定频率的脉冲信号会按照一定的时间周期传递给计数器。因为DS18B20高温度系数晶振会随着日常的温度变化而变化传感器里面的振荡频率也会有明显的变动,所以晶振产生的脉冲信号会作为计数器的脉冲进行输入。这样DS18B20就能够精准的测量温度了。 DS18B20内部采集温度的机制



把DS18B20连接到NanoPi上

1)建议采用杜邦线连接。
2)注意采用3.3V电压就可以了,不需要用5V电压
把DS18B20连接到NanoPi上



安装必要的支持环境

apt-get update 更新系统补丁
apt-get upgrade 更细系统源支持
vim /boot/config.txt
在最后一行手动添加以下参数并重启NANOPI,可以通过断电方式直接重启。
dtoverlay=w1-gpio-pullup,gpiopin=4
ls /sys/bus/w1/devices/查看是否有DS18B20的设备



编写Python程序采集DS18B20温度和NanoPi运行信息

#!/usr/bin/python
import os #包含必要的库文件
def getCPUtemperature():
res = os.popen('vcgencmd measure_temp').readline()
return(res.replace("temp=","").replace("'C\n",""))
def getRAMinfo():
p = os.popen('free')
i = 0
while 1:
i = i + 1
line = p.readline()
if i==2:
return(line.split()[1:4])
def getCPUuse():
return(str(os.popen("top -n1 | awk '/Cpu\(s\):/ {print $2}'").readline().strip()))
def getDiskSpace():
p = os.popen("df -h /")
i = 0
while 1:
i = i +1
line = p.readline()
if i==2:
return(line.split()[1:5])
#从DS18B20读取温度值 def readtemperature():
file=open("/sys/bus/w1/devices/28-0000024a8c0b/w1_slave")
text=file.read()
#close file
file.close()
secondline = text.split("\n")[1]
temperaturedata = secondline.split(" ")[9]
temperature = float(temperaturedata[2:])
temperature = temperature / 1000 这里需要获取十位数的温度
return temperature
# 获取显示CPU的使用信息
CPU_temp = getCPUtemperature()
CPU_usage = getCPUuse()
# 这里可获取与运行内存信息
# Output is in kb, here I convert it in Mb for readability
RAM_stats = getRAMinfo()
RAM_total = round(int(RAM_stats[0]) / 1000,1)
RAM_used = round(int(RAM_stats[1]) / 1000,1)
RAM_free = round(int(RAM_stats[2]) / 1000,1)
# 这里输出磁盘或SD卡的容量信息
DISK_stats = getDiskSpace()
DISK_total = DISK_stats[0]
DISK_used = DISK_stats[1]
DISK_perc = DISK_stats[3]
if __name__ == '__main__':
print('')
print('CPU Temperature = '+CPU_temp)
print('Temperature = '+temperature)
print('CPU Use = '+CPU_usage)
print('')
print('RAM Total = '+str(RAM_total)+' MB')
print('RAM Used = '+str(RAM_used)+' MB')
print('RAM Free = '+str(RAM_free)+' MB')
print('')
print('DISK Total Space = '+str(DISK_total)+'B')
print('DISK Used Space = '+str(DISK_used)+'B')
print('DISK Used Percentage = '+str(DISK_perc))

Syndicate content