樹莓派自動播報溫濕度到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 = 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空間、微博