Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度監控平臺
2023-01-15由 什麼值得買 發表于 農業
溼度多少度比較合適
作者:LifeIsKillingMe
之前買了一塊基於瑞芯RK3588的Rock 5b國產開發板,配置非常強大,我已經在上面跑了NAS->OpenMediaVault,軟路由->OpenWRT,智慧家居->Home Assistant等多個應用或者Docker容器,具體實現方法參看以下文章,主要步驟都羅列出來了。執行情況還是非常穩定的,一個月以來就宕機了一次,看CPU利用率不到3%,記憶體(16GB)使用率不到20%,顯然還大有潛力可挖。
於是我又翻出了塵封多年的樹莓派各個感測器,基本上Rock 5b和樹莓派的感測器還是相容的,都是基於GPIO嘛,但是設定方法有一些差別。幾年前我發過一篇文章,是講樹莓派和PowerBI整合溫溼度監控平臺的。
評論中有值友說除了用PowerBI的Streaming服務,也可以用InfluxDB+Grafana來實現,那麼這次我就試驗一下這一方案的可行性如何。
什麼是Grafana
首先介紹一下Grafana,Grafana是一個監控儀表系統,是由Grafana Labs公司開源的的一個系統監測工具。它可以大大幫助簡化監控的複雜度,只需要提供需要監控的資料,就可以幫你生成各種視覺化儀表。同時它還有報警功能,可以在系統出現問題時通知你。
開源意味著這一工具完全免費,你也可以自己最佳化它的功能。同時,它支援多個數據源,如Prometheus,Graphite,OpenTSDB,InfluxDB,MySQL/PostgreSQL,Microsoft SQL Server等等。
構建你的第一個Grafana儀表盤
這裡用Docker在Rock 5b上安裝Grafana,首先確保5b已經啟用了Docker環境,具體方法在前面的文章裡有介紹。安裝Grafana使用了一個範例,大家可以在後面括號的連結中找到相關程式碼的下載地址(教程來自這裡)。
架構還是很清晰的,在這裡我們啟動了三個服務:
Prometheus普羅米修斯時序資料庫,用來儲存和查詢你的監控資料
Promethues-exporter一個模擬資料來源,用來監控你本機的狀態,比如有幾個 CPU,CPU 的負載之類
Grafana本尊
使用以下命令啟動Docker。
docker-compose up
如果一切正常,三個docker容器將被啟動,包括prometheus, service和grafana;其中prometheus是普羅米修斯時序資料庫,service是普羅米修斯自帶的資料生成器(監控本機 CPU 記憶體等資訊),grafana就是Grafana 服務本身。然後,瀏覽器訪問本地的3000埠,即可開啟grafana網站。
初始的使用者名稱是admin,密碼也是 admin。輸入之後,會要求改密碼。
和PowerBI一樣,第一步是配置資料來源
Add Data Source
。Grafana 本身並不負責資料層,它只提供了通用的介面,讓底層的資料庫可以把資料給它。而我們起的另一個服務,叫 Prometheus則是負責儲存和查詢資料的。也就是說,Grafana 每次要展現一個儀表盤的時候,會向 Prometheus 傳送一個查詢請求。Prometheus-exporter 這個服務,會查詢你的本地電腦的資訊,比如記憶體還有多少、CPU 負載之類,然後將資料匯出至普羅米修斯資料庫。
可以看到Prometheus已經有了。
這裡使用prometheus的域名9090埠來訪問,這是之前的docker配置檔案設定好的。
儲存之後如果看到Data source is working的提示,就說明Grafana已經跟普羅米修斯成功建立了連線。
資料搞定了,下一步就是配置儀表盤了,選擇Dashboards -> Import。
在這個網站下載儀表盤模板Json檔案,在Grafana中上傳。
選擇剛才配置好的
Prometheus
資料來源。
就可以生成非常酷炫的人生第一個Grafana儀表盤了,實時監控開發板的資源使用情況。因為我沒有配置SWAP,所以有些資料是沒有的。
安裝InfluxDB 2。0
和prometheus一樣,InfluxDB是一個專為時序資料設計的資料庫,功能更加強大。docker安裝方法如下(教程來自這裡):注意InfluxDB已經升級到2。0版本,和之前的版本相比區別比較大,網上的不少教程都已經過期了。
首先啟動docker
systemctl start docker
抓取influxdb的docker映象
docker pull influxdb:2.0.7
寫入influxDB配置檔案並執行。
docker run --name influxdb -d -p 8086:8086 --volume `pwd`/influxdb2:/var/lib/influxdb2 --volume `pwd`/config.yml:/etc/influxdb2/config.yml influxdb:2.0.7
定義相關的賬號密碼。
docker exec influxdb influx setup --bucket BUCKET_NAME --org ORG_NAME --password PASSWORD --username USERNAME --force
這裡BUCKET_NAME可以認為是資料庫的名字,而ORG_NAME是組織的名字,根據自己情況定義。
如果一切正常,就可以瀏覽器訪問本地的8086埠開啟InfluxDB。
如果打算使用InfluxDB 2。0的基本功能而不編寫任何軟體來寫入或查詢資料庫中的資料,那麼到這裡就已經完成了。 但是,我這裡要將感測器獲取的數值傳遞到InfluxDB中的應用程式,並且要以程式設計方式獲取訪問令牌(Token)。
可以使用 influx CLI 使用以下命令檢索令牌:
docker exec influxdb influx auth list
返回結果是如下格式:
但我關心的只有Token,用這個命令獲取陣列中的Token,並把它記錄下來:
docker exec influxdb influx auth list | awk '/admin/ {print $4 " "}'
把這些內容整合起來就可以寫一個完整的InfluxDB的安裝指令碼檔案,執行後就可以生成完整的InfluxDB環境。
將BME280溫溼度感測器連線至Rock 5b
可使用的溫溼度感測器其實有不少,比如DT11,DT22,DS18B20等等,淘寶上的價格從幾元到幾十元不等。我這裡是精度較高的BME280,這是一款整合溫度、溼度、氣壓,三位一體的環境感測器。具有高精度,多功能,小尺寸等特點。DFRobot Gravity I2C BME280環境感測器採用Gravity-I2C介面設計,同時預留預留SPI介面,可以方便快捷的搭建產品原型,應用於環境監測,樓層高度檢測,物聯網控制等各種應用場景。Gravity I2C BME280環境感測器使用BOSCH最新MEMS微機電感測器,具備良好的穩定性。氣壓測量在整個溫區非常穩定的,偏置溫度係數1。5 pa/k,當溫度變化時,1攝氏度的溫度變化導致的誤差僅在12。6釐米。這種穩定性,連同其多功能的特點,使得BME280可以適用於各種應用場景。
5b的連線和樹莓派一樣,因為引腳定義是一致的。
連好引腳是這個樣子的。
感測器裸露在外面有點難看,於是我用微積木給它做了個塑膠殼。
晚上不開燈甚至能用來做小夜燈。
這裡要用到GPIO口的I2C,這裡簡單介紹一下I2C。
I2C匯流排是由Philips公司開發的一種簡單、雙向二線制同步序列匯流排。它只需要兩根線即可在連線於總線上的器件之間傳送資訊。主器件用於啟動匯流排傳送資料,併產生時鐘以開放傳送的器件,此時任何被定址的器件均被認為是從器件.在總線上主和從、發和收的關係不是恆定的,而取決於此時資料傳送方向:如果主機要傳送資料給從器件,則主機首先定址從器件,然後主動傳送資料至從器件,最後由主機終止資料傳送;如果主機要接收從器件的資料,則主機器件定址從器件.然後主機接收從器件傳送的資料,最後由主機終止接收過程。在這種情況下,主機主要是負責產生定時時鐘和終止資料傳送。
開啟5b的I2C的方法是修改config。txt啟動檔案,這和樹莓派不同。
dtoverlay=rk3588-i2c0-m1dtoverlay=rk3588-i2c1-m0dtoverlay=rk3588-i2c3-m1dtoverlay=rk3588-i2c7-m3dtoverlay=rk3588-i2c8-m4
修改後續執行update_extlinux。sh命令生效。
一開始還是按照老方法檢視
sudo apt-get install i2c-tools
sudo i2cdetect -y 1
奇怪的是返回結果是UU不是77。
網上查了很多資料才得知,程式碼裡查詢的是1通道的裝置,但是同樣的接線方式5b接線的是7通道,所以無論如何都無法執行。(來自文章)改成7果然就可以了。
sudo i2cdetect -y 7
使用的還是之前樹莓派連結BME280的示例檔案。
用文字編輯器開啟,將預設地址改成
0x77
(原來是0x76)
嘗試執行發現報錯。
這裡注意後面也要改成7通道,如
smbus.SMBus(7)
,並用Python3來執行。
這下執行就成功了。
但是目前我只實現了在本地展示感測器實時資料,下面要做的是將資料上傳至InfluxDB資料庫。(參考了這篇文章)
訪問InfluxDB的網站,可以檢視到符合自己環境的influxdb客戶端的安裝配置指令碼。透過
pip install influxdb-client
安裝客戶端。
張大媽這裡輸入過多程式碼會導致文章無法儲存,所以這裡只展示同步至InfluxDB的關鍵指令碼截圖。
在程式碼開頭新增上圖中匯入InfluxDBClient等模組。
下面是客戶端連線指令碼。注意要修改使用者名稱,密碼和Token以符合你們的環境。
我希望客戶端可以每隔五分鐘將感測器的數值上傳到InfluxDB上,可以透過修改crontab檔案實現,命令如下:
自定義Grafana儀表盤
至此如果一切正常,感測器已經再源源不斷地將資料傳至資料庫了。此時我們要做的是在Grafana伺服器上連線InfluxDB資料庫。
Add data source
裡選擇InfluxDB的資料來源。
配置時輸入本地對應的Bucket,Organization,Token,和之前的指令碼一樣。
然後在下方寫入Query指令碼,使用的是FLUX語言,可以檢視官方的介紹文件:
感測器總共檢測三個值,溫度、溼度和大氣壓,腳本里定義為temperature, humidity,pressure,可以編寫簡單的Query指令碼如下:
語言很容易理解,讀取的Bucket是“home”,時間範圍是最近6小時,讀取的引數為pressure。
執行後即可看到對應的的點狀圖,你也可以在右側面板裡對於展示效果做進一步調整。
同理,可以新增針對temperature, humidity的圖表,放在同一個儀表盤上。預設檢視下,右上角可以設定不同的時間篩選條件,設為自動重新整理等等。
透過Garfana儀表盤我就能分析辦公場所的環境特點了,辦公室裡溼度較低較乾燥,而下午的溫度呈升高趨勢,難怪這麼多同事喜歡用加溼器,看來我也得多用些保溼化妝品滋養我嬌嫩的肌膚。
總結
這次總結了一下如何用Rock 5b開發板 + BME280感測器 + InfluxDB/Grafana打造動態溫溼度監控平臺的實現方法,不得不說作為一款開源產品Grafana的功能還是相當強大的,還有更多玩法有待我的發掘。
喜歡我的文章請點贊、收藏、評論,謝謝大家的支援!