前言
需要做一個實時監控環境溫度的系統,上網搜索后,發現硬件方面樹莓派連接傳感器用來監控溫度比較容易實現,不需要學習太多硬件方面的知識。傳感器方面我選擇DHT22,是因為DHT22測試的范圍和精准度要比DHT11要高。
記錄一下從樹莓派開機、配置到項目成功運行
准備
硬件:
樹莓派4B、DHT22傳感器
參考資料:
樹莓派零基礎教程:https://github.com/TommyZihao/ZihaoTutorialOfRaspberryPi(B站同濟子豪兄有相應視頻)
DHT22用到的Python庫:https://github.com/adafruit/Adafruit_Python_DHT
參照項目:https://github.com/yfgeek/rpi-TempRuntime
相關庫的安裝:
1 # 逐行運行命令 2 sudo apt-get update 3 sudo apt-get install python-dev python-rpi.gpio 4 sudo apt-get install build-essential python-dev python-smbus python-pip 5 sudo pip3 install Adafruit_DHT 6 sudo pip2 install RPi.GPIO
項目的下載
# 將項目下載到/home/pi下任意目錄即可 git clone https://github.com/yfgeek/rpi-TempRuntime.git
進入該項目文件夾 /rpi-TempRuntime,項目內有多個傳感器的python文件,WITHOUT-LCD表示不帶屏幕輸出
我們對 DHT22-WITHOUT-LCD.py 進行修改
sudo nano DHT22-WITHOUT-LCD.py
找到26行,核心代碼,將GPIO#改為自己傳感器所接的序號,這里我接的是4
humidity, temperature = Adafruit_DHT.read_retry(sensor, 4)
修改完成后,運行 DHT22-WITHOUT-LCD.py,即可在終端界面看到時間、溫度、濕度的輸出,生成的數據以JSON格式存儲在 /rpi-TempRuntime/web/data/min(或者hour)中。
項目每分鍾生成一組數據,按日期命名,存在/rpi-TempRuntime/web/data/min文件中,/rpi-TempRuntime/web/data/hour 存儲的則是每個小時的數據
/rpi-TempRuntime/web 中還有個index.html,是一個查詢網頁(注意:不會實時刷新,按日期查詢時,需要同時有分鍾數據和時鍾數據才會生效)
本地服務器部署
Web服務器選擇nginx,相對APache的廣泛應用,nginx屬於輕量級服務器
安裝nginx
sudo apt-get install nginx
啟動nginx
sudo /etc/init.d/nginx start
測試安裝是否成功(nginx默認是80端口)
將樹莓派的ip地址設為靜態ip(我的是192.168.31.102),先從內網測試是否安裝成功,在同一個局域網的機子上的瀏覽器上訪問 192.168.31.102。如果出現下圖則說明nginx安裝成功
修改nginx配置文件(使得nginx監聽上面設定的8888端口)
sudo nano /etc/nginx/sites-available/default #直接修改以下內容: listen行:修改兩處的監聽端口 server { listen 8888 default_server; listen [::]:8888 default_server; # SSL configuration #
#修改指定訪問html路徑
root /home/pi/pyproject/sensor/rpi-TempRuntime/web;
# Add index.php to the list if you are using PHP
index index.html index.htm index.nginx-debian.html;
重新加載
sudo /etc/init.d/nginx reload
啟動服務器
sudo /etc/init.d/nginx start #停止 sudo /etc/init.d/nginx stop
瀏覽器上訪問 192.168.31.102:8888
參考文檔:https://www.jianshu.com/p/8077e28db96a