1. 程式人生 > >樹莓派自動播報溫濕度到QQ空間、微博

樹莓派自動播報溫濕度到QQ空間、微博

讀取 usr gpio net etc 寫代碼 播報 \n 電阻

原文鏈接 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 = 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 = []
j = 0
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
return (data)
check = 0
tmp = 1
#因為DHT11常常抽風,溫度跳到40多度,這裏做一個判斷,一直讀,直到讀對
while (check !=tmp):
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)
data = getdata(channel)
print (data)
tmp = 1
check = 0
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
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
GPIO.cleanup()
#歇一歇
time.sleep(1)
#播報文字
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
在最後一行加上

0 7 * * * sh 你自己的目錄/do.sh >/dev/null 2>&1

這表示每天7點整執行一次do.sh. 然後執行/etc/init.d/cron restart重啟cron服務。

繼續來到剛剛的pi-temperature目錄,編輯do.sh,將其中的路徑改為你自己的
至此,此應用就算是配置完成了。
坐等粉絲破萬成為網紅 哈哈哈

樹莓派自動播報溫濕度到QQ空間、微博