Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

作者:LifeIsKillingMe

之前買了一塊基於瑞芯RK3588的Rock 5b國產開發板,配置非常強大,我已經在上面跑了NAS->OpenMediaVault,軟路由->OpenWRT,智慧家居->Home Assistant等多個應用或者Docker容器,具體實現方法參看以下文章,主要步驟都羅列出來了。執行情況還是非常穩定的,一個月以來就宕機了一次,看CPU利用率不到3%,記憶體(16GB)使用率不到20%,顯然還大有潛力可挖。

於是我又翻出了塵封多年的樹莓派各個感測器,基本上Rock 5b和樹莓派的感測器還是相容的,都是基於GPIO嘛,但是設定方法有一些差別。幾年前我發過一篇文章,是講樹莓派和PowerBI整合溫溼度監控平臺的。

評論中有值友說除了用PowerBI的Streaming服務,也可以用InfluxDB+Grafana來實現,那麼這次我就試驗一下這一方案的可行性如何。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

什麼是Grafana

首先介紹一下Grafana,Grafana是一個監控儀表系統,是由Grafana Labs公司開源的的一個系統監測工具。它可以大大幫助簡化監控的複雜度,只需要提供需要監控的資料,就可以幫你生成各種視覺化儀表。同時它還有報警功能,可以在系統出現問題時通知你。

開源意味著這一工具完全免費,你也可以自己最佳化它的功能。同時,它支援多個數據源,如Prometheus,Graphite,OpenTSDB,InfluxDB,MySQL/PostgreSQL,Microsoft SQL Server等等。

構建你的第一個Grafana儀表盤

這裡用Docker在Rock 5b上安裝Grafana,首先確保5b已經啟用了Docker環境,具體方法在前面的文章裡有介紹。安裝Grafana使用了一個範例,大家可以在後面括號的連結中找到相關程式碼的下載地址(教程來自這裡)。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

架構還是很清晰的,在這裡我們啟動了三個服務:

Prometheus普羅米修斯時序資料庫,用來儲存和查詢你的監控資料

Promethues-exporter一個模擬資料來源,用來監控你本機的狀態,比如有幾個 CPU,CPU 的負載之類

Grafana本尊

使用以下命令啟動Docker。

docker-compose up

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

如果一切正常,三個docker容器將被啟動,包括prometheus, service和grafana;其中prometheus是普羅米修斯時序資料庫,service是普羅米修斯自帶的資料生成器(監控本機 CPU 記憶體等資訊),grafana就是Grafana 服務本身。然後,瀏覽器訪問本地的3000埠,即可開啟grafana網站。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

初始的使用者名稱是admin,密碼也是 admin。輸入之後,會要求改密碼。

和PowerBI一樣,第一步是配置資料來源

Add Data Source

。Grafana 本身並不負責資料層,它只提供了通用的介面,讓底層的資料庫可以把資料給它。而我們起的另一個服務,叫 Prometheus則是負責儲存和查詢資料的。也就是說,Grafana 每次要展現一個儀表盤的時候,會向 Prometheus 傳送一個查詢請求。Prometheus-exporter 這個服務,會查詢你的本地電腦的資訊,比如記憶體還有多少、CPU 負載之類,然後將資料匯出至普羅米修斯資料庫。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

可以看到Prometheus已經有了。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

這裡使用prometheus的域名9090埠來訪問,這是之前的docker配置檔案設定好的。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

儲存之後如果看到Data source is working的提示,就說明Grafana已經跟普羅米修斯成功建立了連線。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

資料搞定了,下一步就是配置儀表盤了,選擇Dashboards -> Import。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

在這個網站下載儀表盤模板Json檔案,在Grafana中上傳。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

選擇剛才配置好的

Prometheus

資料來源。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

就可以生成非常酷炫的人生第一個Grafana儀表盤了,實時監控開發板的資源使用情況。因為我沒有配置SWAP,所以有些資料是沒有的。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

安裝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。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

如果打算使用InfluxDB 2。0的基本功能而不編寫任何軟體來寫入或查詢資料庫中的資料,那麼到這裡就已經完成了。 但是,我這裡要將感測器獲取的數值傳遞到InfluxDB中的應用程式,並且要以程式設計方式獲取訪問令牌(Token)。

可以使用 influx CLI 使用以下命令檢索令牌:

docker exec influxdb influx auth list

返回結果是如下格式:

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

但我關心的只有Token,用這個命令獲取陣列中的Token,並把它記錄下來:

docker exec influxdb influx auth list | awk '/admin/ {print $4 " "}'

把這些內容整合起來就可以寫一個完整的InfluxDB的安裝指令碼檔案,執行後就可以生成完整的InfluxDB環境。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

將BME280溫溼度感測器連線至Rock 5b

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

可使用的溫溼度感測器其實有不少,比如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的連線和樹莓派一樣,因為引腳定義是一致的。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

連好引腳是這個樣子的。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

感測器裸露在外面有點難看,於是我用微積木給它做了個塑膠殼。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

晚上不開燈甚至能用來做小夜燈。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

這裡要用到GPIO口的I2C,這裡簡單介紹一下I2C。

I2C匯流排是由Philips公司開發的一種簡單、雙向二線制同步序列匯流排。它只需要兩根線即可在連線於總線上的器件之間傳送資訊。主器件用於啟動匯流排傳送資料,併產生時鐘以開放傳送的器件,此時任何被定址的器件均被認為是從器件.在總線上主和從、發和收的關係不是恆定的,而取決於此時資料傳送方向:如果主機要傳送資料給從器件,則主機首先定址從器件,然後主動傳送資料至從器件,最後由主機終止資料傳送;如果主機要接收從器件的資料,則主機器件定址從器件.然後主機接收從器件傳送的資料,最後由主機終止接收過程。在這種情況下,主機主要是負責產生定時時鐘和終止資料傳送。

開啟5b的I2C的方法是修改config。txt啟動檔案,這和樹莓派不同。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

dtoverlay=rk3588-i2c0-m1dtoverlay=rk3588-i2c1-m0dtoverlay=rk3588-i2c3-m1dtoverlay=rk3588-i2c7-m3dtoverlay=rk3588-i2c8-m4

修改後續執行update_extlinux。sh命令生效。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

一開始還是按照老方法檢視

sudo apt-get install i2c-tools

sudo i2cdetect -y 1

奇怪的是返回結果是UU不是77。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

網上查了很多資料才得知,程式碼裡查詢的是1通道的裝置,但是同樣的接線方式5b接線的是7通道,所以無論如何都無法執行。(來自文章)改成7果然就可以了。

sudo i2cdetect -y 7

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

使用的還是之前樹莓派連結BME280的示例檔案。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

用文字編輯器開啟,將預設地址改成

0x77

(原來是0x76)

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

嘗試執行發現報錯。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

這裡注意後面也要改成7通道,如

smbus.SMBus(7)

,並用Python3來執行。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

這下執行就成功了。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

但是目前我只實現了在本地展示感測器實時資料,下面要做的是將資料上傳至InfluxDB資料庫。(參考了這篇文章)

訪問InfluxDB的網站,可以檢視到符合自己環境的influxdb客戶端的安裝配置指令碼。透過

pip install influxdb-client

安裝客戶端。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

張大媽這裡輸入過多程式碼會導致文章無法儲存,所以這裡只展示同步至InfluxDB的關鍵指令碼截圖。

在程式碼開頭新增上圖中匯入InfluxDBClient等模組。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

下面是客戶端連線指令碼。注意要修改使用者名稱,密碼和Token以符合你們的環境。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

我希望客戶端可以每隔五分鐘將感測器的數值上傳到InfluxDB上,可以透過修改crontab檔案實現,命令如下:

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

自定義Grafana儀表盤

至此如果一切正常,感測器已經再源源不斷地將資料傳至資料庫了。此時我們要做的是在Grafana伺服器上連線InfluxDB資料庫。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

Add data source

裡選擇InfluxDB的資料來源。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

配置時輸入本地對應的Bucket,Organization,Token,和之前的指令碼一樣。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

然後在下方寫入Query指令碼,使用的是FLUX語言,可以檢視官方的介紹文件:

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

感測器總共檢測三個值,溫度、溼度和大氣壓,腳本里定義為temperature, humidity,pressure,可以編寫簡單的Query指令碼如下:

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

語言很容易理解,讀取的Bucket是“home”,時間範圍是最近6小時,讀取的引數為pressure。

執行後即可看到對應的的點狀圖,你也可以在右側面板裡對於展示效果做進一步調整。

同理,可以新增針對temperature, humidity的圖表,放在同一個儀表盤上。預設檢視下,右上角可以設定不同的時間篩選條件,設為自動重新整理等等。

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

透過Garfana儀表盤我就能分析辦公場所的環境特點了,辦公室裡溼度較低較乾燥,而下午的溫度呈升高趨勢,難怪這麼多同事喜歡用加溼器,看來我也得多用些保溼化妝品滋養我嬌嫩的肌膚。

總結

這次總結了一下如何用Rock 5b開發板 + BME280感測器 + InfluxDB/Grafana打造動態溫溼度監控平臺的實現方法,不得不說作為一款開源產品Grafana的功能還是相當強大的,還有更多玩法有待我的發掘。

喜歡我的文章請點贊、收藏、評論,謝謝大家的支援!

Rock 5b開發板 + BME280感測器 + InfluxDBGrafana打造動態溫溼度...

頂部