树莓派+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/,很多操作都是在这个路径下完成的。
实验效果:
温度:
湿度:
- 树莓派+DHT11温湿度传感器+yeelink物联网云
- 树莓派读取温湿度传感器DHT11
- 树莓派的GPIO - DHT11温湿度传感器
- 树莓派连接DHT11温湿度传感器(python)
- 树莓派3 B+ 读取温湿度传感器DHT11
- 树莓派3B + DHT11 + Yeelink云平台(实现温湿度远程监控)
- 温湿度传感器DHT11
- DHT11温湿度传感器
- 温湿度传感器-DHT11
- Arduino - DHT11温湿度传感器
- arduino DHT11 温湿度传感器
- DHT11数字温湿度传感器
- 温湿度传感器---DHT11
- DHT11温湿度传感器
- 温湿度传感器之DHT11
- 传感器系列 温湿度传感器DHt11
- 数字温湿度传感器DHT11使用
- 温湿度传感器DHT11的数据处理
- 项目导包-->V7包报错及解决方法
- Java操作远程共享资源(JCIFS)
- 韩顺平 javascript教学视频_学习笔记8_js系统函数_js函数调用方式
- 字符串的序列化
- 网页设计和网页开发人员常用到的Google Chrome扩展
- 树莓派+DHT11温湿度传感器+yeelink物联网云
- 使用Meshlab 的网格细分
- Android消息机制源码分析
- 虚幻4全局函数类蓝图(蓝图函数宏库)
- jersey获取各个参数的总结
- myeclipse10 2014(2015),终极破解方案
- 【YouXue 1035】计算cosx的近似值
- LeetCode 63. Unique Paths II
- Spring和springmvc父子容器关系