如何利用PSOC?6 Arduino來監(jiān)測室內(nèi)空氣質(zhì)量
您想要發(fā)現(xiàn)使用PSOC?6微控制器進(jìn)行快速原型設(shè)計的無縫方法并將您的想法變?yōu)楝F(xiàn)實嗎?
通過PSOC?6 Arduino集成,您可以做到這一點!這種強大的組合使您能夠進(jìn)入龐大的Arduino生態(tài)系統(tǒng),并利用PSOC?6微控制器的靈活性。
通過將英飛凌CO2傳感器與PSOC?6 AI評估套件連接,并使用Arduino代碼將其連接到家庭助理,親身體驗其簡單性。告別復(fù)雜性,迎接輕松的原型制作!
概述
輕松監(jiān)測室內(nèi)空氣質(zhì)量!這個Arduino應(yīng)用程序,在CY8CKIT-062S2-AI上運行,通過Wi-Fi和MQTT將您的二氧化碳傳感器連接到家庭助理,利用家庭助理的MQTT發(fā)現(xiàn)進(jìn)行無縫集成。
先決條件:家庭助理和MQTT經(jīng)紀(jì)人
要繼續(xù),您需要準(zhǔn)備以下內(nèi)容:MQTT代理、具有MQTT集成的Home Assistant實例和Wi-Fi網(wǎng)絡(luò)。
這是它!如果您已經(jīng)運行了Home Assistant、MQTT代理和MQTT集成,那么就可以繼續(xù)了。
你需要什么?
硬件設(shè)置
獲取一個英飛凌PAS CO2傳感器,將其連接到PSOC?6 AI評估套件,并運行Arduino代碼讀取傳感器數(shù)據(jù)。然后,將其流式傳輸?shù)郊彝ブ恚涂梢赃M(jìn)行數(shù)據(jù)可視化了!下圖顯示了如何將二氧化碳傳感器連接到工具包。
傳感器需要5V電源來進(jìn)行測量,3.3V電源用于邏輯與通信,您可以在PSOC板上找到:
軟件安裝
步驟1:安裝Arduino IDE
確保安裝了Arduino IDE 2.0或更高版本。如果沒有,請從Arduino官方網(wǎng)站下載并安裝。
步驟2:將PSOC?6板添加到Arduino IDE
如果還沒有,請按照Hackster文章中的說明在Arduino IDE中安裝PSOC?6板。
步驟3:選擇CY8CKIT-062S2-AI板
在Arduino IDE中,導(dǎo)航到Tools > Board >英飛凌PSOC6 Boards并選擇CY8CKIT-062S2-AI板。
步驟4:安裝pas - co2傳感器庫
在Arduino IDE中,轉(zhuǎn)到Sketch > Include Library > Library Manager。搜索pass -co2-sensor并安裝庫。
步驟5:安裝Arduino_JSON庫
在Arduino IDE中,導(dǎo)航到Sketch > Include Library > Library Manager。搜索Arduino_JSON并單擊Install按鈕來安裝庫。此資料庫將簡化為家庭助理準(zhǔn)備訊息。
步驟6:安裝PubSubClient Library
在Arduino IDE中,導(dǎo)航到Sketch > Include Library > Library Manager。搜索PubSubClient并單擊Install按鈕來安裝庫。這是MQTT客戶機(jī),允許連接到MQTT代理。
編碼解碼
常量
現(xiàn)在,所有硬件設(shè)置和軟件安裝完成后,讓我們深入研究代碼。要開始使用我們的傳感器庫,我們需要始終將其與基本Arduino庫一起包含在代碼的頂部:
現(xiàn)在我們必須定義常量參數(shù),包括I2C通信頻率、測量間隔、壓力參考和消息緩沖區(qū)大小。
然后應(yīng)該定義用于建立Wi-Fi連接和MQTT代理的常量。
然后,我們需要使用常量來配置MQTT傳感器與Home Assistant的集成,從而啟用自動發(fā)現(xiàn)和狀態(tài)更新。
然后定義一個名為discoveryMessage的StaticJsonDocument對象,其容量為512字節(jié),用于構(gòu)造用于Home Assistant發(fā)現(xiàn)的JSON消息。
現(xiàn)在我們定義兩個對象sta,它是一個wiificlient對象,將用于建立Wi-Fi連接,然后mqttc,它是PubSubClient對象,將用于MQTT連接。
此外,我們必須實例化一個PASCO2Ino類型的對象來定義我們想要的傳感功能,假設(shè)我們將其命名為cotwo。
聲明一個字符數(shù)組msg,其大小為MSG_BUFFER_SIZE,它將用于存儲MQTT消息。
在我們可以嘗試一切之前,要做的最后一步是創(chuàng)建一個錯誤類型變量和一個16位整數(shù)來存儲我們的傳感器讀數(shù)。(錯誤類型變量將被用作錯誤監(jiān)控緩沖區(qū),我們將監(jiān)控其值以確保一切正常工作):
Wi-Fi連接
現(xiàn)在定義一個函數(shù)connect_wifi來建立Wi-Fi連接。該函數(shù)首先打印一條消息,指示要連接的Wi-Fi網(wǎng)絡(luò),并使用begin()啟動Wi-Fi連接。然后等待連接建立,連接成功后打印成功消息和在Wi-Fi網(wǎng)絡(luò)中獲得的本地IP地址。
MQTT連接
定義了reconnect_mqtt()函數(shù)來建立或重新建立MQTT連接。在這里,它進(jìn)入一個循環(huán),直到MQTT連接建立為止。然后,它嘗試使用mqttc.connect()連接到MQTT代理。如果連接成功,則打印成功消息;如果連接失敗,則打印帶有返回代碼的錯誤消息,并等待3秒后重試。
設(shè)置
現(xiàn)在我們有了setup()函數(shù)。這里我們初始化波特率為115200的串行端口
初始化CO2傳感器的I2C接口。
下一步是實際初始化我們的傳感器,我們通過在我們創(chuàng)建的PASCO2Ino對象的實例上使用begin()函數(shù)來實現(xiàn)。在這里,我們前面創(chuàng)建的錯誤類型變量證明它很方便。我們將使用它來檢查初始化是否成功執(zhí)行:
通過調(diào)用connect_wifi()函數(shù)建立Wi-Fi連接。接下來,使用服務(wù)器地址、端口和緩沖區(qū)大小配置MQTT客戶機(jī),為通信做好準(zhǔn)備。如果MQTT連接丟失,則調(diào)用reconnect_mqtt()函數(shù)來重新建立鏈接。
現(xiàn)在我們必須為PAS CO2傳感器準(zhǔn)備Home Assistant MQTT Discovery消息。請參閱此處查看背后的文檔。這里我們?yōu)閭鞲衅髟O(shè)置了name、state_topic、unit_of_measurement、device_class和unique_id等屬性。
我們還創(chuàng)建了一個嵌套的設(shè)備對象,該對象具有name屬性和一個標(biāo)識符數(shù)組,其中包含我們的MQTT client_id作為標(biāo)識符。
在此之后,JSON對象被序列化為字符串,準(zhǔn)備發(fā)布到MQTT代理。
此代碼將MQTT發(fā)現(xiàn)有效負(fù)載打印到串行控制臺以進(jìn)行調(diào)試。然后,它使用MQTT客戶機(jī)將有效負(fù)載發(fā)布到指定的discoveryTopic,使用false參數(shù)表示消息不應(yīng)保留在代理上。
現(xiàn)在,作為一個可選的中間步驟,我們打印要發(fā)布的消息。
在此之后,消息將發(fā)布到代理的Home Assistant Discovery主題,設(shè)備將已經(jīng)顯示在Home Assistant中。
循環(huán)
主循環(huán)做以下事情:
?如果斷開連接,通過調(diào)用reconnect_mqtt()來維護(hù)MQTT連接。
?使用cotwo. getco2 (co2ppm)檢索CO2傳感器值,如果出現(xiàn)錯誤,則嘗試處理錯誤,如果成功則發(fā)布CO2值。
?將更新的傳感器值發(fā)布到指定的state_topic。
?調(diào)用mqttc.loop()來處理傳入的MQTT消息。
?等待指定的時間間隔(PERIODIC_MEAS_INTERVAL_IN_SECONDS),然后進(jìn)行下一次測量。
現(xiàn)在,一旦你編譯并上傳Arduino代碼到你的PSOC6設(shè)備,你會看到傳感器二氧化碳添加在你的家庭助理MQTT設(shè)備(設(shè)備-> MQTT)。上傳后,您應(yīng)該看到“CO2傳感器設(shè)備”和“CO2值”實體添加。
在幾秒鐘的初始化時間后,傳感器將發(fā)布第一個測量值,該值將更新每個測量間隔。您的設(shè)置已經(jīng)完成,您已經(jīng)準(zhǔn)備好開始監(jiān)控和探索傳感器的讀數(shù)!
本文編譯自hackster.io