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