建與運(yùn)行 Matter 空氣凈化器示例應(yīng)用(connectedhomeip / CC3235SF LaunchPad))
在 Texas Instruments CC32XX 上構(gòu)建與運(yùn)行 Matter 空氣凈化器示例應(yīng)用connectedhomeip / CC3235SF LaunchPad【免費(fèi)下載鏈接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.項目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip導(dǎo)讀本文基于 connectedhomeipMatter/Project CHIP 開源實(shí)現(xiàn)倉庫中的 CC32XX Air Purifier 示例應(yīng)用文檔系統(tǒng)講解如何在一顆 TI SimpleLink? Wi-Fi? CC32XX 無線 MCU默認(rèn)目標(biāo)為 CC3235SF_LAUNCHXL LaunchPad上編譯、燒錄并運(yùn)行一個完整的 Matter 空氣凈化器設(shè)備。你將掌握從環(huán)境準(zhǔn)備SysConfig bootstrap、GN/Ninja 交叉編譯、DAC 證書替換到 CCS 調(diào)試燒錄、UART 日志查看、以及通過 SimpleLink 方式配網(wǎng)并入 Matter 網(wǎng)絡(luò)的全流程并能在閱讀過程中對照倉庫源碼理解應(yīng)用初始化、按鈕交互、KVS 存儲與設(shè)備認(rèn)證的實(shí)現(xiàn)細(xì)節(jié)。一、示例應(yīng)用概述一個基于 CC32XX 的聯(lián)網(wǎng)空氣凈化器CC32XX 空氣凈化器示例應(yīng)用examples/air-purifier-app/cc32xx是一個可工作的聯(lián)網(wǎng)空氣凈化器設(shè)備演示它同時使用開源 Matter/CHIP 實(shí)現(xiàn)與德州儀器 SimpleLink? Wi-Fi? CC32xx 軟件開發(fā)套件SDK。目標(biāo)硬件默認(rèn)面向 CC3235SF_LAUNCHXL LaunchPad但示例工程被設(shè)計為可在整個CC32XX系列 MCU 上構(gòu)建板卡名通過 GN 變量ti_simplelink_board指定見 args.gni。定位既可作為探索 Matter/CHIP 工作原理的入口也可作為基于 TI 器件開發(fā)真實(shí)產(chǎn)品的模板。從構(gòu)建腳本看這個示例并非單端點(diǎn)燈泡式應(yīng)用而是一個多端點(diǎn)Endpoint聚合設(shè)備。在 AppTask.cpp 中定義了 5 個端點(diǎn)端點(diǎn) ID用途1空氣凈化器主體Air Purifier2空氣質(zhì)量傳感器Air Quality Sensor3溫度傳感器Temperature Sensor4相對濕度傳感器Relative Humidity Sensor5恒溫器Thermostat其中傳感器與恒溫器端點(diǎn)通過SetParentEndpointForEndpoint(...)掛接在空氣凈化器端點(diǎn)之下形成父子端點(diǎn)層級見 AppTask.cpp隨后由AirPurifierManager::InitInstance(...)統(tǒng)一初始化AppTask.cpp。公共邏輯位于 examples/air-purifier-app/air-purifier-common其中包含集群定義文件air-purifier-app.zap、數(shù)據(jù)模型文件air-purifier-app.matter以及src/下的管理器實(shí)現(xiàn)CC32XX 工程通過air-purifier-common目標(biāo)直接復(fù)用見 BUILD.gn。二、設(shè)備 UI按鍵交互與狀態(tài)指示2.1 按鍵行為按鍵動作行為左鍵BTN-1單擊觸發(fā)配網(wǎng)Provisioning默認(rèn)以 oneshot 模式啟用右鍵BTN-2長按1 秒復(fù)位設(shè)備 / 清除 Matter 配置右鍵長按的底層實(shí)現(xiàn)在 AppTask.cpp 的ButtonRightEventHandler中TI Button 驅(qū)動產(chǎn)生Button_EV_CLICKED或Button_EV_LONGCLICKED事件長按閾值longPressDuration 1000UmsAppTask.cpp事件經(jīng) ISR 上下文通過xQueueSendFromISR投遞到應(yīng)用事件隊列由DispatchEvent處理長按事件會先刪除設(shè)備文件系統(tǒng)上的 KVS 配置/sys/matter/kvs.cfgtoken0x13578642隨后執(zhí)行 Matter 部分設(shè)備復(fù)位AppTask.cpp。應(yīng)用主循環(huán)則通過 FreeRTOS 隊列xQueueReceive等待并分發(fā)事件AppTask.cpp。2.2 按鍵 / LED 的硬件映射按鍵與 LED 的引腳映射由 SysConfig 工程文件 chip.syscfg 定義CONFIG_BTN_LEFT? 板載SW2CONFIG_BTN_RIGHT? 板載SW3CONFIG_LED_BLUE、CONFIG_LED_GREEN、CONFIG_LED_RED紅色 LED 為可調(diào)光 PWM 輸出占用了 Timer3 通道見 chip.syscfg。AppTask::Init()中會依次打開紅、綠 LED 并初始化為熄滅狀態(tài)AppTask.cpp。Wi-Fi 模塊還支持將藍(lán)色 LED 用作連接狀態(tài)指示斷開時常滅、配網(wǎng)中閃爍、已連接常亮見 wifi_settings.h 的WIFI_LED_HANDLE宏。三、構(gòu)建環(huán)境準(zhǔn)備Preparation構(gòu)建環(huán)境為 Linux官方推薦 Ubuntu 20.04。本節(jié)操作在每次升級 SDK 版本后都需要重新執(zhí)行。3.1 安裝 SysConfigSysConfig 是 TI 的圖形化 / 命令行配置工具負(fù)責(zé)根據(jù)chip.syscfg生成驅(qū)動配置文件ti_drivers_config.c/.h、ti_drivers_net_wifi_config.c、ti_net_config.c等見 BUILD.gn。安裝命令$ cd ~ $ wget https://software-dl.ti.com/ccs/esd/sysconfig/sysconfig-1.13.0_2553-setup.run $ chmod x sysconfig-1.13.0_2553-setup.run $ ./sysconfig-1.13.0_2553-setup.run安裝完成后請記錄 SysConfig 的安裝路徑編譯階段需要將其絕對路徑顯式傳給 GNLinux 默認(rèn)位于$HOME/ti/sysconfig_1.13.0Windows 默認(rèn)位于C:\ti。3.2 運(yùn)行 bootstrap 腳本bootstrap 會拉取并準(zhǔn)備構(gòu)建所依賴的第三方組件與 Python 環(huán)境$ cd ~/connectedhomeip $ source ./scripts/bootstrap.sh倉庫中對應(yīng)的腳本位于 scripts/bootstrap.sh與之配套的還有 scripts/activate.sh 用于激活已就緒的構(gòu)建環(huán)境。四、編譯GN 生成 Ninja 構(gòu)建每次打開新的 shell 都需要先激活構(gòu)建環(huán)境然后依次執(zhí)行 GN 和 Ninja$ cd ~/connectedhomeip $ source ./scripts/activate.sh$ cd ~/connectedhomeip/examples/air-purifier-app/cc32xx $ gn gen out/debug --argsti_sysconfig_root\$HOME/ti/sysconfig_1.13.0\ $ ninja -C out/debug要點(diǎn)說明ti_sysconfig_root必須填寫絕對路徑即第 3.1 節(jié)記錄的安裝目錄。GN 構(gòu)建需要傳入的參數(shù)不止ti_sysconfig_root一個。工程自身的默認(rèn)參數(shù)集中在 examples/air-purifier-app/cc32xx/args.gni它導(dǎo)入了 examples/platform/cc32xx/args.gni配置 CHIP 各子系統(tǒng)的工程頭文件以及config/standalone/args.gni。該文件中的核心配置如下配置項默認(rèn)值含義ti_simplelink_boardCC3235SF_LAUNCHXL目標(biāo)板卡chip_config_network_layer_blefalse關(guān)閉 BLE 網(wǎng)絡(luò)層BLE 配網(wǎng)暫不支持chip_bypass_rendezvousfalse不繞過 rendezvous 流程chip_progress_logging/chip_detail_logging/chip_automation_loggingtrue開啟各級日志輸出chip_stack_lock_trackingnone關(guān)閉棧鎖追蹤適配當(dāng)前 FreeRTOS 配置未啟用INCLUDE_xSemaphoreGetMutexHoldermatter_device_vid0xFFF1Matter 設(shè)備 VIDmatter_device_pid0x8006Matter 設(shè)備 PIDmatter_software_ver/matter_software_ver_str0x0001/1.0d1軟件版本構(gòu)建產(chǎn)物為 ELF 格式的可執(zhí)行文件命名形如chip-CC3235SF_LAUNCHXL-air-purifier-example.out見 BUILD.gn。當(dāng)前不生成UniFlash 燒錄用的 bin 鏡像。若需以優(yōu)化尺寸編譯可在args.gni中取消is_debug false的注釋以啟用-Os見 args.gni。4.1 構(gòu)建系統(tǒng)結(jié)構(gòu)源碼視角BUILD.gn中的目標(biāo)組織清晰地反映了本示例的依賴關(guān)系ti_simplelink_sdk(sdk)SDK 層攜帶BUILD_RELEASE宏debug 構(gòu)建為 0release 為 1見 BUILD.gnti_sysconfig(sysconfig)由 chip.syscfg 生成驅(qū)動代碼source_set(air-purifier_app_sdk)聚合平臺側(cè)代碼包括 Logging.cpp、Wi-Fi 初始化cc32xxWifiInit.c以及 TI SimpleLink SDK 的lwip_if.c/utils_if.c/wifi_if.c網(wǎng)絡(luò)適配層BUILD.gnti_simplelink_executable(air-purifier_app)最終可執(zhí)行文件鏈接air-purifier-common的四個管理器air-purifier、air-quality-sensor、filter-delegates、thermostat與主目錄下的AppTask.cpp、CHIPDeviceManager.cpp、DeviceCallbacks.cpp、ZclCallbacks.cpp等并依賴cc32xx-attestation-credentials目標(biāo)BUILD.gn。編譯目標(biāo)assert(current_os freertos)表明該工程運(yùn)行在 FreeRTOS 之上BUILD.gn。五、添加自定義 DAC 證書Matter 設(shè)備入網(wǎng)與認(rèn)證依賴設(shè)備認(rèn)證證書DAC。要替換為自定義 DAC需要修改 examples/platform/cc32xx/CC32XXDeviceAttestationCreds.cpp 中以下四組數(shù)組DAC 私鑰gDacPrivKeyDAC 公鑰gDacPubKeyDAC 證書gDacCertPAI 證書gPaiCert。從源碼結(jié)構(gòu)看CC32XXDeviceAttestationCreds.cpp這些數(shù)組被組織成factoryData結(jié)構(gòu)體dac_priv_key/dac_pub_key/dac_cert/pai_cert四段{len, data}對并通過鏈接符號__attestation_credentials_base暴露給CC32XX::GetCC32XXDacProvider()。默認(rèn)情況下數(shù)組內(nèi)容對應(yīng) Matter 開發(fā) VID0xFFF1/ PID0x8006證書 DER 的 Subject/Issuer 字段中編碼了FFF1與8006見 CC32XXDeviceAttestationCreds.cpp。應(yīng)用側(cè)的選擇邏輯在 AppTask.cpp若定義了CC32XX_ATTESTATION_CREDENTIALS宏則注冊CC32XX::GetCC32XXDacProvider()來自examples/platform/cc32xx的認(rèn)證憑據(jù)提供者否則回退到 SDK 的示例 DAC 提供者Examples::GetExampleDACProvider()。該注冊發(fā)生在 Server 初始化之前以確保 Operational Credentials 在集群構(gòu)建時就能拿到正確的提供者。六、燒錄與調(diào)試Programming將構(gòu)建好的鏡像加載到 LaunchPad 上目前僅支持通過 Code Composer StudioCCS且 CCS 基于 ELF 中的調(diào)試信息進(jìn)行源碼定位因此若鏡像在另一臺機(jī)器上構(gòu)建或源碼目錄與 ELF 記錄的位置不一致CCS 會提示手動查找源碼當(dāng)前不生成 UniFlash 編程所需的 bin 鏡像。6.1 Code Composer Studio 燒錄步驟下載并安裝 Code Composer Studio倉庫 TI 平臺文檔目錄。打開 CCS創(chuàng)建一個新的 workspace。為目標(biāo) SoC 與調(diào)試器創(chuàng)建 target connection即 CCXML參照 CCS Users Guide 中 Manual Method 一節(jié)的操作。啟動一個 project-less無工程debug session參照 Manual Launch 一節(jié)。CCS 自動切換到 debug 視圖對應(yīng) After Launch 一節(jié)。此時 SoC core 通常處于斷開狀態(tài)、符號未加載先連接 coreDebug View 一節(jié)再點(diǎn)擊工具欄上的Load按鈕加載 ELF 鏡像。注意CCXML 的默認(rèn)配置使用 2-wire cJTAG而非完整的 4-wire JTAG這是為了匹配 LaunchPad 默認(rèn)的跳線配置無需改動。七、查看日志輸出Logging默認(rèn)情況下日志通過 Application/User UART 輸出。使用終端模擬器連接該串口參數(shù)如下參數(shù)值Speed (baud)115200Data bits8Stop bits1ParityNoneFlow controlNone日志鏈路的實(shí)現(xiàn)可追溯平臺日志函數(shù)cc32xxLog在 AppConfig.h 中聲明并被PLAT_LOG(...)宏引用其實(shí)現(xiàn)位于 src/platform/cc32xx/Logging.cpp在AppTask::Init()中通過cc32xxLogInit()完成初始化AppTask.cpp。UART 硬件在 chip.syscfg 中映射到 XDS110UARTDisplay 模塊使用 UART1 外設(shè)。啟動后串口會依次輸出應(yīng)用橫幅DisplayBanner()、內(nèi)存初始化、LED/按鍵初始化、Wi-Fi 初始化、CHIP 棧初始化、設(shè)備認(rèn)證配置、Server 初始化以及 Onboarding 二維碼信息PrintOnboardingCodes(...)使用kOnNetwork標(biāo)志見 AppTask.cpp。八、運(yùn)行示例配網(wǎng)Provisioning將 Matter 設(shè)備接入網(wǎng)絡(luò)的第一步是配網(wǎng)provisioning。本示例通過 TI 專有的 SimpleLink 配網(wǎng)方式AP 模式或 Smart Config完成配合 SimpleLink Starter Pro 手機(jī) App 使用按左鍵BTN-1觸發(fā)配網(wǎng)oneshot 模式即只進(jìn)行一次配網(wǎng)嘗試。設(shè)備通過 SimpleLink 配網(wǎng)AP 或 Smart Config接入本地 Wi-Fi。設(shè)備連上本地 AP 后即可使用 OnNetwork 方式觸發(fā) Matter commissioning配網(wǎng)/入網(wǎng)例如配合 chip-tool 等 Matter 控制器完成后續(xù)流程。配網(wǎng)參數(shù)集中在 wifi_settings.h宏默認(rèn)值說明WIFI_IF_DEBUG_LEVELE_INFOWi-Fi 內(nèi)部消息的最低日志級別可選E_TRACE/E_DEBUG/E_INFO/E_WARNING/E_ERROR/E_FATALPROVISIONING_MODEWifiProvMode_ONE_SHOT配網(wǎng)模式OFF/ON/ONE_SHOTPROVISIONING_CMDSL_WLAN_PROVISIONING_CMD_START_MODE_APSC配網(wǎng)命令A(yù)P、SCSmart Config、APSC、APSC_EXTERNAL_CONFIGURATION、EXTERNAL_CONFIGURATION 等PROVISIONING_TIMEOUT00 表示使用默認(rèn)超時PROVISIONING_AP_PASSWORD1234567890AP 配網(wǎng)密碼NULL表示開放網(wǎng)絡(luò)PROVISIONING_SC_KEY1234567890123456Smart Config 密鑰NULL表示默認(rèn)FORCE_PROVISIONING(0)強(qiáng)制清除已有 profile 重新配網(wǎng)僅開發(fā)測試用開啟時靜態(tài) profile 配置失效AP_SSID/AP_PASSWORDNULL靜態(tài)直連配置方式一硬編碼 SSID/密碼密碼NULL為開放網(wǎng)絡(luò)否則為 WPA2AP_CFG_FILENAME/AP_CFG_TOKEN/AP_CFG_MAX_SIZEnetwork.cfg/12345678/100靜態(tài)直連配置方式二從配置文件讀取文件內(nèi)容為ssid passwordSSID 與密碼之間用一個空格分隔不可含換行、多余空格或引號WIFI_LED_HANDLEgLedBlueHandleWi-Fi 狀態(tài) LED關(guān)閉定義即禁用自動指示8.1 關(guān)于藍(lán)牙 LE 配網(wǎng)BLE 配網(wǎng)當(dāng)前暫不支持chip_config_network_layer_ble false見 args.gni這也是PrintOnboardingCodes使用kOnNetwork標(biāo)志的原因。因此當(dāng)前版本只支持 OnNetwork commissioning 路徑。九、啟動流程小結(jié)源碼級結(jié)合 main.cpp 與 AppTask.cppCC32XX 示例的啟動鏈路如下main()中調(diào)用Board_init()、GPIO_init()并將 mbedtls 的內(nèi)存分配函數(shù)切換到 CHIP 平臺實(shí)現(xiàn)mbedtls_platform_set_calloc_free(CHIPPlatformMemoryCalloc, CHIPPlatformMemoryFree)見 main.cppGetAppTask().StartAppTask()創(chuàng)建應(yīng)用事件隊列與 FreeRTOS 應(yīng)用任務(wù)棧 4096 字、優(yōu)先級 4AppTask.cppvTaskStartScheduler()啟動 FreeRTOS 調(diào)度器main.cppAppTask::Init()依次完成日志、內(nèi)存、LED/按鍵、Wi-Fi、CHIP 棧、設(shè)備認(rèn)證提供者、Matter Server、端點(diǎn)父子關(guān)系與 AirPurifierManager 的初始化AppTask.cpp。十、延伸閱讀示例應(yīng)用的公共邏輯與集群定義examples/air-purifier-app/air-purifier-common含air-purifier-app.zap、air-purifier-app.matter平臺側(cè)認(rèn)證憑據(jù)examples/platform/cc32xx/CC32XXDeviceAttestationCreds.cpp平臺層 CC32XX 實(shí)現(xiàn)src/platform/cc32xx/Logging.cpp構(gòu)建環(huán)境腳本scripts/bootstrap.sh、scripts/activate.shTI 平臺構(gòu)建說明docs/platforms/ti/README.md注意示例默認(rèn)使用 Matter 開發(fā) VID0xFFF1/ PID0x8006與示例 DAC僅適用于開發(fā)驗證面向生產(chǎn)環(huán)境時請務(wù)必按第五節(jié)流程替換為經(jīng)過認(rèn)證的正式證書并核對args.gni中的 VID/PID 與軟件版本號與產(chǎn)品聲明一致?!久赓M(fèi)下載鏈接】connectedhomeipMatter (formerly Project CHIP) creates more connections between more objects, simplifying development for manufacturers and increasing compatibility for consumers, guided by the Connectivity Standards Alliance.項目地址: https://gitcode.com/GitHub_Trending/co/connectedhomeip創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考