树莓派吃灰已久,最近心血来潮就做了这个实时监控温湿度系统(ps:学习中)
1:材料准备:
DHT11温湿度传感器 树莓派 杜邦线
2:连线
VCC 连接树莓派1脚
GND 连接树莓派6脚
DATA 连接树莓派3脚
3:在树莓派上写程序
创建一个目录 --- 进入目录 ----创建主程序wendu.py
sudo mkdir dht11
cd dht11
sudo nano wendu.py (ps:编辑器自选)
将主程序写入
import RPi.GPIO as GPIO
import time
channel =2
data = []
j = 0
GPIO.setmode(GPIO.BCM)
time.sleep(1)
GPIO.setup(channel, GPIO.OUT)
GPIO.output(channel, GPIO.LOW)
time.sleep(0.02)
GPIO.output(channel, GPIO.HIGH)
GPIO.setup(channel, GPIO.IN)
while GPIO.input(channel) == GPIO.LOW:
continue
while GPIO.input(channel) == GPIO.HIGH:
continue
while j < 40:
k = 0
while GPIO.input(channel) == GPIO.LOW:
continue
while GPIO.input(channel) == GPIO.HIGH:
k += 1
if k > 100:
break
if k < 8:
data.append(0)
else:
data.append(1)
j += 1
print "sensor is working."
print data
humidity_bit = data[0:8]
humidity_point_bit = data[8:16]
temperature_bit = data[16:24]
temperature_point_bit = data[24:32]
check_bit = data[32:40]
humidity = 0
humidity_point = 0
temperature = 0
temperature_point = 0
check = 0
for i in range(8):
humidity += humidity_bit[i] * 2 ** (7-i)
humidity_point += humidity_point_bit[i] * 2 ** (7-i)
temperature += temperature_bit[i] * 2 ** (7-i)
temperature_point += temperature_point_bit[i] * 2 ** (7-i)
check += check_bit[i] * 2 ** (7-i)
tmp = humidity + humidity_point + temperature + temperature_point
if check == tmp:
print "temperature :", temperature, "*C, humidity :", humidity, "%"
else:
print "wrong"
print "temperature :", temperature, "*C, humidity :", humidity, "% check :", check, ", tmp :", tmp
mytemp = '%f' %temperature
myhumi = '%f' %humidity
tmp_output = open('/home/pi/dht11/tmp_data.txt', 'w')
hud_output = open('/home/pi/dht11/hum_data.txt', 'w')
tmp_output.write(mytemp)
hud_output.write(myhumi)
tmp_output.close
hud_output.close
GPIO.cleanup()
按Ctrl +X 保存退出
4:
登陆注册好的Onenet中移物联网平台 ,点击开发者中心,创建一个新产品
创建完成后 记住你的APIkey
点击左边的设备列表 添加设备 记住设备ID
点击左边的数据流模板 添加数据流
两个数据流模板添加完成,点击左边的应用管理, 添加设备
编辑应用
添加折线图来监控温湿度变化情况,设置属性,把添加好的数据流模板添加进去 ,温湿度各添加一个折线图
Onenet设置好了
5:在树莓派dht11目录下写上传温度的数据程序 sudo nano tmp.py
import urllib2
import json
import time
import datetime
APIKEY = '你的APIKey'
def http_put():
file = open("/home/pi/dht11/tmp_data.txt")
temperature= float(file.read())
CurTime = datetime.datetime.now()
url='http://api.heclouds.com/devices/你的设备ID/datapoints'
values={'datastreams':[{"id":"temp","datapoints":[{"at":CurTime.isoformat(),"value":temperature}]}]}
print "the time is: %s" %CurTime.isoformat()
print "The upload temperature value is: %.3f" %temperature
jdata = json.dumps(values)
print jdata
request = urllib2.Request(url, jdata)
request.add_header('api-key', APIKEY)
request.get_method = lambda:'POST'
request = urllib2.urlopen(request)
return request.read()
while True:
time.sleep(5)
resp = http_put()
print "OneNET result:\n %s" %resp
time.sleep(5)
注意将你的APIkey 和设备ID填入程序里,写好之后保存退出。
6:同样的写入上传湿度的程序 sudo nano hum.py
根据温度上传的代码改一下就可以了,这里就不再累述(PS:写累了)
在dht11下创建两个txt文件,tmp_data.txt,hum_data.txt (PS:这很重要)
7:设置自动执行(不明白的去查一下资料)
sudo crontab -e
点击2 进入编辑界面 在最下面输入下面的代码
*/**** python/home/pi/dht11/tmp.py
*/**** python/home/pi/dht11/hum.py
*/**** python/home/pi/dht11/wendu.py
这个文件路径是我自己的,不知道自己文件路径的话 pwd 命令 查看一下,写好之后保存退出程序就可以运行了
(ps:如果最后没有做好 ,可以单独运行每个py文件 查找原因。最好给文件目录及下面的文件直接赋予最高权限,不然容易出不来)
8:点击Onenet的设备管理,点击设置好的应用就能看看实时温湿度数据了,这是我的结果,我也是趟了好多雷才成功!