树莓派自动播报温湿度到QQ空间、微博
原文链接 https://aoaoao.me/951.html
这是个比较无聊的应用。。。灵感来自于一个叫做“古城钟楼”的微博账号,此账号每天都会定点报时,除此之外没有其他任何内容,以此吸引了近50万粉丝!
报时什么的太无聊了,不如每天定时读取室内温度、湿度并自动发说说、微博播报温度,在成为网红的道路上迈开第一步Cache_-647e6a9dd5a8048a.
最终实现的效果:
硬件相关
需要的硬件:
树莓派,DHT11传感器(DHT22也可以,温度测量范围更大,但要贵一些)
推荐购买像这样的DHT11模块,电阻什么都弄好了,插上就能用
DHT11模块有三个引脚:VCC供电,DAT数据,GND接地,参考树莓派引脚图,VCC接pin2或pin4,DAT接pin12(GPIO18),GND接pin6,接好后如果电源指示灯亮了应该就没什么问题了。
如果你购买的是不带集成板的裸模块,还需要在VCC和DAT之间串一个电阻(应该是串吧。。物理不好),像这样(图来自网络)
开始写代码
Python发说说是件让人头疼的试,QQ空间登录加密机制比较繁琐,好在Github上有个针对python3的QQlib项目完美解决了这个问题。
1.安装必要组件
由于我们将在Python3中实现这个应用,而树莓派默认Python版本是2,但可以通过“python3”命令召唤Python3,在以下的步骤中请分清Python 和Python3.
先su一下
安装setuptools:直接执行 自动安装:
wget https://bootstrap.pypa.io/ez_setup.py -O - | python3
安装requests:
git clone git://github.com/kennethreitz/requests.git
cd requests
python3 setup.py install
安装rsa:
git clone https://github.com/sybrenstuvel/python-rsa.git
cd python-rsa
python3 setup.py install
安装QQlib:
git clone https://github.com/JetLua/qqlib.git
cd qqlib
python3 setup.py install
所需组件就这些,接下来要写代码了。代码我已经托管到Github,可以直接Clone下来用:https://github.com/HFO4/pi-temperature
这里给出核心脚本的注释版本:
Python
#!/usr/bin/python
import RPi.GPIO as GPIO
import time
import qqlib
import urllib
import os
#设置DAT口的GPIO编号
channel =
#下面的依次是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 = []
j =
while GPIO.input(channel) == GPIO.LOW:
continue
while GPIO.input(channel) == GPIO.HIGH:
continue
while j < :
k =
while GPIO.input(channel) == GPIO.LOW:
continue
while GPIO.input(channel) == GPIO.HIGH:
k +=
if k > :
break
if k < :
data.append()
else:
data.append()
j +=
return (data)
check =
tmp =
#因为DHT11常常抽风,温度跳到40多度,这里做一个判断,一直读,直到读对
while (check !=tmp):
GPIO.setmode(GPIO.BCM)
time.sleep()
GPIO.setup(channel, GPIO.OUT)
GPIO.output(channel, GPIO.LOW)
time.sleep(0.02)
GPIO.output(channel, GPIO.HIGH)
GPIO.setup(channel, GPIO.IN)
data = getdata(channel)
print (data)
tmp =
check =
humidity_bit = data[:]
humidity_point_bit = data[:]
temperature_bit = data[:]
temperature_point_bit = data[:]
check_bit = data[:]
humidity =
humidity_point =
temperature =
temperature_point =
for i in range():
humidity += humidity_bit[i] * ** (-i)
humidity_point += humidity_point_bit[i] * ** (-i)
temperature += temperature_bit[i] * ** (-i)
temperature_point += temperature_point_bit[i] * ** (-i)
check += check_bit[i] * ** (-i)
tmp = humidity + humidity_point + temperature + temperature_point
GPIO.cleanup()
#歇一歇
time.sleep()
#播报文字
s="【温度自动播报】当前室内温度为:"+str(temperature)+"℃ (来自DHT11传感器) 相对空气湿度:"+str(humidity)+"% ,"+old_text(temperature)+"\n【历史上的今天】\n"+histoday()+"\n(本消息由我家树莓派自动发送)"
#注意!这里请更改为你自己的目录
file_object1 = open('/home/pi/shuo/t.txt','w')
file_object1.write(s)
file_object1.close()
#登录QQ空间
qq = qqlib.QQ(QQnum, QQpass)
#发说说
qq.feed(s)
#执行weibo.py发微博
os.system("python weibo/weibo.py "+weiboUm+" "+weiboPass)
print(s)
如果懒得看这些代码,直接执行:
git clone https://github.com/HFO4/pi-temperature.git
cd pi-temperature
然后打开shuo.py修改第7行为你的DAT口的GPIO编号,第8-11行为QQ、微博账号密码,第16行、88行改成你自己的路径(要为绝对路径),进入weibo目录,修改weibo.py第92行为你自己的路径。
然后执行
python3 shuo.py
如果看到下面提示,说明一切正常,再检查说说、微博是不是发出去了
设置定时任务
我想要每天早上7点树莓派自动播报,这需要添加Cron定时任务。在此之前先执行date命令看看时间对不对,树莓派默认有自动的联网校对时间,但我们还要设置一下时区,执行tzselect,输入5 回车
输入9 选择中国回车 输入1 选择北京 回车即可 再执行date看看时间是不是正确了了?
然后设置定时任务。执行crontab -e
在最后一行加上
* * * sh 你自己的目录/do.sh >/dev/null >&
这表示每天7点整执行一次do.sh. 然后执行/etc/init.d/cron restart重启cron服务。
继续来到刚刚的pi-temperature目录,编辑do.sh,将其中的路径改为你自己的
至此,此应用就算是配置完成了。
坐等粉丝破万成为网红 哈哈哈
树莓派自动播报温湿度到QQ空间、微博的更多相关文章
- H5分享到微信好友朋友圈QQ好友QQ空间微博二维码
这是分享按钮: <button onclick="call()">通用分享</button> <button onclick="call(' ...
- qq空间微博等更多社交平台分享
<!DOCTYPE html><html> <head> <meta charset="UTF-8"> <title>& ...
- Web 项目中分享到微博、QQ空间等分享功能
Web 项目中分享到微博.QQ空间等分享功能 网上有很多的模板以及代码,但是有很多都不能分享内容,简单的测试了下: 以新浪微博为例,文本框中的内容是title属性,下面的链接是url属性,如果你的链接 ...
- 新浪微博、腾讯微博、QQ空间、人人网、豆瓣 一键分享API
新浪微博: http://service.weibo.com/share/share.php?url= count=表示是否显示当前页面被分享数量(1显示)(可选,允许为空) & url=将页 ...
- QQ空间自动发广告解决方法
最近空间好多人QQ都中了毒.每天我都有几十个好友刷空间话费.流量广告! QQ空间自动发广告的原因: 最近使用了刷赞或者其他QQ外挂软件(有些开发者或破解者会在这样的软件上留后门,请自己判断). 或者最 ...
- 社交媒体(朋友圈、微博、QQ空间)开发一网打尽,PC端移动端都有!——源码来袭!
一.应用场景 曾几何时,社交媒体已经驻扎到了几乎每个人的生活中.看看你身边的朋友,有几个不玩朋友圈的?就算他不玩朋友圈,那也得玩微博吧.再没有底线,也得玩QQ空间. 不过,作为程序员的我们,没事还是少 ...
- [转]QQ空间、新浪微博、腾讯微博等一键分享API链接代码
转自------ 1.新浪微博:http://service.weibo.com/share/share.php?url= count=表示是否显示当前页面被分享数量(1显示)(可选,允许为空)&am ...
- QQ空间、新浪微博、腾讯微博等一键分享API链接代码
1.新浪微博:http://service.weibo.com/share/share.php?url= count=表示是否显示当前页面被分享数量(1显示)(可选,允许为空)&url=将页面 ...
- 每日技术总结:jquery datetimepicker,微博QQ好友QQ空间微信等分享接口
前言: 1.jquery datetimepicker 今天遇到一个日期控件格式的问题,默认选中显示的并不是设定的值,而是当天的日期.于是去查了一遍文档. 参考文章:jquery datetimepi ...
随机推荐
- android:layout_gravity和android:gravity的区别 (转)
转:http://blog.csdn.net/shakespeare001/article/details/7843460 1.首先来看看android:layout_gravity和android: ...
- jquery给表格绑值
jquery给表格绑值 直接上代码了 <!DOCTYPE html> <html> <head> <meta charset="UTF-8" ...
- Jackson读取列表
List<MyBean> result = mapper.readValue(src, TypeFactory.collectionType(ArrayList.class, MyBean ...
- 通用唯一标识码UUID的介绍及使用。
什么是UUID? UUID全称:Universally Unique Identifier,即通用唯一识别码. UUID是由一组32位数的16进制数字所构成,是故UUID理论上的总数为16^32 = ...
- 15-vim-缩排和重复执行
缩排和重复执行 命令 功能 >> 向右增加缩进 << 向左减少缩进 . 重复上次命令 缩排命令在开发程序时,统一增加代码的缩进比较有用! 一次性在选中代码前增加4个空格,就叫做 ...
- Java菜鸟笔记
System.out.println( ); 会在输出完毕后自动换行 System.out.print( ); 在输出完毕后不会自动换行 MyEclipse/Eclipse快捷键: 定位到某一行, ...
- springboot整合netty,多种启动netty的方式,展现bean得多种启动方法
首先讲解下,spring中初始化加载问题: 很多时候,我们自己写的线程池,还有bean对象,还有其他的服务类,都可以通过,相关注解进行交给spring去管理,那么我们如何让nettyserver初始化 ...
- 初探Remoting双向通信(四)
原 初探Remoting双向通信(四) 2013年06月26日 11:11:32 喜欢特别冷的冬天下着雪 阅读数 2632 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blo ...
- 【原生】js实现表格的增删改查
说在前面的,写给小白白的,大神请绕道~ 今天用原生js写一下动态表格的增删改查,主要是熟悉一下js的DOM操作. 首先,做一个表格,用来显示提交的数据,如图下: 此处,我添加了编号.姓名.密码.生日. ...
- vue组件库的基本开发步骤(源代码)
上次发布的随笔忘记提供源代码了,今天特地来补充,如果有什么问题,欢迎大家为我修改指正. vue.config.js文件: const path = require('path') function r ...