2015年6月21日 星期日

[Raspberry Pi]DHT11溫濕度模組 x Google sheet

很久以前參加了台灣樹莓派的社群聚會,認識了DHT11這款溫濕度監控模組,其主要是顆溫濕度感測器,可以輸出溫度、相對濕度兩種資訊,但對應用者而言,在乎的是怎麼跟這小東西交換資訊。

在那場聚會裡,主講者sosorry先生分享了如何實做底層Linux Driver去實現One-wire protocol去跟DHT11溝通取得資料,實做Linux Driver是件精彩的事,但需要花點功夫理解,小弟不才一直沒有動手操作了一遍,一直到最近,在國外網站Adafruit發現已有非常簡單的應用方法,甚至在文末追加了存取google sheet的方法,使得你量測到的資料可以追加在google sheet,實現了隨時隨地透過google監控家中溫/濕度,甚至是簡單的紀錄與分析,十分有趣!

原文出處:https://learn.adafruit.com/downloads/pdf/dht-humidity-sensing-on-raspberry-pi-with-gdocs-logging.pdf
在這邊分享(翻譯)出來:

1.硬體準備:

因為原文是用Adafruit的轉接板作為範例,這裡忽略掉原文的說明,可以參考這裡的圖示連接
基本上只需連接三隻腳,3.3V , GND , 以及訊號線。


NOTE: 我是去光華商場買了長得像這樣的DHT11模組,他是將原本的DHT11焊在PCB板上,並加上了PULL-UP電阻,大概幾十塊錢。

其中S腳是訊號線,-是地,中間那根則是3.3V電源
因為已經加上了PULL-UP電阻,所以訊號線的部份不需要額外掛電阻,這點跟上面範例稍微不同,需要稍加注意。

2. 軟體部份:

下載Adafruit分享的git package,裡面有範例程式,以及Adafruit撰寫的DHT11驅動
#git clone https://github.com/adafruit/Adafruit_Python_DHT.git

準備好Python環境
#sudo apt-get update
#sudo apt-get install build-essential python-dev python-openssl

安裝Adafruit 驅動套件
#cd Adafruit_Python_DHT       //去剛剛git clone下載好的位置
#sudo python setup.py install    //安裝套件

準備到這裡就已經完成,接著就是執行Adafruit已準備好的測試程式來看看
#cd examples     //前往範例資料夾
#sudo ./AdafruitDHT.py 11 4    //執行測試程式

由於存取底層GPIO需要ROOT權限,所以記得要打sudo
這程式需要兩個引數,第一個引數是Sensor形式,第二個引數是訊號線對應的GPIO號碼

Sensor共有2302(AM2302) , 11(DHT11) , 22(DHT22)三個選項

如果電路系統沒有問題的話,應該會印出溫溼度資訊,到此時就打完收工啦! 有夠簡單

3. 將量測資訊寫到Google sheet內

接著來嘗試把溫溼度資訊以試算表的形式逐行記錄下來,透過Google sheet甚至可以在異地監測呢

首先在你的Google Drive裡裡開一個新的Google試算表,將這個試算表取個好名字,例如:"DHT11好好看看我家到底有多熱" (中文在後面可能會卡關,還是取個英文的就好)

原文建議你留下第一列打上標頭,將其他列刪除掉,不然程式會從第1000行寫起,這會有點瞎

接著遵照這裡的指示開啟你的OAuth2權限

如果上述步驟有確實做完的話,會得到一個.json檔案
將這個檔案以筆記本 或是 vim 打開的話,會有一行長得像這樣:
"client_email": "149345334675-md0qff5f0kib41meu20f7d1habos3qcu@developer.gserviceaccount.com",

就是一個Email,這個Email位置就是你要分享為共同編輯的對象,程式會以共同編輯者的身份對表格寫資料。
打開你剛剛建立的Google試算表,右上角有個分享,填入這個email,記得權限要開成可以編輯。

接著回頭回來處理板子上的運作環境,此時還需要安裝額外的套件:
#sudo apt-get install python-pip
#sudo pip install gspread oauth2client

安裝完畢後,請將剛剛的.json檔,拷貝到 Adafruit_Python_DHT/examples下
然後對Adafruit_Python_DHT/examples/google_spreadsheet.py 稍做編輯,
需要額外編輯處有五處:

#DHT_TYPE = Adafruit_DHT.DHT11  // 將你的Sensor形式設定好
#DHT_PIN = 4 //將你訊號線連接的GPIO腳位設定好
#GDOCS_OAUTH_JSON = 'xxxxx.json'     //將剛剛拷貝到examples下的的.json檔案名稱設定好
#GDOCS_SPREADSHEET_NAME = 'DHT11好好看看我家到底有多熱'    //將你要寫入的google表格名稱設定好
#FREQUENCY_SECONDS = 300  //設定多少秒量測一次並寫入google表格

設定動作就到這邊,沒了!

接著就是執行google_spreadsheet.py開始量測溫/濕度並寫入表格啦!
#sudo ./google_spreadsheet.py

喔耶


後記:
開始持續記載溫濕度以後就嘗試了各種實驗如何讓房間更舒服點……

[2015/07/02] 登出ssh後繼續執行(Nohup指令)
若要在登出ssh後繼續執行程式,下以下指令:
#nohup sudo ./google_spreadsheet.py &






沒有留言:

張貼留言