很久以前參加了台灣樹莓派的社群聚會,認識了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 &
2015年6月21日 星期日
2015年6月14日 星期日
[Raspberry Pi]連結無線網路…連了這麼久阿
好一陣子沒玩Raspberry PI了,弄個無線網路就弄老半天…記起來!
連結到已知AP,使用wpa_supplicant,步驟如下
1. 建立wpa資訊
#wap_passphrase "your_essid" "your_password" > /etc/wpa_supplicant/wps_supplicant.conf
此時會在 /etc/wpa_supplicant/wps_supplicant.conf 檔案裡建立一個block :
network = {
ssid = "your_essid"
psk = "your_password"
}
NOTE: 此檔案可有多個 network = {} block,即為AP清單
2. 使用wpa_supplicant連結AP,此時呼叫下列指令開啟deamon
#wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wps_supplicant.conf
NOTE1: 若deamon已開啟,則需要kill -9 先把deamon幹掉再重開,另尋正當方法中…
NOTE2: 另外方式就是重開機重跑wpa_supplicant
3. 確認AP是否已連結,使用iwconfig
#iwconfig wlan0
確認印出的資訊裡是否有ESSID:"your_essid",有了就是連上惹。
3. 最後,向AP要求動態IP
#dhclient wlan0
4. 用ifconfig確認wlan0是否已經獲得IP
看看inet addr 是否有值嚕
PS1: 若wpa_supplicant已經在作用中,使用iwconfig是無效的(不要浪費時間在這裡惹)
PS2: 開機後就使用wpa_supplicant管理無線網路:
設定/etc/network/interfaces,將wlan0的組態改為如下:
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
連結到已知AP,使用wpa_supplicant,步驟如下
1. 建立wpa資訊
#wap_passphrase "your_essid" "your_password" > /etc/wpa_supplicant/wps_supplicant.conf
此時會在 /etc/wpa_supplicant/wps_supplicant.conf 檔案裡建立一個block :
network = {
ssid = "your_essid"
psk = "your_password"
}
NOTE: 此檔案可有多個 network = {} block,即為AP清單
2. 使用wpa_supplicant連結AP,此時呼叫下列指令開啟deamon
#wpa_supplicant -B -i wlan0 -c /etc/wpa_supplicant/wps_supplicant.conf
NOTE1: 若deamon已開啟,則需要kill -9 先把deamon幹掉再重開,另尋正當方法中…
NOTE2: 另外方式就是重開機重跑wpa_supplicant
3. 確認AP是否已連結,使用iwconfig
#iwconfig wlan0
確認印出的資訊裡是否有ESSID:"your_essid",有了就是連上惹。
3. 最後,向AP要求動態IP
#dhclient wlan0
4. 用ifconfig確認wlan0是否已經獲得IP
看看inet addr 是否有值嚕
PS1: 若wpa_supplicant已經在作用中,使用iwconfig是無效的(不要浪費時間在這裡惹)
PS2: 開機後就使用wpa_supplicant管理無線網路:
設定/etc/network/interfaces,將wlan0的組態改為如下:
allow-hotplug wlan0
iface wlan0 inet manual
wpa-roam /etc/wpa_supplicant/wpa_supplicant.conf
如此一來開機後就會以wpa_supplicant.conf的內容找尋是否有可用的AP,然後自動連接
訂閱:
文章 (Atom)