前
想起來(lái)自己的樹(shù)莓派從高考前一天買(mǎi)回來(lái)已經(jīng)好久了(呵呵呵大家不要學(xué)我,高考的時(shí)候還在惦記著這些有的沒(méi)的),這么久一直在搗鼓軟件相關(guān)的東西,想來(lái)GPIO這么有用的東西也沒(méi)有怎么動(dòng),所以在國(guó)慶前一晚深夜時(shí)分買(mǎi)了個(gè)DHT22溫濕度傳感器,想著來(lái)度過(guò)國(guó)慶這幾天的發(fā)霉時(shí)光,沒(méi)想到結(jié)果一個(gè)下午就搞定了......其實(shí)還是主要看了一個(gè)大佬的項(xiàng)目,才搞得這么快,不過(guò)在使用的過(guò)程中也遇到了一些坑,這里也順便做一些記錄,給后來(lái)的人指一下路。
話不多說(shuō),先上個(gè)圖。
Demo
正文
教程內(nèi)容
本文主要參照項(xiàng)目 rpi-TempRuntime
- DHT22溫濕度傳感器的安裝
- 傳感器信息的采集
- http服務(wù)器部署
- frp內(nèi)網(wǎng)穿透
DHT22溫濕度傳感器的安裝
需要材料:
樹(shù)莓派、面包板、面包線(母對(duì)母、公對(duì)公多條)、袖珍面包板、10KΩ電阻一個(gè)、DHT22溫濕度傳感器
傳感器連接方式:
我的連接方式:
細(xì)心的人或許會(huì)發(fā)現(xiàn)不同,電路圖上的傳感器是四個(gè)腳的,而我的或者你買(mǎi)的都是三個(gè)腳的,這里我們只要按照GPIO以及傳感器腳對(duì)應(yīng)來(lái)連接即可:
VCC(+) 連接
DC power 5V
(亮紅色)
DATA(out) 連接GPIO#
(綠色任意并請(qǐng)記住序號(hào),我用的是 GPIO04)
GND(-) 連接GND
(黑色)
10KΩ電阻并聯(lián)在 DATA 與 VCC 之間(這里就要用到面包板了,具體操作看我的實(shí)物圖)
傳感器信息的采集
這里我們主要依賴到一個(gè)python庫(kù) Adafruit_Python_DHT
依賴的安裝
#安裝方法源于 rpi-TempRuntime
#逐行運(yùn)行命令
sudo apt-get update
sudo apt-get install python-dev python-rpi.gpio
sudo apt-get install build-essential python-dev python-smbus python-pip
git clone https://github.com/adafruit/Adafruit_Python_DHT.git
cd Adafruit_Python_DHT
sudo python setup.py install
sudo pip install RPi.GPIO
項(xiàng)目的下載
sudo mkdir /var/www/html
cd /var/www/html
git clone https://github.com/yfgeek/rpi-TempRuntime.git
運(yùn)行之前
我們需要對(duì)DHT22-WITHOUT-LCD.py
進(jìn)行修改來(lái)使其順利地獲取傳感器數(shù)據(jù)。
cd /var/www/html/rpi-TempRuntime
sudo nano DHT22-WITHOUT-LCD.py
找到第26行
將humidity, temperature = Adafruit_DHT.read_retry(sensor, 26)
中的26
改為自己的GPIO#
序號(hào),例如我的就改成humidity, temperature = Adafruit_DHT.read_retry(sensor, 4)
,保存退出,不會(huì)的請(qǐng)查找nano用法。
其實(shí)這一條也是最核心的代碼,如果要單單挑出來(lái)的話
來(lái)源:http://www.lxweimin.com/p/42fed7f1f610
import Adafruit_DHT
sensor = Adafruit_DHT.DHT22
humidity, temperature = Adafruit_DHT.read_retry(sensor, GPIO#)
print(humidity, temperature)
運(yùn)行
screen
sudo python DHT22-WITHOUT-LCD.py
等一會(huì)你就會(huì)在終端界面中看到時(shí)間、溫度以及濕度的輸出了。這個(gè)項(xiàng)目還會(huì)生成一個(gè)簡(jiǎn)單的查詢網(wǎng)頁(yè),在/var/www/html/rpi-TempRuntime/web
中,歷史數(shù)據(jù)以JSON格式存儲(chǔ)在/var/www/html/rpi-TempRuntime/web/data/min(或者h(yuǎn)our)
中。
http服務(wù)器部署
既然這個(gè)項(xiàng)目為我們生成了http頁(yè)面我們就要用上對(duì)吧,這里我們使用caddy。
安裝方法參考自:https://pimylifeup.com/raspberry-pi-caddy-web-server/
curl https://getcaddy.com | bash -s personal
sudo mkdir /etc/caddy
sudo nano /etc/caddy/Caddyfile
輸入
:80 localhost:80 {
/var/www/html/rpi-TempRuntime/web
gzip
}
啟動(dòng)caddy
cd /etc/caddy
screen
caddy
此時(shí)你就可以通過(guò)瀏覽器訪問(wèn)樹(shù)莓派的ip來(lái)訪問(wèn)頁(yè)面了。
frp內(nèi)網(wǎng)穿透
如果想在公網(wǎng)訪問(wèn)這個(gè)在內(nèi)網(wǎng)的頁(yè)面則需要frp來(lái)轉(zhuǎn)發(fā)樹(shù)莓派的80端口,具體操作在這里就不贅述了,可以參考我的另一篇文章中,frp的部分。
后
寫(xiě)完了,吃晚飯去了
我tmd中秋沒(méi)留學(xué)校你們這么鬼多活動(dòng),我這國(guó)慶留在學(xué)校tmd個(gè)個(gè)都回家了,呵呵呵呵