該專案使用 Raspberry Pi Zero W、Pimoroni Enviro+ 和 Plantower 空氣品質感測器來監測、顯示和報告空氣顆粒、氣體、溫度、濕度、氣壓、光照水平和噪音水平。還可以選擇透過添加 SGP30 感測器來監測 eCO2 和 TVOC 水平。該程式碼基於 Pimoroni 發布的許多 Python 範例和函式庫,並進行了一系列修改和增強。
增加了基於氣壓水平和變化的基本天氣預報功能。
出色的天氣和光線中的光線等級顯示已變更為顯示空氣品質等級。背景色調現在代表空氣品質水平,並且太陽的位置現在透過可見的太陽圖示顯示。它還提供天氣預報資訊、噪音水平(如果啟用)並對濕度指示器進行一些細微的更改。
組合功能已被修改,以提高每個圖表的可見性。圖表顏色基於每個參數的等級閾值,並且僅顯示已測量的參數。 「display_everything」方法也已修改為僅顯示空氣品質參數,以提高顯示的可讀性。
多合一功能已修改為允許循環使用環境監視器的所有功能。
透過進行廣泛的測試和回歸分析(0 至 40 攝氏度之間),提高了溫度和濕度測量的準確性,以開發更有效的補償演算法。然而,就其本身而言,即使這些改進的演算法也無法提供足夠的精度,因此有必要使用 3D 列印外殼將 Enviro+ 與 Raspberry Pi Zero W 分開,並透過帶狀電纜將它們連接起來。
除了改進溫度和濕度測量之外,還進行了測試和回歸分析,為 Enviro+ 氣體感測器提供基於時間的漂移、溫度、濕度和氣壓補償。演算法和清潔空氣校準也用於提供氣體感測器讀數(以 ppm 為單位)。提供數據記錄功能來支援迴歸分析。在進行進一步的迴歸分析之前,需要啟用該分析的日誌檔案並將其轉換為有效的 json 格式。
氣壓讀數的準確性是透過高度補償來提供。海拔高度由 config.json 檔案中的「altitude」參數設定。
外殼不防水,需要避開自然環境。僅當設備未安裝在垂直表面上時才需要底座。 Indoor Plus 型號的外殼和蓋子有一個變體,可監測 eCO2 和 TVOC 水平。這種外殼變體為 SGP30 感測器提供了額外的空間和氣流。
此保護套還可以選擇添加防風雨罩,以提供額外的防風雨保護。使用此封面時,需要將config.json檔案中的「enable_display」設定為「false」。這將顯示功能限制為僅基於空氣品質的色調和序號,以及更改溫度和濕度補償變數以減輕蓋子對溫度和濕度感測器的影響。
基於此儲存庫,近似噪音等級測量已新增至版本 6。此功能尚未校準,不能用於精確的聲級測量。 6.7版本改進了雜訊電平測量功能的頻率補償,但仍需要進一步的工作和校準。此噪音級測量功能需要額外的設定(如下所述),並且設定後需要在設定檔中啟用。
提供 mqtt 支援以啟用外部溫度和濕度感測器(用於數據記錄和回歸分析)、Enviro Monitor 和家庭自動化系統之間的互通以及支援室外和室內 Enviro 監視器之間的互通。這種相互作用允許室內環境監視器的顯示在室內和室外讀數之間循環。
使用 mqtt 連結的室內和室外 Enviro 監視器取得室內 Enviro 監視器上的室外讀數的另一種方法是配置室內 Enviro 監視器以捕獲 Luftdaten 讀數或來自另一個 Enviro 監視器的 Adafruit IO 來源。
Luftdaten 互通已進行修改,可支援新增最小、最大和平均雜訊級讀數。透過在 config.json 檔案中將「enable_luftdaten_noise」設為 true,可以將雜訊等級讀數傳送至 Luftdaten。請注意,Luftdaten 目前無法為每個節點配置三個感測器,因此只有在停用 PM 或氣候讀數時,噪音水平讀數才能發送到 Luftdaten。這可以透過將 config.json 檔案中的“disable_luftdaten_sensor_upload”設定為“Climate”或“PM”來完成。
相同的 Enviro+ 設定用於設定 Enviro 監視器,config.json 檔案參數用於自訂其功能。 config.json 檔案參數的描述位於此處。
設定噪音等級測量需要以下附加步驟:
在設定檔中啟用噪音測量之前,必須成功執行此設定。
sudo apt-get 更新
sudo apt-get 升級
捲曲-sSL https://get.pimoroni.com/enviroplus |巴什
sudo python -m pip 卸載聲音設備
sudo pip3 安裝聲音設備==0.3.15
對於版本 6.7 及更高版本,請執行以下操作:
sudo apt-get install python3-scipy
sudo pip3 install git+https://github.com/endolith/waveform_analysis.git@master
然後按照以下網址的說明進行操作:https://learn.adafruit.com/adafruit-i2s-mems-microphone-breakout/raspberry-pi-wiring-test,包括“添加音量控制”
使用以下內容取代 ~/.asoundrc 的記錄文字:
對於版本 6.7 之前的版本:
使用 alsamixer 將 adau7002 捕獲等級設定為 50
對於版本 6.7 及更高版本:
使用 alsamixer 將 adau7002 捕獲等級設定為 10
使用者指南提供了環境監視器的使用指南。
支援將天氣預報、空氣品質、溫度、濕度、露點、氣壓、PM 濃度、氣體濃度、光照水平、雜訊水平以及可選的 SGP30 感測器、eCO2 和 TVOC 資料傳輸到 Adafruit IO。可以如下啟用和設定:
需要填入 Enviro Monitor 的 config.json 檔案中的以下字段,以向 Adafruit IO 來源提供資料。
「enable_adafruit_io」:設定為 true 啟用 Adafruit IO feed,設定為 false 以停用 Adafruit IO feed,
"aio_user_name": "您的 Adafruit IO 使用者名稱",
"aio_key": "您的 Adafruit IO 金鑰",
「aio_feed_window」:0 到 9 之間的值。如果您只有一台環境監視器,則設定為 0,
「aio_feed_sequence」:0 到 3 之間的值。如果您只有一台環境監視器,則設定為 0,
"aio_household_prefix": "您正在監控的家庭的 Adafruit IO 金鑰前綴(請參閱 Adafruit IO 命名約定)",
"aio_location_prefix": "此特定 Enviro 監視器位置的 Adafruit IO 金鑰前綴。對於室內監視器使用 'indoor',對於室外監視器使用 'outdoor'。(請參閱 Adafruit IO 命名約定)",
“aio_package”:設定為“Premium Plus”或“Premium Plus Noise”或“Premium”或“Premium Noise”或“Basic Air”或“Basic Combo”
您需要一個 Adafruit IO+ 帳戶才能使用“Premium Plus”、“Premium Plus Noise”、“Premium”或“Premium Noise”套餐以及一個 Enviro Monitor Indoor Plus(配備 SGP30 eCO2/TVOC 感測器) Premium Plus' 或'Premium Plus Noise ' 軟體包(請參閱Adafruit IO 軟體包)”,
此腳本設定 Enviro Monitor 的 Adafruit IO 來源、儀表板和區塊,如本例所示
透過使用所需資料填充 aio_feed_prefix 字典,該腳本可以在一次運行中設定多個家庭和位置。 aio_feed_prefix 的格式為:
aio_feed_prefix = {'家庭1 名稱': {'key': 'household1key', 'package': 'aio_package', 'locations': {'Location1Name': 'location1key', 'Location2Name': 'location2key'}, '可見性': '公共' 或'私人'}, '家庭2 名稱': {'key': 'household2key', 'package': 'aio_package', 'locations': {'Location1Name': 'location1key'}, '可見性': '公共' 或 '私人'}}
家庭名稱和家庭金鑰需要與相關環境監視器的 config.json 檔案中定義的一致。
例如,如果您的家庭只有一台環境監測儀,並且您在config.json 檔案中將“aio_household_prefix”設為“home”,則將“aio_location_prefix”設為“outdoor”,將“aio_package”設為“Premium” , Enviro Monitor,如果您希望來源、儀表板和區塊設定為私有可見性:
aio_feed_prefix = {'Home': {'key': 'home', 'package': Premium', 'locations': {'Outdoor': 'outdoor'}, 'visibility': 'private'}}
如果您的家庭有兩台Enviro 顯示器,並且您已將兩台Enviro 顯示器的config.json 檔案設定為“aio_household_prefix”為“home”,則將室外顯示器的“aio_location_prefix”設為“outdoor”,將室外顯示器的“indoor”設定為“indoor”您的室內顯示器,將您的室外顯示器的“aio_package”更改為“Premium”,將室內顯示器的“Premium Plus”更改為“Premium Plus”,如果您希望將來源、儀表板和區塊設定為具有公共可見性:
aio_feed_prefix = {'Home': {'key': 'home', 'package': Premium Plus', 'locations': {'Outdoor': 'outdoor', 'Indoor': 'indoor'}, 'visibility': '民眾'}}
另外兩個使用者定義的字典是 aio_user_name 和 aio_key。這些需要使用您在環境監視器的 config.json 檔案中使用的相同使用者名稱和金鑰進行填入。
aio_user_name = "您的 Adafruit IO 使用者名稱"
aio_key = "您的 Adafruit IO 金鑰"
如果啟用,Adafruit IO feed 更新每 10 分鐘產生一次。設定檔的 aio_feed_window 和 aio_feed_sequence 變數用於在從多個 Enviro 監視器收集來源時最大限度地減少 Adafruit IO 限制錯誤。 aio_feed_window 變數可以是 0 到 9 之間的值,用於設定一分鐘提要更新視窗的開始時間。 0 在整點後的 0、10、20、30、40 和 50 分鐘打開窗口,1 在整點的 1、11、21、31、41 和 51 分鐘打開窗口,2 在 2 點打開窗口,整點的12、22、32、42 和52 分鐘,依此類推。 aio_feed_sequence 變數可以是 0 到 3 之間的值,以在一分鐘的 feed 更新視窗內設定 feed 更新開始時間。 0 在視窗開啟後立即開始更新,1 延遲 15 秒開始,2 延遲 30 秒,3 延遲 45 秒。
每個 Enviro Monitor 的 Adafruit IO 來源、儀表板或區塊的命名約定是使用家庭名稱,後面跟著該家庭內相關 Enviro Monitor 位置的位置,作為每個來源、儀表板或區塊的前綴。您為“aio_household_prefix”選擇合適的名稱,“aio_location_prefix”可以是“indoor”或“outdoor”。例如,將“aio_household_prefix”設為“home”,將“aio_location_prefix”設為“outdoor”,會將每個feed 名稱的前綴設為“Home Outdoor”,將每個feed 的鍵的前綴設為“home- outdoor-”。因此,溫度源將具有名稱“Home OutdoorTemperature”和鍵“home-outdoor-temple”。儀表板將具有名稱“Home”和鍵“home”,並且該儀表板內的溫度計塊將具有名稱「Outdoor」。
有六種Adafruit IO 軟體包選項可供選擇:「Premium」每個Enviro 具有14 個資料饋送,「Premium Noise」每個Enviro 具有17 個資料饋送,「Premium Plus」每個Enviro 具有16 個資料饋送(即透過可選的附加eCO2 和TVOC) SGP30 感測器)、“Premium Plus Noise”,每個 Enviro 具有 19 個資料來源,所有這些都需要 Adafruit IO+ 帳戶; 「基本空氣」包含5 個空氣品質資料流(空氣品質等級、空氣品質文字、PM1、PM2.5 和PM10),「基本組合」包含5 個空氣品質/氣候資料流(空氣品質等級、天氣預報圖標、溫度、濕度和氣壓)。
使用「Premium Noise」和「Premium Plus Noise」Adafruit IO 軟體包需要使用相關設定說明在 Enviro 中配置並啟用雜訊測量。版本 6.5 更改了噪音源和儀表板,以顯示來源更新之間的最大、最小和平均噪音水平,而先前的版本僅顯示來源更新之間的最大噪音水平。
該項目已獲得 MIT 許可證 - 有關詳細信息,請參閱 LICENSE.md 文件
天氣預報基於 www.worldstormcentral.co/law_of_storms/secret_law_of_storms.html by RJ Ellis