树莓派自动播报温湿度到QQ空间、微博

【树莓派自动播报温湿度到QQ空间、微博】原文链接
这是个比较无聊的应用 。。。灵感来自于一个叫做“古城钟楼”的微博账号,此账号每天都会定点报时,除此之外没有其他任何内容,以此吸引了近50万粉丝!

树莓派自动播报温湿度到QQ空间、微博

文章插图
报时什么的太无聊了,不如每天定时读取室内温度、湿度并自动发说说、微博播报温度,在成为网红的道路上迈开第一步-.
最终实现的效果:
树莓派自动播报温湿度到QQ空间、微博

文章插图

树莓派自动播报温湿度到QQ空间、微博

文章插图
硬件相关
需要的硬件:
树莓派,DHT11传感器(DHT22也可以,温度测量范围更大,但要贵一些)
推荐购买像这样的DHT11模块,电阻什么都弄好了,插上就能用
树莓派自动播报温湿度到QQ空间、微博

文章插图
DHT11模块有三个引脚:VCC供电,DAT数据,GND接地,参考树莓派引脚图,VCC接pin2或pin4,DAT接pin12(),GND接pin6,接好后如果电源指示灯亮了应该就没什么问题了 。
如果你购买的是不带集成板的裸模块,还需要在VCC和DAT之间串一个电阻(应该是串吧 。。物理不好),像这样(图来自网络)
树莓派自动播报温湿度到QQ空间、微博

文章插图
开始写代码
发说说是件让人头疼的试,QQ空间登录加密机制比较繁琐,好在上有个针对的QQlib项目完美解决了这个问题 。
树莓派自动播报温湿度到QQ空间、微博

文章插图
1.安装必要组件
由于我们将在中实现这个应用,而树莓派默认版本是2,但可以通过“”命令召唤,在以下的步骤中请分清 和.
先su一下
安装:直接执行 自动安装:
wget https://bootstrap.pypa.io/ez_setup.py -O - | python3
安装:
git clone git://github.com/kennethreitz/requests.gitcd requestspython3 setup.py install
安装rsa:
git clone https://github.com/sybrenstuvel/python-rsa.gitcd python-rsapython3 setup.py install
安装QQlib:
git clone https://github.com/JetLua/qqlib.gitcd qqlibpython3 setup.py install
所需组件就这些,接下来要写代码了 。代码我已经托管到,可以直接Clone下来用:
这里给出核心脚本的注释版本:
Python#!/usr/bin/pythonimport RPi.GPIO as GPIOimport timeimport qqlibimport urllibimport os#设置DAT口的GPIO编号channel = 18#下面的依次是QQ号、QQ密码、微博账号、微博密码QQnum=""QQpass=""weiboUm=""weiboPass=""#历史上的今天def histoday():#注意 这里是我自用的接口,里面会有点奇怪的东西,推荐(必须)更换为自己的!!content = urllib.request.urlopen('https://aoaoao.me/api/today.php').read()return (content.decode('utf-8'))#读取昨日温度、计算温差、写入今日温度def old_text(temperature):#注意!这里请更改为你自己的目录file_r = open('/home/pi/shuo/log.txt')data_old = file_r.read()file_r.close( )log_text = str(temperature)file_object = open('log.txt','w')file_object.write(log_text)file_object.close()if(temperature>int(data_old)):return "今天的温度相比昨日此时高了"+str(temperature-int(data_old))+"℃"elif(temperature == int(data_old)):return "今天的温度与昨日此时持平哦"else:return "今天的温度相比昨日此时低了"+str(int(data_old)-temperature)+"℃"#获取传感器数据def getdata(channel):data = http://www.kingceram.com/post/[]j = 0while GPIO.input(channel) == GPIO.LOW:continuewhile GPIO.input(channel) == GPIO.HIGH:continuewhile j < 40:k = 0while GPIO.input(channel) == GPIO.LOW:continuewhile GPIO.input(channel) == GPIO.HIGH:k += 1if k> 100:breakif k