主题中讨论的其他器件:SysConfig、 CC2674R10、LAUNCHCC3235MOD
我正在尝试创建一个接受输入、然后通知用户的器件。 例如、借助锁应用程序、它可以在锁打开和关闭时通知我的手机。
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
尊敬的 Corey:
在本地更改时、您能否确认 Google Home 应用程序是否收到 LOCK-APP 状态的更新(通过 LaunchPad 按钮)? 根据我过去的经验、Lighting-app、lock-app 和 pump-app 都将根据需要与其订户(已测试 Google 或 Apple 生态系统)报告状态更新、因为这些 Matter 控制器在默认情况下建立订阅。 Matter 设备不与手机保持蓝牙连接(BLE 仅用于配置/调试)、因此 Matter 控制器(Google Nest/Apple TV)和手机应用程序(Google Home/Apple Home)有责任相应地通知用户。
此致、
瑞安
我可以更改 cc 器件的状态、但在器件锁定时未通知我。 我的最后一个游戏是能够检测引脚何时变为高电平的器件。 该引脚变为高电平时、它会向用户发送通知。 接下来、我还需要进行调整、以便用户可以将其设置为打开灯光或发出下一个声音。 我启动了锁定应用。 我把它设置成当它通过电话、cc 或巢锁闭时,它打开一个灯并播放一首歌曲。 但是,它没有通知我。 我还在尝试找出引脚的位置。 我以前在 CCS 上对它们进行了编程、但文件却不在同一个地方。
对于 Linux 和修改 Matter SysConfig 文件、我发现理想的解决方案是 使用独立工具 并在进行少量编辑后打开 chip.syscfg (也在 迁移指南中进行了介绍):
// @cliArgs --product <your_SDK_path_here>/.metadata/product.json --board /ti/boards/LAUNCHXL_CC2652R7 --rtos freertos
此致、
瑞安
链路应该有效。 您是否已登录 GitHub? 您如何启动 SysConfig 独立工具?遇到了哪些错误(如果有)? Configure Matter Device Application SLA 的 SysConfig File 部分提供了类似的说明。
此致、
瑞安
失败:chip-lp_CC2652R7-lock-example.out chip-lp_CC2652R7-lock-example.out.map
arm-none-eabi-g++-L..cc13x2x7_utils_build_linker.cmd.genlibs /../third_party/connectedhomeip/third_party/ti_simplelink_sdk/repo_cc13xx_cc26xx/source -T.r.packs /../third_party/connectedhomeip -platform/cc13xxrclip -26xx/cc13x2/cc13x2x7_mfrtos_ota.dsp 示例-armv7e-msp-cwl-float- c-tex-free-tex=from-fmsp-free-floature-f-specs-floatis - cwlp-ex-floatis -示例@ src
/home/corey/connectedhomeip/.environment/cipd/packages/arm/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/bin/ld:./Cchip-LP_CC2652R7-lock-example.out 部分`rodata'将不能装入区域` FLASH'
/home/corey/connectedhomeip/.environment/cipd/packages/arm/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/bin/ld:段.NVS VMA [000aa000,000adfff]与段.rodata VMA [00094,190,000b0bb6]重叠
/home/corey/connectedhomeip/.environment/cipd/packages/arm/bin/../lib/gcc/arm-none-eabi/12.2.1/../../../../arm-none-eabi/bin/ld:区域`闪存'溢出0字节
collect2:错误:LD 返回1个退出状态
TI_DRIVERS_CONFIG.c 由 SysConfig 生成、不应手动编辑。 通常、这些文件的注释中会有尽可能多的警告。
/* * ======== ti_drivers_config.c ======== * Configured TI-Drivers module definitions * * DO NOT EDIT - This file is generated for the LP_EM_CC2340R5 * by the SysConfig tool. */
这也可能导致您观察到的闪存错误。 因此、我建议您针对所需的引脚更改直接修改 chip.syscfg 文件。 您可以遵循我之前引用的 SLA、以及您能够在 CCS 内或使用 Windows 独立工具打开的 SysConfig 文件示例。 下面是一些更改的伪代码:
const GPIO = scripting.addModule("/ti/drivers/GPIO", {}, false); const GPIO11 = GPIO.addInstance(); GPIO11.$name = "CONFIG_GPIO_1"; GPIO11.gpioPin.$suggestSolution = "boosterpack.29";
当然、应使用所需的 GPIO 标识通过 SysConfig 工具验证这一点。
此致、
瑞安
您将无法在 CCS 中打开 SysConfig 文件。 在下载和安装之后、应确保 sysconfig_gui.sh 是可执行的、
cd ~ wget dr-download.ti.com/.../sysconfig-1.15.0_2826-setup.run chmod +x sysconfig-1.15.0_2826-setup.run ./sysconfig-1.15.0_2826-setup.run cd ~/ti/sysconfig_1.15.0 chmod +x sysconfig_gui.sh ./sysconfig_gui.sh
此致、
瑞安
我很抱歉不断打扰您、我是这款设备和这种语言的新手。 所以、我在学习。 你一直是一个巨大的帮助。 因此、再次感谢大家。 下一个问题是、我没有闪存。 我不知道是因为应用占用了太多的空间、还是因为我添加了代码。 我的最终目标是从器件获取输入、触发事件或通知、然后具有一个用作 OUT 的引脚、从而能够控制继电器。 但是、我的第一步是尝试具有输入。 我试图复制他们所写的按钮减去长按。 但它无法正常工作。 我说我在闪存中有0个字节。 但是、我只是不知道它是我添加的代码还是空间不够。 再次,我很抱歉一再向你提出问题。 但是,这是非常感谢。
虽然误差本身没有意义、但我认为以下行(来自您之前的日志)更重要:
.nvs VMA [000aa000,000adfff] overlaps section .rodata VMA [00094190,000b0bb6]
这意味着只读数据扩展到0xb0bb6、并且由于 NVS 在0xaa000处启动、因此会产生0x6BB6的重叠、这非常重要。 您能确认默认项目构建没有错误吗? 到目前为止、您尝试实施的 SysConfig 和应用程序文件有哪些确切更改? 请尝试进行增量更改、以查找导致错误的原因。 另请注意、如果您计划为应用添加大量的功能、则应考虑使用 CC2674R10、因为此器件具有更多的闪存、并且 Matter 项目在 CC2652R7器件上已经受到很大限制。
此致、
瑞安
这是 AppEvent.h、另一个是 AppTask.cpp。
/* * * Copyright (c) 2018 Nest Labs, Inc. * All rights reserved. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * www.apache.org/.../LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef APP_EVENT_H #define APP_EVENT_H struct AppEvent; typedef void (*EventHandler)(AppEvent *); struct AppEvent { enum AppEventType { kEventType_None = 0, kEventType_ButtonLeft, kEventType_ButtonRight, kEventType_AppEvent, kEventType_Pin23, }; enum AppEventButtonType { kAppEventButtonType_None = 0, kAppEventButtonType_Clicked, kAppEventButtonType_LongClicked, }; enum AppEventPinType { kAppEventPinType_None = 0, kAppEventPinType_Active, }; enum AppEventType Type; union { struct { enum AppEventButtonType Type; } ButtonEvent; struct { enum AppEventPinType Type; } PinEvent; struct { void * Context; } BoltLockEvent; }; EventHandler Handler; }; #endif // APP_EVENT_H
您正在使用何种连接方式? 我注意到一些 AppTask.cpp 代码与 主线不同、肯定会发生比仅添加 GPIO 更多的更改。 您也未提供 SysConfig 更改。 请确保 在重新编译之前完全删除以前的输出文件夹(rm -rf 编译)。 您还应该参考 有关 GPIO TI 驱动程序用法的 gpiointerrupt 示例。 PIN_23_OPEN API 没有上下文。
此致、
瑞安
尊敬的 Corey:
感谢更新、很高兴您找到了它!
您是否愿意分享您使用的 args.GNI 的变化? 这可以帮助其他 E2E 用户解决类似问题。
by branch of connectedhomeip 您到底指的是什么? 我在 examples/lock-app/cc13x2x7_26x2x7
您可以通过导航到相应的存储库("cd matery")、然后运行"git log"、找出命令行中的提交 ID。
它会向您显示之前对代码库所做的更改、并且每个提交都有一个唯一的 ID (散列)。 这可以帮助我们确定您正在使用的代码库的版本、还可以向您推荐使用哪个版本。
谢谢。
托比
在我编辑它起作用的代码之前、我必须将该行更改为"true"。 之后、我从头开始、将我的2个文件和 SysConfig 文件放入新程序中、并且一直有效、直到我将该语句更改为 true。 但幸运的是、我仍然拥有 QR 代码。 但我不需要它。 我正在尝试创建一个从传感器获取输入并告诉 google home 的引脚。 例如有人打开一扇门时。 但是、首先我要尝试让引脚锁定"lock-app"。 但是、到目前为止、它还没有发挥作用。 它仍会编译、但引脚不执行任何操作。
听起来您可以成功编译/编译、但运行时行为无法按预期工作。
根据我的理解、您期望的行为是、当用户执行"锁定"(通过按下 Launchpad 上的按钮)时、锁的状态也会在 Google 主页端更新。
您还尝试更新 syscfg 文件以使用不同的引脚实现不同的功能。
总之、您有两件事:
我建议首先确保1)工作:
该功能应该是可行的、并且在默认情况下启用。
您能否参阅此 SLA: https://dev.ti.com/tirex/explore/node?node=A__AciOYyNq9gli.nsvJzBtQg__com.ti.SIMPLELINK_ACADEMY_CC13XX_CC26XX_SDK__AfkT0vQ__LATEST
具体来说、请参阅"任务3–加入 Matter Controller "一节、其中指示您在 Google 端创建 Matter Integration。
这是我目前拥有的文件。 我尝试使用他们的 GPIO 中断示例、以及如何对板进行编程、以接收一个输入并点亮 LED。 我不知道是否需要将 GPIO 引脚插入按钮之类的活动中。 但是,这是我第一次用这种语言编程。 我知道 Java、HTML、CSS、PHP、JavaScript 和 flutter/Dart。 但是、就像我说的那样、我能够让引脚更改引脚、而无需其他所有重要的东西。 我只是不知道从这里到哪里。
我看了看你的代码。
从我看到的情况来看、您正在尝试使用 CONFIG_GPIO_23上升沿来直接执行 LOCK_ACTION。
不建议这样做。
由于示例的体系结构*(AppTask 和 LockManager),我推荐以下方法。
(*有些函数设计为在中断中执行、有些则在任务中执行)。
遵循 如何处理按钮回调的流程。
例如、 CONFIG_BTN_RIGHT 边沿将触发回调 ButtonRightEventHandler。
在 ButtonRightEventHandler 中,它布置事件(xQueueSendFromISR),然后应用程序任务将在 AppTaskMain--> xQueueReceive--> DispatchEvent 中处理它。
所以、如果你想要触发一个锁定操作、那么你应该布置到队列(xQueueSendFromISR)。
进行完整性检查的最简单方法是:
void gpioInputFxn1(uint_least8_t index) { ButtonRightEventHandler((Button_Handle)0, Button_EV_CLICKED); }
理论上、此代码应与您单击 BTN_right (要锁定)的流程相同。
谢谢 Corey。 不建议从另一个 GPIO 回调上下文调用按钮回调、因此您可以改为将 ButtonRightEventHandler 的内容复制/粘贴到 gpioInputFxn1中、以实现相同的目的:
void gpioInputFxn1(uint_least8_t index) { // ButtonRightEventHandler((Button_Handle)0, Button_EV_CLICKED); AppEvent event; event.Type = AppEvent::kEventType_ButtonRight; event.ButtonEvent.Type = AppEvent::kAppEventButtonType_Clicked; // button callbacks are in ISR context if (xQueueSendFromISR(sAppEventQueue, &event, NULL) != pdPASS) { /* Failed to post the message */ } }
我已确认此更改构建成功。
此致、
瑞安
您应该使用 GPIO_CFG_IN_PD 将 CONFIG_GPIO_23建立为具有内部下拉功能的输入引脚。
GPIO_setConfig(CONFIG_GPIO_23, GPIO_CFG_IN_INT_RISING | GPIO_CFG_IN_PD);
使用 GPIO_CFG_PULL_DOWN_INTERNAL 可能会导致该引脚不能建立为输入。 否则、您可能需要进一步调试应用以确定正在发生的情况。 您可以 启动手动 CCS 调试会话 并添加打印日志(PLAT_log)、以确定应用程序内部发生的情况。
此致、
瑞安