树莓派+DHT11温湿度传感器+yeelink物联网云

来源:互联网 发布:炉石传说盒子mac 编辑:程序博客网 时间:2024/04/27 16:12

一、配置准备

1.DHT11简介

DHT11是一款有已校准数字信号输出的温湿度传感器。 精度湿度+-5%RH, 温度+-2℃,量程湿度20-90%RH, 温度0~50℃。

这里写图片描述

DHT11有四个引脚,分别是VCC,DATA,NC,GND

这里写图片描述

2.电路连接

本博文中python程序使用的是BCM编号方式,17号即pin11接DHT11的DATA,VCC接3.3V,NC悬空,GND接0V,可通过下图找到对应引脚,进行连线。

这里写图片描述

二、用python读取温湿度数据

关于DHT11具体的时序,以及如何操作,在我的博客《 51单片机DHT11温湿度传感器》中有详细分析,有兴趣可以去了解一下,以便你可以看懂下面的python程序。

#!/usr/bin/pythonimport RPi.GPIO as GPIOimport time#BCM编号方式的17对应树莓派的pin11channel = 17data = []j = 0#I/O口使用BCM编号方式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:     continuewhile GPIO.input(channel) == GPIO.HIGH:     continuewhile 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 += 1print "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 = 0humidity_point = 0temperature = 0temperature_point = 0check = 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, ", humidity : " , humidityelse:     print "wrong"     print "temperature : ", temperature, ", humidity : " , humidity, " check : ", check, " tmp : ", tmpGPIO.cleanup()

在python文件的路径下输入命令:

sudo python ./dht11.py

即可获得数据,效果如图:

这里写图片描述

可以看到,当校验不正确时会打印出“wrong”,表示数据错误,在读取一次得到正常的数据。

三、上传数据到yeelink

1.修改python代码

在上面的代码后添加如下代码,即将温度和湿度数据保存到txt文件里:

#数据转换成JSON格式mytemp = '{"value":%f}' %temperaturemyhumi = '{"value":%f}' %humidity#打开文件tmp_output = open('/home/pi/mytest/DHT11/tmp_data.txt', 'w')hud_output = open('/home/pi/mytest/DHT11/hud_data.txt', 'w')#写数据到文本文件中tmp_output.write(mytemp)hud_output.write(myhumi)#关闭文件tmp_output.closehud_output.close

2.新增yeelink.sh脚本

yeelink是一个开源的硬件数据平台,我喜欢把它定义为一个物联网云平台,因为它给我们提供了API接口,我们可以把数据发送到云平台保存起来,也可以随时查看,真的很棒。具体的操作可以查看博主的博客:《 树莓派+USB摄像头+yeelink实现云监控》。

sudo python /home/pi/mytest/DHT11/dht11.pycurl --request POST --data-binary @"/home/pi/mytest/DHT11/tmp_data.txt" --header "U-ApiKey:XXXXXXXXXXXXXXXX" http://api.yeelink.net/v1.0/device/设备号/sensor/传感器号/datapointssleep 10scurl --request POST --data-binary @"/home/pi/mytest/DHT11/hud_data.txt" --header "U-ApiKey:XXXXXXXXXXXXXXXX" http://api.yeelink.net/v1.0/device/设备号/sensor/传感器号/datapoints

“/home/pi/mytest/DHT11/tmp_data.txt”是需要上传到yeelink上的文件的路径,将XXXXXXXXXXXXXXXX替换为自已账户的API Key,后面的URL也需要替换为自己申请的传感器URL。

注意:因为DHT11可以获得温度和湿度两种值,所以我在yeelink添加了两个传感器,便于观察,在这里有两次上传数据,分别是把储存温度值得txt文本和储存湿度值得txt文本通过HTTP协议上传到云端。

3.为脚本增加可执行权限

sudo chmod +x yeelink.sh

4.将脚本加入cronjob定时任务

sudo crontab -e

5.让脚本自动运行

加入下面一行, 让脚本每1分钟运行一次,即每1分钟上传一次数据,然后保存退出

*/1 * * * * /home/pi/mytest/yeelink.sh

注:我给自己的实验新建了几个文件夹,路径如下:/home/pi/mytest/DHT11/,很多操作都是在这个路径下完成的。

实验效果:

温度:
这里写图片描述

湿度:
这里写图片描述

1 0
原创粉丝点击