想象走進一個萬物和諧運轉(zhuǎn)的家——燈光會根據(jù)你的存在而自動調(diào)節(jié);百葉窗會根據(jù)陽光強度自動開合;溫度始終保持在舒適的狀態(tài)——而這一切都不需要你動一根手指。這就是Matter標(biāo)準(zhǔn)致力實現(xiàn)的愿景。該標(biāo)準(zhǔn)由CSA聯(lián)盟于2019年制定,目標(biāo)是簡化智能家居設(shè)備的碎片化問題。CSA該聯(lián)盟由亞馬遜、蘋果、谷歌等科技巨頭聯(lián)合創(chuàng)立。在Matter的支持下,無法互通的應(yīng)用和設(shè)備都將成為歷史,恒溫器、門鈴、攝像頭等設(shè)備都將實現(xiàn)無縫協(xié)作。
在本指南中,您將學(xué)習(xí)如何構(gòu)建一個通過Amazon Alexa語音AI控制的智能卷簾系統(tǒng),并將傳感器數(shù)據(jù)集成至開源Home Assistant軟件和Arduino Cloud,實現(xiàn)更加強大的自動化與實時監(jiān)控功能。無論您是經(jīng)驗豐富的開發(fā)人員,還是剛剛?cè)胄械男率郑隧椖慷紝⒅蛟煲粋€互聯(lián)、智能的家居環(huán)境。
項目材料與資源
項目物料清單(BOM)
Arduino Nano Matter
DFRobot SEN0245飛行時間距離傳感器
Adafruit BH1750光傳感器
Adafruit MCP9808溫度傳感器擴展板
Analog Devices TMC2209步進電機驅(qū)動器(或Arduino電機擴展版Rev3)
12V電源適配器
焊接板
Arduino Nano螺絲端子適配器
散熱片
Amazon Echo(第四代)
卷簾式窗簾
項目代碼/軟件
Arduino集成開發(fā)環(huán)境(IDE)
Amazon Alexa移動應(yīng)用
VirtualBox 7.1.2
Home Assistant移動應(yīng)用
Home Assistant
Arduino Cloud(需訂閱)
其他資源
調(diào)試技巧與GitHub資源
Arduino Nano Matter引腳布局
項目硬件概覽
Arduino Nano Matter開發(fā)板(圖1)結(jié)合了Arduino的易用性與Silicon LabsMGM240S多協(xié)議無線模塊的強大功能,是開發(fā)Matter兼容物聯(lián)網(wǎng)(IoT)設(shè)備的理想平臺。
圖1:搭載Silicon Labs MGM240S模塊的Arduino Nano Matter開發(fā)板。(圖源:Arduino)
這款緊湊的平臺可以使各種經(jīng)驗水平的制造商都能輕松構(gòu)建智能家居設(shè)備、升級現(xiàn)有項目,并嘗試使用Matter、OpenThread、Zigbee和低功耗藍(lán)牙等協(xié)議。
Silicon Labs MGM240S模塊是Nano Matter開發(fā)板的核心,它是一個系統(tǒng)級封裝(SiP)模塊,專為電池供電的物聯(lián)網(wǎng)設(shè)備而優(yōu)化。該模塊基于2系列EFR32MG24 SoC構(gòu)建,具有先進的連接功能、高安全性和出色的能效,是智能家居和自動化應(yīng)用的絕佳選擇。
項目軟件概覽
該項目使用以下軟件和環(huán)境:
Arduino IDE:編寫、上傳代碼至Nano Matter開發(fā)板
Amazon Alexa移動應(yīng)用:與項目集成,通過語音命令和例程控制智能卷簾
VirtualBox 7.1.2:在Windows主機上虛擬化Home Assistant
Home Assistant移動應(yīng)用:為設(shè)備監(jiān)控提供便利
Home Assistant:先進的家居自動化平臺,可實現(xiàn)物聯(lián)網(wǎng)設(shè)備的靈活本地控制
Arduino Cloud:用于遠(yuǎn)程監(jiān)控設(shè)備;提供基于云的儀表板,實現(xiàn)傳感器數(shù)據(jù)實時可視化;可與物聯(lián)網(wǎng)應(yīng)用集成,實現(xiàn)遠(yuǎn)程訪問和自動化
項目開發(fā)
本項目的目標(biāo)是通過Thread通信將Arduino Nano Matter開發(fā)板連接到Amazon Alexa Hub,從而通過Alexa應(yīng)用控制卷簾。此外,您還可以通過Arduino Cloud儀表板和Home Assistant應(yīng)用監(jiān)控卷簾,實現(xiàn)靈活的多功能智能家居自動化控制系統(tǒng)。
首先,我們將介紹開發(fā)過程所需的軟件,然后再介紹本項目中使用的硬件。
設(shè)置Arduino IDE
我們選擇使用Arduino IDE進行開發(fā),以確保與Nano Matter開發(fā)板完全兼容,因為這款開發(fā)板并沒有完全適配Arduino Cloud IDE。為了便于測試和調(diào)試,我們將該項目分成幾個階段來實現(xiàn)。首先,使用Nano Matter庫提供的預(yù)構(gòu)建示例草圖對開發(fā)板的Matter功能進行基本測試(圖2)。
圖2:Arduino IDE提供了許多用于Matter的示例草圖。(圖源:貿(mào)澤電子)
設(shè)置用于開發(fā)的Nano Matter內(nèi)核:
1.單擊文件,選擇首選項。
2.在設(shè)置選項卡的
其他開發(fā)板管理器地址字段(圖3)中,輸入“https://siliconlabs.github.io/arduino/package_arduinosilabs_index.json”,然后單擊確定。
圖3:Arduino IDE首選項窗口。(圖源:貿(mào)澤電子)
3.單擊工具,選擇開發(fā)板,然后選擇開發(fā)板管理器。
4.搜索“Silicon Labs”,安裝最新的Silicon Labs內(nèi)核(圖4)。
圖4:用于Arduino Nano Matter的Silicon Labs內(nèi)核。(圖源:貿(mào)澤電子)
5.單擊工具,單擊Protocol stack,然后選擇Matter(圖5)。
圖5:Arduino IDE中顯示Arduino Nano Matter協(xié)議棧。(圖源:貿(mào)澤電子)
設(shè)置Arduino Cloud API
由于Arduino Nano Matter開發(fā)板沒有內(nèi)置Wi-Fi ^?^ 連接,因而我們使用Home Assistant通過Matter協(xié)議連接到Arduino Cloud以實現(xiàn)自動化。該集成方案需使用付費訂閱的Arduino Cloud API。請確保您的訂閱計劃包含對設(shè)備連接的API支持。
在Arduino Cloud(圖6)中,新建一個Thing并添加三個變量:一個用于接收溫度傳感器數(shù)據(jù),一個用于光傳感器,還有一個用于跟蹤卷簾打開或關(guān)閉位置的百分比大小(圖7)。
圖6:Arduino儀表板。(圖源:貿(mào)澤電子)
圖7:在Arduino Cloud中添加變量。(圖源:貿(mào)澤電子)
2.記下變量ID(圖8),本項目中稍后需要用到它們。
圖8:Arduino Cloud中顯示變量ID。(圖源:貿(mào)澤電子)
3.單擊左側(cè)菜單中的Space Settings,將Space ID復(fù)制出來,稍后也需要用到它(圖9)。
圖9:Arduino Cloud中顯示Space Settings和Space ID。(圖源:貿(mào)澤電子)
4.單擊左上角的賬戶圖標(biāo),選擇API Keys。
5.創(chuàng)建新的API Key并妥善保存,稍后需要用到它(圖10)。
圖10:在Arduino Cloud中查找API Key。(圖源:貿(mào)澤電子)
設(shè)置Home Assistant
本節(jié)將介紹在Windows計算機上使用VirtualBox安裝Home Assistant的操作步驟。
下載Home Assistant虛擬電腦映像
在Home Assistant網(wǎng)站上,單擊導(dǎo)航欄中的Getting Started項,然后找到Install Home Assistant on Windows(圖11)。
單擊View Tutorial按鈕。
下載VirtualBox (.vdi) 映像。
圖11:Home Assistant網(wǎng)站顯示獲取Windows .vdi映像的位置。(圖源:貿(mào)澤電子)
下載并安裝VirtualBox
在VirtualBox網(wǎng)站上,單擊Download,然后在VirtualBox Platform Packages中選擇Windows Hosts。
打開安裝程序,按照提示在計算機上安裝VirtualBox。
在安裝VirtualBox的同時,找到之前下載的Home Assistant映像文件,將.vdi映像從.zip壓縮包中解壓縮出來。
在VirtualBox中新建虛擬電腦
1.打開VirtualBox,單擊新建創(chuàng)建新虛擬電腦(VM)。
2.在名稱字段中,輸入“Home Assistant”。
3.將類型設(shè)為Linux、版本設(shè)為Other Linux (64-bit),然后單擊下一步(圖12)。
圖12:VirtualBox新建虛擬電腦的設(shè)置(圖源:貿(mào)澤電子)
配置虛擬電腦設(shè)置
1.設(shè)置內(nèi)存(RAM)大小和CPU內(nèi)核數(shù)。建議至少設(shè)置2GB RAM和兩個虛擬CPU核心。
2.選中啟用EFI。該設(shè)置對Home Assistant正常運行必不可少(圖13)。
圖13:VirtualBox為虛擬電腦分配內(nèi)存和處理器數(shù)量的設(shè)置。(圖源:貿(mào)澤電子)
添加Home Assistant虛擬硬盤
在虛擬硬盤下,選中使用已有的虛擬硬盤文件,然后單擊文件夾圖標(biāo)(圖14)。
在接下來出現(xiàn)的窗口中,單擊左上方的添加圖標(biāo),瀏覽到先前解壓縮出來的Home Assistant .vdi文件。
選中該文件,單擊選擇,然后單擊下一步。
單擊完成。
圖14:將Home Assistant .vdi文件載入到VirtualBox中。(圖源:貿(mào)澤電子)
配置網(wǎng)絡(luò)設(shè)置
打開虛擬電腦設(shè)置,單擊網(wǎng)絡(luò)選項卡。
在網(wǎng)卡1下,選擇橋接網(wǎng)卡,然后從下拉菜單中選擇您的網(wǎng)卡(圖15)。
圖15:在VirtualBox設(shè)置中添加網(wǎng)卡。如果網(wǎng)卡設(shè)置錯誤,Home Assistant將無法與網(wǎng)絡(luò)通信。(圖源:貿(mào)澤電子)
3.單擊聲音選項卡,選擇Intel HD Audio作為控制器,然后單擊確定。
啟動虛擬電腦
配置好虛擬機和網(wǎng)絡(luò)設(shè)置后,單擊啟動以啟動Home Assistant虛擬電腦,觀察啟動過程直至完成(圖16)。
圖16:VirtualBox中的虛擬電腦。(圖源:貿(mào)澤電子)
完成Home Assistant設(shè)置
虛擬電腦運行后,打開瀏覽器并訪問http://homeassistant.local:8123,必要時也可使用虛擬電腦的IPv4地址(圖17)。
圖17:Home Assistant在虛擬電腦上運行。我們使用IPv4地址遠(yuǎn)程訪問Home Assistant。(圖源:貿(mào)澤電子)
1.在Home Assistant歡迎屏幕上,單擊Create My Smart Home打開設(shè)置向?qū)В▓D18)。
圖18:Home Assistant歡迎屏幕。(圖源:貿(mào)澤電子)
2.完成設(shè)置向?qū)Ш螅瑢@示Home Assistant儀表板(圖19)。
圖19:Home Assistant儀表板。(圖源:貿(mào)澤電子)
為Nano Matter開發(fā)板供電
Nano Matter開發(fā)板可通過USB Type-C電纜或連接到IN5V引腳的外部5V電源供電,具體請參閱“項目材料與資源”中的開發(fā)板引腳布局。
設(shè)置步進電機和TMC2209驅(qū)動器
本項目中,我們使用了Analog Devices的TMC2209步進電機驅(qū)動器,它具有運行安靜、精度高和控制平穩(wěn)的特點,是智能卷簾系統(tǒng)的理想之選。下面將詳細(xì)介紹如何設(shè)置步進電機和驅(qū)動器,以及確保高性能和防止損壞的重要注意事項。
1.將電機導(dǎo)線連接至TMC2209驅(qū)動器的A1、A2、B1和B2引腳。如果不確定接線順序,請使用萬用表檢查電機導(dǎo)線之間的導(dǎo)通性。如果兩根導(dǎo)線是成對的(即檢測到導(dǎo)通),請將它們連接倒驅(qū)動器的A1/A2或B1/B2引腳(圖20)。
注:接線錯誤會導(dǎo)致電機振動而不旋轉(zhuǎn)或完全不運轉(zhuǎn)。
圖20:(a)在面包板上使用TMC2209驅(qū)動器和Arduino Nano Matter開發(fā)板測試步進電機。(b)集成了電機驅(qū)動器和Arduino Nano Matter的焊接板。(圖源:貿(mào)澤電子)
由于我們使用12V電源為步進電機供電,因此要確保TMC2209驅(qū)動器內(nèi)部邏輯的5V輸入正確連接到電路板上,以確保電機平穩(wěn)運行。
2.關(guān)閉驅(qū)動器電源。關(guān)閉電源后,逆時針旋轉(zhuǎn)驅(qū)動器電位器以增加電流,順時針旋轉(zhuǎn)以減少電流。
3.調(diào)整電流后,重新打開驅(qū)動器電源并測量參考電壓,以確保設(shè)置正確。通過測量該電壓,可以精確、可重復(fù)、安全地設(shè)置電機電流,比僅憑直覺調(diào)節(jié)更加可靠。
TMC2209驅(qū)動器在運行過程中會產(chǎn)生熱量,因此適當(dāng)?shù)臒峁芾碇陵P(guān)重要。在驅(qū)動器上安裝散熱片,確保周圍有足夠的空隙,以避免與附近的引腳短路。必要時可考慮使用散熱風(fēng)扇,以防止過熱并確保驅(qū)動器維持高性能。
安裝注意事項:
安裝時務(wù)必仔細(xì)檢查驅(qū)動器的方向。安裝錯誤會導(dǎo)致永久性損壞。
測量電壓時切勿連接電機,否則會燒壞驅(qū)動器。
在設(shè)置和測試過程中,請使用主電源進行電壓測量,不要依賴USB供電。
項目概覽
圖21是本項目的示意圖。
圖21:本項目所使用硬件示意圖。(圖源:貿(mào)澤電子)
Arduino項目
本項目使用的最終Arduino項目可從貿(mào)澤的GitHub上獲取,其中包括對關(guān)鍵函數(shù)和變量的說明。下載項目后,Arduino Nano Matter開發(fā)板通過USB連接到計算機。確保在Arduino IDE中選擇了正確的板和端口,然后點擊上傳將代碼傳輸?shù)介_發(fā)板上。
下文將對Arduino項目的主要函數(shù)和變量進行說明。
庫
#include
#include
#include
#include
#include
#include
#include
#include
#include
Matter和MatterWindowCovering:這些庫處理Matter協(xié)議,該協(xié)議用于與Alexa等智能家居設(shè)備和Thread網(wǎng)絡(luò)進行通信。
TMCStepper:用于使用通用異步收發(fā)器(UART)通信來控制TMC2209步進電機驅(qū)動器的庫。
Wire:處理微控制器與I2C設(shè)備之間的I2C通信協(xié)議。
BH1750和MatterIlluminance:BH1750是一款光傳感器,MatterIlluminance有助于將其集成到Matter生態(tài)系統(tǒng)中。
Adafruit_MCP9808和MatterTemperature:MCP9808是一款數(shù)字溫度傳感器,MatterTemperature將其讀數(shù)與Matter集成。
Adafruit_VL53L0X:用于控制VL53L0X接近傳感器的庫。
傳感器對象初始化
Adafruit_VL53L0X lox = Adafruit_VL53L0X();
BH1750 lightMeter;
Adafruit_MCP9808 tempsensor = Adafruit_MCP9808();
MatterIlluminance matter_illuminance_sensor;
MatterTemperature matter_temperature_sensor;
VL53L0X:管理接近傳感器的對象。該傳感器用于初始化窗戶的高度。
BH1750 (lightMeter):用于測量照度的對象。
MCP9808 (tempsensor):用于檢測溫度。從MCP9808傳感器讀取溫度值。
MatterIlluminance和MatterTemperature:向Matter生態(tài)系統(tǒng)(如Alexa)報告光照和溫度水平的對象。
閾值定義
const float lightCloseThreshold = 1000.0;
const float lightOpenThreshold = 5.0;
定義關(guān)閉和打開卷簾時的光照強度(單位:勒克斯)。如果光照強度超過1000勒克斯,卷簾就會關(guān)閉;如果低于5勒克斯,卷簾就會打開。
引腳定義和步進電機設(shè)置
#define EN_PIN 7
#define DIR_PIN 4
#define STEP_PIN 3
#define R_SENSE 0.11
#define UART_ADDRESS 0x00
EN_PIN、DIR_PIN、STEP_PIN:這些引腳用于控制TMC2209電機驅(qū)動器。
R_SENSE:配置電機驅(qū)動器電流測量所需的感應(yīng)電阻值(通常為0.11Ω)。
UART_ADDRESS:用于定義微控制器與TMC2209之間通信的UART地址。
步進電機對象
TMC2209Stepper driver(&Serial1, R_SENSE, UART_ADDRESS);
使用UART (Serial1) 為TMC2209步進電機創(chuàng)建驅(qū)動程序?qū)ο螅员闩c電機驅(qū)動程序通信。
設(shè)置函數(shù)
void setup() { ... }
串行通信:Serial.begin(115200) 用于初始化串行通信,Serial1.begin(115200) 用于與TMC2209進行UART通信。
VL53L0X傳感器初始化:lox.begin(0x29) 在默認(rèn)I2C地址(0x29)上初始化接近傳感器。
光傳感器和溫度傳感器初始化:matter_illuminance_sensor.begin() 和matter_temperature_sensor.begin() 函數(shù)將初始化這些傳感器,以便進行Matter報告。
TMC2209設(shè)置:
driver.begin():啟動電機驅(qū)動器。
driver.toff(5):將步進電機驅(qū)動器的關(guān)閉時間設(shè)置為5。
driver.rms_current(500):將電機電流限制在500mA。根據(jù)您使用的驅(qū)動器,最大電流可能需要手動設(shè)置。
driver.microsteps(1):確保電機全速運行。
driver.en_spreadCycle(false):啟用名為StealthChop的靜音模式,實現(xiàn)更流暢的靜音運行。
LED和引腳設(shè)置:pinMode() 函數(shù)設(shè)置特定引腳的方向,如內(nèi)置LED和電機控制引腳(STEP、DIR、EN)。
循環(huán)函數(shù)
void loop() { ... }
光照和溫度報告:
float lux = lightMeter.readLightLevel():讀取環(huán)境光亮度。
float tempC = tempsensor.readTempC():讀取當(dāng)前溫度(攝氏度)。
matter_illuminance_sensor.set_measured_value_lux(lux) 和matter_temperature_sensor.set_measured_value_celsius(tempC):向Matter報告光照和溫度水平。
電機控制:
電機的位置通過matter_blinds.get_requested_lift_position_raw() 和set_actual_lift_position_raw() 函數(shù)不斷更新。
使用check_light_and_adjust_blinds() 函數(shù)可根據(jù)照度調(diào)整卷簾位置(向上或向下)。
光照控制邏輯(卷簾)
void check_light_and_adjust_blinds (int32_t current_percent) { ... }
勒克斯閾值檢查:如果照度大于高閾值(1000勒克斯),卷簾將關(guān)閉。如果照度小于低閾值(5勒克斯),卷簾將打開。由于Alexa應(yīng)用目前不支持創(chuàng)建帶有光傳感器的例程,因此我們決定用代碼來實現(xiàn)這一自動化。
卷簾動作:move_blinds() 函數(shù)將卷簾的位置調(diào)整為向上或向下。
電機動作函數(shù)
void step_motor() { ... }
void stop_motor() { ... }
step_motor():通過切換STEP_PIN和調(diào)整脈沖寬度來控制電機走動一步,實現(xiàn)速度控制。
stop_motor():通過禁用電機驅(qū)動器和停止向STEP_PIN發(fā)送脈沖來停止電機。
停用處理函數(shù)
void decommission_handler() { ... }
該函數(shù)檢查內(nèi)置按鈕是否被按下超過10秒,通過清除存儲的數(shù)據(jù)讓設(shè)備退出Matter。
LED亮度更新
void update_onboard_led(uint8_t brightness) { ... }
根據(jù)卷簾位置調(diào)整板載LED的亮度。如果卷簾關(guān)閉,亮度將為零;如果完全打開,亮度將映射到10至255的范圍內(nèi)。
集成Amazon Alexa
要將Arduino Nano Matter開發(fā)板與Amazon Alexa集成,請按照以下步驟操作:
1.將項目上傳到Arduino Nano Matter開發(fā)板后,“串口監(jiān)視器”中會出現(xiàn)一個二維碼URL(圖22)。
圖22:Arduino IDE中顯示集成到Alexa所需的二維碼URL。(圖源:貿(mào)澤電子)
2.將URL復(fù)制并粘貼到瀏覽器中,即可顯示該二維碼。
3.打開Amazon Alexa應(yīng)用,點擊右上角的 + 符號。
4.選擇Device,然后選擇Matter徽標(biāo)。
5.使用Alexa應(yīng)用掃描Nano Matter項目生成的二維碼。
6.選擇可用的Thread網(wǎng)絡(luò),等待設(shè)備納入其中并添加到Alexa應(yīng)用中(圖23)。
圖23:Amazon Alexa中顯示智能卷簾以及光和溫度傳感器。(圖源:貿(mào)澤電子)
現(xiàn)在,您的Matter兼容設(shè)備將集成到Alexa應(yīng)用中,隨時可供使用。
注:如果在連接Arduino Nano Matter開發(fā)板和Alexa應(yīng)用時遇到任何問題,請按照我們的調(diào)試提示進行操作。圖24是我們在實施過程中曾遇到過的一些問題。
圖24:這是我們在將Arduino Nano Matter與Alexa應(yīng)用連接時曾遇到過的一些錯誤。如果發(fā)生類似的問題,請嘗試按照貿(mào)澤GitHub上提供的調(diào)試提示操作。(圖源:貿(mào)澤電子)
與Home Assistant和Arduino Cloud集成
在本節(jié)中,我們將把Arduino Nano Matter開發(fā)板與Home Assistant相集成在一起,并通過Arduino API將傳感器數(shù)據(jù)傳送到Arduino Cloud進行監(jiān)控。
設(shè)置Home Assistant并添加設(shè)備
要配置Home Assistant管理Matter設(shè)備,請安裝Matter Server附加組件:
1.打開Home Assistant的Settings菜單(圖25)。
圖25:Home Assistant的設(shè)置菜單(圖源:貿(mào)澤電子)
2.單擊Add-Ons,然后單擊Add-On Store。
3.在搜索欄中輸入“Matter Server”。
4.在結(jié)果中找到Matter Server附加組件,然后單擊Install。
5.安裝File editor附加組件,后面的步驟中會需要它。
6.安裝附加組件后(圖26),請確保它們配置正確并且運行正常,以便在Home Assistant中啟用Matter設(shè)備管理。
圖26:Home Assistant中的File editor和Matter Server附加組件。(圖源:貿(mào)澤電子)
接下來,在智能手機上安裝Home Assistant應(yīng)用并登錄您的賬戶,然后將傳感器添加到Home Assistant中:
1.在Alexa應(yīng)用中,選擇Control device with another assistant or app(圖27)。
圖27:在Amazon Alexa應(yīng)用設(shè)置中添加另一個助手或應(yīng)用來控制設(shè)備。(圖源:貿(mào)澤電子)
2.在Add Matter Device中,選擇Yes, it’s already in use。
3.選擇Other controllers,然后復(fù)制提供的配對碼。
4.在Home Assistant應(yīng)用中,找到Add Matter Device,將配對碼粘貼進來(圖28)。
圖28:使用從Alexa應(yīng)用復(fù)制的配對碼將Matter設(shè)備添加到Home Assistant。(圖源:貿(mào)澤電子)
設(shè)備集成進來后,Home Assistant儀表板中應(yīng)顯示溫度傳感器和光傳感器的數(shù)據(jù),以及卷簾的控制圖標(biāo)(圖29)。
圖29:Home Assistant網(wǎng)頁應(yīng)用中顯示出連接的Matter設(shè)備(位于右側(cè))。(圖源:貿(mào)澤電子)
在Home Assistant中配置Arduino Cloud集成
從左側(cè)菜單中打開File editor附加組件,然后在文件夾中找到secrets.yaml(圖30)。如果該文件不存在,請創(chuàng)建它。該文件可以安全地存儲項目ID、憑證和API密鑰等敏感數(shù)據(jù),使主配置文件保持整潔并受到保護。
圖30:Home Assistant的File editor。單擊Browse Filesystem選擇要編輯的文件。(圖源:貿(mào)澤電子)
在secrets.yaml文件中,添加以下配置,注意將占位符替換為實際的Space ID、Client ID、Client Secret和Thing ID:
arduino_organization:
token_get_payload:
'{"grant_type":"client_credentials","client_id":"<您的Client ID>","client_secret":"<您的
Client Secret>","audience":"https://api2.arduino.cc/iot"}'
arduino_temp_url: https://api2.arduino.cc/iot/v2/things//properties/<溫度變量ID>/publish
接下來,創(chuàng)建一個RESTful集成:
1.在File editor附加組件中(圖31),打開configuration.yaml文件并定義RESTful集成,以便為Arduino Cloud生成API Token:
resource: "https://api2.arduino.cc/iot/v1/clients/token"
scan_interval: 240 #4分鐘
timeout: 60
method: "POST"
headers:
content_type: 'application/json,application/x-www-form-urlencoded'
payload: !secret token_get_payload
sensor:
name: "API_Token_Bearer"
value_template: "OK"
json_attributes_path: '$..'
json_attributes:
'access_token'
圖31:Home Assistant的File editor中顯示configuration.yaml文件。(圖源:貿(mào)澤電子)
2.在configuration.yaml文件中添加以下代碼,定義向Arduino Cloud發(fā)送數(shù)據(jù)的RESTful命令,然后保存更改。
rest_command:
send_temperature: method: PUT url: !secret arduino_temp_url # 溫度傳感器的URL headers: Authorization: "Bearer {{ state_attr('sensor.api_token_bearer', 'access_token') }}" accept: "application/vnd.arduino.property+json,application/vnd.goa.error+json" content_type: 'application/json,application/x-www-form-urlencoded' X-Organization: !secret arduino_organization payload: "{"value":{{states('sensor.matter_device_temperature_2')}}}" send_light_level: # 新傳感器(如光傳感器BH1750) method: PUT url: !secret arduino_light_url # 添加光傳感器URL headers: Authorization: "Bearer {{ state_attr('sensor.api_token_bearer', 'access_token') }}" accept: "application/vnd.arduino.property+json,application/vnd.goa.error+json" content_type: 'application/json,application/x-www-form-urlencoded' X-Organization: !secret arduino_organization payload: "{"value":{{states('sensor.matter_device_illuminance')}}}" send_blind_percent: # 卷簾打開/關(guān)閉的百分比 method: PUT url: !secret arduino_blind_url # 添加卷簾URL headers: Authorization: "Bearer {{ state_attr('sensor.api_token_bearer', 'access_token') }}" accept: "application/vnd.arduino.property+json,application/vnd.goa.error+json" content_type: 'application/json,application/x-www-form-urlencoded' X-Organization: !secret arduino_organization # payload: "{"value":{{states('cover.matter_device_cover')}}}" payload: "{"value":{{state_attr('cover.matter_device_cover', 'current_position')}}}" # 引用位置屬性
請注意,每個設(shè)備都有特定的屬性;對于卷簾,我們使用current_position屬性向Arduino Cloud發(fā)送數(shù)據(jù)。要找到該屬性,請轉(zhuǎn)到左側(cè)菜單中的Developer tools,然后單擊States選項卡(圖32)。
圖32:Home Assistant的Developer tools中顯示Matter設(shè)備的狀態(tài)和屬性。(圖源:貿(mào)澤電子)
3.依然在Developer Tools中,單擊YAML選項卡。
4.單擊Check Configuration,確保YAML配置中沒有錯誤。
5.如果沒有發(fā)現(xiàn)錯誤,請單擊Restart(圖33)。
圖33:確保代碼編輯中沒有錯誤后,請重新啟動Home Assistant服務(wù)器。(圖源:貿(mào)澤電子)
在Home Assistant中創(chuàng)建自動化操作
接下來,我們將設(shè)置自動溫度更新。
1.打開Settings菜單,選擇Automations & scenes(圖34)。
圖34:Home Assistant中添加和編輯自動化操作的設(shè)置項。(圖源:貿(mào)澤電子)
2.在Create automation窗口中,單擊Create new automation(圖35)。
圖35:在Home Assistant中新增自動化操作。(圖源:貿(mào)澤電子)
3.單擊右上角的三個點,選擇Edit in YAML(圖36)。
4.粘貼以下YAML代碼。
alias: Nano Matter Temperature
description: ""
trigger:
platform: state
entity_id:
sensor.matter_device_temperature_2
condition: []
action:
data: {}
action: rest_command.send_temperature
mode: single
alias: Send blind level
description: ""
trigger:
platform: state
entity_id:
cover.matter_device_cover
condition: []
action:
data: {}
action: rest_command.send_blind_percent
mode: single
圖36:在Home Assistant中編輯自動化操作。(圖源:貿(mào)澤電子)
5.自動化操作設(shè)置完畢后,只要傳感器檢測到變化,來自Nano Matter開發(fā)板的傳感器數(shù)據(jù)就會自動轉(zhuǎn)發(fā)到Arduino Cloud。
在Arduino Cloud中監(jiān)控數(shù)據(jù)
1.要在 Arduino Cloud 中監(jiān)控傳感器數(shù)據(jù),必須先創(chuàng)建儀表板:
2.登錄Arduino Cloud帳戶。
單擊“Dashboards”,使用可用部件創(chuàng)建新的儀表板。
3.添加用于溫度傳感器和其他數(shù)據(jù)點(如亮度、卷簾控制)的小部件,以監(jiān)控來自Nano Matter開發(fā)板的數(shù)據(jù)(圖37)。不要忘記將小部件鏈接到本項目在“設(shè)置Arduino Cloud API”部分中創(chuàng)建的變量。
圖37:Arduino Cloud儀表板,用于添加變量并將其鏈接到小部件。(圖源:貿(mào)澤電子)
添加Alexa例程
如前所述,Alexa應(yīng)用尚不支持基于光傳感器數(shù)據(jù)的例程。為了解決這個問題,我們在Arduino中編寫了控制邏輯,以便在照度達(dá)到一定閾值時自動關(guān)閉百葉窗。不過,在撰寫本文時,Alexa已經(jīng)支持由溫度、運動、接觸和濕度傳感器數(shù)據(jù)觸發(fā)的例程。
在這個概念驗證項目中,我們設(shè)置了基于溫度的Alexa例程,在85°F(約合30°C)時關(guān)閉百葉窗,在70°F(約合21°C)時打開百葉窗。
1.在智能手機或平板電腦上打開Amazon Alexa應(yīng)用。
2.點按右下角的More圖標(biāo)(三條水平線),選擇Routines。
3.點按右上角的 + 圖標(biāo)創(chuàng)建新例程。
4.為例程命名,可以取一個描述性的名稱,如“高溫時關(guān)閉卷簾”。
5.設(shè)置觸發(fā)器:點按When this happens,選擇Smart Home。
6.選擇要監(jiān)控的房間的溫度傳感器。
7.將觸發(fā)條件設(shè)置為“Temperature is above 85°F”,然后點按Save。
點按Add Action,選擇Smart Home。
9.選擇要控制的智能卷簾。
10.將操作設(shè)置為Close(或Lower,具體取決于卷簾提供的選項)。
11.點按Finish完成例程設(shè)置。
按同樣方法創(chuàng)建另一個例程,讓卷簾在溫度降至70°F時自動打開(圖38)。
圖38:Amazon Alexa例程編輯屏幕。(圖源:貿(mào)澤電子)
創(chuàng)建好兩個例程后,通過手動調(diào)節(jié)溫度傳感器或等待實際室溫變化來對其進行測試,以確保卷簾對程序設(shè)定的溫度觸發(fā)條件做出正確響應(yīng)。
組裝
在本項目中,我們成功實施了一個完全集成的智能卷簾系統(tǒng),利用多個平臺進行控制和監(jiān)控。首先,我們使用Echo(第四代)作為中心樞紐,通過Alexa應(yīng)用設(shè)置控制,創(chuàng)建根據(jù)室溫決定百葉窗動作的自動化例程。在此基礎(chǔ)上,我們將該系統(tǒng)與Home Assistant集成,實現(xiàn)了更先進的本地執(zhí)行自動化選項,而無需依賴外部云服務(wù)。這為管理和自動化系統(tǒng)的各個組件(包括溫度和光傳感器)提供了所需的靈活性(圖39)。
圖39:構(gòu)建完成的本項目,從中可見:(a)項目中使用的硬件——(a.1)Arduino Nano Matter、(a.2)電機驅(qū)動器、(a.3)步進電機、(a.4)光傳感器、(a.5)溫度傳感器和(a.6)距離傳感器;(b)加載了我們代碼的Arduino IDE、(c)Amazon第四代Echo和(d)集成了我們的Matter設(shè)備的Amazon Alexa應(yīng)用。(圖源:貿(mào)澤電子)
為了完成設(shè)置,我們將傳感器數(shù)據(jù)轉(zhuǎn)發(fā)到Arduino Cloud,并在Arduino Could上建立了實時儀表板,用于可視化和監(jiān)控傳感器數(shù)據(jù)。通過將Alexa、Home Assistant和Arduino Cloud結(jié)合在一起,我們創(chuàng)建了一個強大的多平臺自動化系統(tǒng),可實現(xiàn)智能家居的無縫集成和實時監(jiān)控。本項目不僅展示了如何設(shè)計和構(gòu)建由Matter驅(qū)動的智能家居系統(tǒng),還展現(xiàn)了使用多平臺盡可能提高功能性和控制性所帶來的靈活性(圖40)。
圖40:(a)Home Assistant儀表板顯示已連接的Matter設(shè)備;(b)Arduino Cloud儀表版顯示已連接的Matter設(shè)備。(圖源:貿(mào)澤電子)
更進一步
當(dāng)前的智能卷簾系統(tǒng)還可以在多方面上進一步增強,實現(xiàn)更多的功能、更高的效率。
距離傳感器
改進DFRobot SEN0245距離傳感器,增設(shè)專用校準(zhǔn)按鈕,使之能夠根據(jù)不同的窗戶尺寸重新校準(zhǔn)卷簾的高度。這樣就無需再去按Arduino開發(fā)板上的重置按鈕,那個按鈕會重新初始化整個Arduino項目。
光傳感器
Adafruit BH1750光傳感器對環(huán)境光的細(xì)微變化比較敏感,加上循環(huán)函數(shù)中連續(xù)執(zhí)行照度檢測,可能會引發(fā)頻繁、非必要的調(diào)節(jié),加劇電機磨損,降低系統(tǒng)效率。以下方案或能解決這一問題。
消抖/死區(qū)機制
為避免因數(shù)據(jù)微小波動而頻繁改變電機運轉(zhuǎn)方向,可以引入消抖周期,即系統(tǒng)需在設(shè)定的閾值內(nèi)檢測到穩(wěn)定光照條件持續(xù)一定時間后才觸發(fā)調(diào)節(jié)。同時,設(shè)置照度閾值死區(qū)(例如,只有當(dāng)照度超出±10勒克斯范圍時才執(zhí)行調(diào)節(jié)),同樣有助于避免不必要的頻繁移動。
以下代碼實現(xiàn)了消抖和死區(qū)優(yōu)化:
const float lightDebounceTime = 5000; // 5秒消抖周期
const float deadband = 50.0; // 設(shè)置照度死區(qū)以避免微小波動
unsigned long lastLightCheck = 0; // 追蹤上次光照檢測
void check_light_and_adjust_blinds(int32_t current_percent) {
float lux = lightMeter.readLightLevel(); // 獲取以勒克斯為單位的照度 unsigned long currentTime = millis(); // 僅檢查上次檢測后的時間間隔是否超出消抖周期 if (currentTime - lastLightCheck > lightDebounceTime) { lastLightCheck = currentTime; // 重置消抖計時器 Serial.print("當(dāng)前照度:"); Serial.print(lux); Serial.println("lx"); // **僅當(dāng)照度高于死區(qū)閾值時才關(guān)閉卷簾** if (lux > (lightCloseThreshold + deadband) && current_percent < 100) { Serial.println("光照太強!自動關(guān)閉卷簾..."); move_blinds(current_percent, 100); // 完全關(guān)閉卷簾 } // **僅當(dāng)照度低于死區(qū)閾值時才打開卷簾** else if (lux < (lightOpenThreshold - deadband) && current_percent > 0) { Serial.println("光照太弱!自動打開卷簾..."); move_blinds(current_percent, 0); // 完全打開卷簾 } }
}
反饋系統(tǒng)
采用電位計或編碼器構(gòu)建反饋系統(tǒng),追蹤卷簾的準(zhǔn)確位置。此舉使系統(tǒng)始終知道卷簾的精確位置,減少過沖或欠沖的風(fēng)險。將編碼器與電機一起使用,還能實現(xiàn)精確的移動控制,確保系統(tǒng)只移動所需的行程,而非僅僅依賴照度數(shù)據(jù)。
限位開關(guān)
在全開和全關(guān)位置加裝限位開關(guān),提供額外的安全和控制。系統(tǒng)可利用這些限位開關(guān)防止電機運轉(zhuǎn)超出卷簾的物理極限,以免造成損壞。限位開關(guān)還可在系統(tǒng)失去對卷簾位置的追蹤時(如斷電或手動調(diào)節(jié)后)作為重置位置的參考。
傳感器讀數(shù)平滑
為應(yīng)對輕微的照度波動,在決定打開或關(guān)閉百葉簾之前,可讓系統(tǒng)將最近幾次傳感器讀數(shù)(如最近五次讀數(shù))進行平均處理。此舉可消除光線條件瞬時波動造成的影響。
緊湊型設(shè)計和原型制作
使用集成所有元器件的緊湊型3D打印外殼完善設(shè)計。此外,控制卷簾的齒輪也可以通過3D打印進行改進,便于在開發(fā)過程中輕松調(diào)整。
擴展自動化和例程
創(chuàng)建控制多個設(shè)備的附加例程,使系統(tǒng)能夠與其他智能家居組件(如燈、恒溫器或安全系統(tǒng))進行交互。還可以在代碼中增加RGB燈效功能,增強燈光效果。
語音控制和高級自動化
通過IFTTT或Home Assistant等平臺集成語音控制功能,使用戶能夠通過簡單的語音指令控制卷簾。此外還可以實現(xiàn)基于實時天氣數(shù)據(jù)自動化控制的功能。
能效提升和手動控制
加裝太陽能電池板,在白天為電池充電,使本項目更加節(jié)能,減少對外部電源的依賴。為了進一步的便利,還可以安裝電容式傳感器,對卷簾進行手動控制。
安防系統(tǒng)集成
將智能卷簾與住宅安防系統(tǒng)集成,支持根據(jù)警報觸發(fā)情況關(guān)閉或打開。
精確反饋傳感器
采用限位開關(guān)或編碼器等反饋傳感器,幫助監(jiān)控卷簾的準(zhǔn)確位置。此舉可以讓系統(tǒng)控制更精確,確保卷簾位置正確。
通過實施這些增強方案,可以顯著提升智能卷簾系統(tǒng)的適應(yīng)性和能效,并與其他智能家居技術(shù)深度集成,為用戶提供更強的控制力和更大的便利性。
結(jié)語
本項目展示了Matter協(xié)議在構(gòu)建互聯(lián)智能家居系統(tǒng)方面的強大潛力。我們使用Arduino Nano Matter開發(fā)板,板載Silicon Labs MGM240S模塊、各種傳感器和Alexa,創(chuàng)建了一個無縫、安全和可擴展的解決方案,并使用Thread和低功耗藍(lán)牙集成了多個設(shè)備。Matter協(xié)議簡化了調(diào)試過程,確保了強大的安全性,促進了設(shè)備間的互操作性,這些使其成為了智能家居自動化的未來。Arduino Nano Matter開發(fā)板的靈活性使工程師和開發(fā)人員能夠輕松構(gòu)建和擴展其物聯(lián)網(wǎng)系統(tǒng)原型,并為添加新的Matter兼容設(shè)備提供無限可能。該項目為未來的改進奠定了堅實的基礎(chǔ),為更復(fù)雜、更有創(chuàng)意的智能家居集成提供了可能。
作者簡介
Ricky Flores是貿(mào)澤電子的技術(shù)營銷工程師。他擁有密歇根大學(xué)電氣工程碩士學(xué)位,曾就職于Texas Instruments和新墨西哥大學(xué)高科技材料中心(CHTM)。Ricky將MEMS、ESD和模擬設(shè)計工程方面的豐富專業(yè)知識與十多年的技術(shù)營銷經(jīng)驗相結(jié)合。工作之余,他熱衷于房地產(chǎn)、編程、DIY,以及提升工程應(yīng)用的用戶體驗。
-
傳感器
+關(guān)注
關(guān)注
2566文章
53008瀏覽量
767632 -
AI
+關(guān)注
關(guān)注
88文章
35166瀏覽量
280098 -
智能家居
+關(guān)注
關(guān)注
1934文章
9806瀏覽量
190612 -
Arduino
+關(guān)注
關(guān)注
190文章
6498瀏覽量
192227 -
Matter
+關(guān)注
關(guān)注
1文章
278瀏覽量
6452
原文標(biāo)題:純干貨!手把手教你借助Matter和Arduino打造自己的智能家居
文章出處:【微信號:貿(mào)澤電子,微信公眾號:貿(mào)澤電子】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
Matter 智能家居的通用語言
智能家居系統(tǒng)、智能家居解決方案及智能家居定制開發(fā)
求基于Cortex-M3與Android的智能家居控制系統(tǒng)解決方案
飛睿科技代理樂鑫WiFi模塊方案,智能家居無線技術(shù)應(yīng)用
關(guān)于簡化構(gòu)建支持Matter智能家居的過程
英飛凌支持Matter標(biāo)準(zhǔn),助推綠色智能家居落地

TI Matter 解決方案助力智能家居創(chuàng)新
基于PSoC? 6 Matter的智能家居解決方案

看視頻,了解Matter協(xié)議如何多方面促進智能家居行業(yè)大統(tǒng)一
移遠(yuǎn)通信推出一站式Matter解決方案,構(gòu)建智能家居開放新生態(tài)

評論