变量控制配置¶
问题描述¶
已定义变量(如LED、MEN、CHAUNG),但不清楚如何通过语音指令来控制这些变量的值,实现通过语音调节设备参数。
解决方案¶
1. 变量控制的作用¶
变量控制用于:
- 状态管理:记录设备的开关状态
- 参数调节:动态改变设备参数
- 逻辑控制:实现复杂的控制逻辑
- 数据传递:在不同命令间传递信息
2. 配置步骤详解¶
步骤1:定义变量
- 进入"变量定义"页面
-
添加新变量,设置:
- 变量名:符合C语言命名规则
- 类型:int、char、double等
- 默认值:初始状态值
- 备注:说明变量用途
示例变量:
- LED(int):开关灯状态,0=关,1=开
- MEN(int):开关门状态,0=关,1=开
- CHAUNG(int):开关窗状态,0=关,1=开
步骤2:关联命令词
在"命令词自定义"页面:
- 选择或新建命令词(如"开灯")
- 在控制详情中添加动作
- 选择控制方式为"变量设置"
步骤3:配置变量操作
在"添加控制"弹窗中设置:
- 变量:选择要控制的变量(如LED)
- 操作:选择操作类型
- 赋值:设置变量为固定值
- 加:变量值增加指定值
- 减:变量值减少指定值
- 乘:变量值乘以指定值
- 除:变量值除以指定值
- 方式:设置值的方式
- 固定值:输入具体数值
- 变量值:引用其他变量的值
- 表达式:使用数学表达式
3. 实际配置示例¶
示例1:开关灯控制
// 开灯命令
void turn_on_light() {
// 设置LED变量为1
set_variable("LED", 1);
// 同时控制GPIO
set_gpio(LIGHT_PIN, HIGH);
}
// 关灯命令
void turn_off_light() {
// 设置LED变量为0
set_variable("LED", 0);
// 同时控制GPIO
set_gpio(LIGHT_PIN, LOW);
}
示例2:数值调节
// 增加亮度
void increase_brightness() {
// 亮度变量加10
variable_add("brightness", 10);
// 限制最大值
if (get_variable("brightness") > 100) {
set_variable("brightness", 100);
}
}
// 设置具体亮度
void set_brightness(int level) {
// 直接赋值
set_variable("brightness", level);
}
示例3:复合控制
// 开门并开灯
void open_door_and_light() {
// 同时设置多个变量
set_variable("MEN", 1); // 开门
set_variable("LED", 1); // 开灯
set_variable("CHAUNG", 0); // 关窗
// 执行相应动作
play_tts("已开门并开灯");
}
4. 控制界面操作¶
添加变量控制动作:
- 在"控制详情"页面点击"添加控制"
- 选择"变量设置"类型
-
配置各选项:
- 选择已定义的变量
- 选择操作类型(赋值/加/减等)
- 设置操作值或表达式
常用操作类型说明:
| 操作类型 | 说明 | 示例 |
|---|---|---|
| 赋值 | 将变量设为指定值 | LED = 1 |
| 加 | 变量值增加 | count = count + 1 |
| 减 | 变量值减少 | brightness = brightness - 10 |
| 乘 | 变量值倍增 | speed = speed * 2 |
| 除 | 变量值缩小 | speed = speed / 2 |
5. 高级应用¶
条件判断结合变量:
// 智能开关控制
void smart_switch() {
// 检查多个变量状态
if (get_variable("MEN") == 1 && get_variable("LED") == 0) {
// 门开且灯未开时自动开灯
set_variable("LED", 1);
set_gpio(LIGHT_PIN, HIGH);
play_tts("检测到开门,已自动开灯");
}
}
变量作为参数:
// 通用控制函数
void control_device(String device, int state) {
if (device == "light") {
set_variable("LED", state);
} else if (device == "door") {
set_variable("MEN", state);
} else if (device == "window") {
set_variable("CHAUNG", state);
}
}
注意事项¶
- 变量命名规范:使用有意义的英文名或拼音
- 类型匹配:操作时注意变量的数据类型
- 范围检查:设置值前检查是否在有效范围内
- 状态同步:变量状态与实际硬件状态要保持一致
- 调试技巧:通过串口输出变量值,便于调试
常见问题¶
Q:为什么设置变量后设备没反应? A:检查是否同时添加了GPIO控制动作,变量仅记录状态。
Q:变量值能显示出来吗? A:可以通过串口输出或TTS播报变量值。
Q:如何查看当前变量值? A:在调试模式下通过串口监视,或添加查询命令。
6. 特殊应用:互锁开关实现¶
问题描述:
需要实现两个或多个开关的互锁功能,即打开其中一个开关时,自动关闭其他开关。
解决方案:
1. 使用变量实现互锁
定义状态变量记录当前开关状态:
- switch_state:记录当前激活的开关编号
- switch_1、switch_2、switch_3:各开关状态
2. 配置步骤
步骤1:定义变量
步骤2:配置开关命令 每个开关命令需要:
- 设置自身状态为1
- 检查其他开关状态
- 关闭其他激活的开关
- 更新switch_state
3. 实现逻辑示例
// 开关1命令
void switch_on_1() {
// 检查开关2是否激活
if (switch_2 == 1) {
// 关闭开关2
set_variable("switch_2", 0);
control_gpio(SWITCH_2_PIN, LOW);
play_tts("已关闭开关2");
}
// 打开开关1
set_variable("switch_1", 1);
set_variable("switch_state", 1);
control_gpio(SWITCH_1_PIN, HIGH);
play_tts("已打开开关1");
}
// 开关2命令
void switch_on_2() {
// 检查开关1是否激活
if (switch_1 == 1) {
// 关闭开关1
set_variable("switch_1", 0);
control_gpio(SWITCH_1_PIN, LOW);
play_tts("已关闭开关1");
}
// 打开开关2
set_variable("switch_2", 1);
set_variable("switch_state", 2);
control_gpio(SWITCH_2_PIN, HIGH);
play_tts("已打开开关2");
}
4. 平台配置方法
-
为每个开关命令添加多个控制动作:
- 变量赋值:设置当前开关状态为1
- 条件判断:检查其他开关状态
- 变量赋值:关闭其他开关状态
- GPIO控制:执行实际的开关动作
-
使用附加条件:
- 在关闭其他开关时添加条件
- 条件:其他开关状态为1时才执行
注意事项:
- 互锁逻辑需要预先定义所有相关变量
- 建议添加语音反馈,提示当前状态变化
- 可以扩展到多个开关的互锁
- 测试时验证所有开关组合

串口参数如何赋值给变量?¶
问题描述:
在串口触发场景下,需要判断接收到的串口参数(如v1, v2, v3)是否为期望值,并将这些参数用于后续逻辑处理。
解决方案:
1. 参数赋值给变量
在串口触发配置后,添加"参数赋给变量"操作:
-
进入控制详情
- 选择串口触发行为
- 点击"添加后续操作"
-
配置参数赋值
- 操作类型:选择"参数赋给变量"
- 选择参数:v1、v2或v3
- 目标变量:创建或选择已定义的变量
- 确认保存配置
2. 变量定义
在"变量定义"页面创建所需变量:
3. 条件判断配置
在后续控制逻辑中使用变量进行条件判断:
-
添加条件判断
- 触发方式:选择"值变化"
- 判断对象:选择已赋值的变量
- 设置判断条件:如等于、大于、小于
-
配置执行动作
- 满足条件时执行的动作
- 不满足条件时执行的动作
4. 完整配置流程
示例应用:
串口数据:AA 55 01 02 03 FF
参数解析:v1=0x01, v2=0x02, v3=0x03
变量赋值:serial_v1=1, serial_v2=2, serial_v3=3
条件判断:如果serial_v1==1且serial_v2==2
执行动作:GPIO_A2 = 高电平
注意事项:
- 每个串口参数需要单独赋值给对应的变量
- 变量类型要与参数类型匹配
- 条件判断要在参数赋值之后进行
- 可以参考平台提供的视频教程进行操作
相关教程:
- 平台提供变量控制配置视频教程
- 搜索关键词:串口参数赋值变量
串口参数如何赋值给变量?¶
问题描述:
在串口触发场景下,需要判断接收到的串口参数(如v1, v2, v3)是否为期望值,并将这些参数用于后续逻辑处理。
解决方案:
1. 参数赋值给变量
在串口触发配置后,添加"参数赋给变量"操作:
-
进入控制详情
- 选择串口触发行为
- 点击"添加后续操作"
-
配置参数赋值
- 操作类型:选择"参数赋给变量"
- 选择参数:v1、v2或v3
- 目标变量:创建或选择已定义的变量
- 确认保存配置
2. 变量定义
在"变量定义"页面创建所需变量:
3. 条件判断配置
在后续控制逻辑中使用变量进行条件判断:
-
添加条件判断
- 触发方式:选择"值变化"
- 判断对象:选择已赋值的变量
- 设置判断条件:如等于、大于、小于
-
配置执行动作
- 满足条件时执行的动作
- 不满足条件时执行的动作
4. 完整配置流程
示例应用:
串口数据:AA 55 01 02 03 FF
参数解析:v1=0x01, v2=0x02, v3=0x03
变量赋值:serial_v1=1, serial_v2=2, serial_v3=3
条件判断:如果serial_v1==1且serial_v2==2
执行动作:GPIO_A2 = 高电平
注意事项:
- 每个串口参数需要单独赋值给对应的变量
- 变量类型要与参数类型匹配
- 条件判断要在参数赋值之后进行
- 可以参考平台提供的视频教程进行操作
相关教程:
- 平台提供变量控制配置视频教程
- 搜索关键词:串口参数赋值变量

小程序连接后如何自动上报数据?¶
问题描述:
希望在小程序连接上后,模块能够自动发送一次指定的端口状态和数据,以确保小程序断开重连后仍能显示正确的状态和数据。
解决方案:
1. 触发方式说明
当前平台的触发机制:
- WiFi连接上网络:可作为触发条件
- 小程序连接:暂不支持作为直接触发条件
- 事件触发:基于特定事件执行动作
2. 替代实现方案
由于小程序连接不能直接触发,可采用以下方法:
方法一:使用定时上报
-
配置定时器
- 设置触发方式为"定时器"
- 配合适的时间间隔(如5-10秒)
- 定时执行状态上报动作
-
上报数据内容
- 端口状态(GPIO输入/输出状态)
- 变量当前值
- 传感器数据等
方法二:变量变化触发
-
配置值变化触发
- 选择关键状态变量
- 设置触发条件为"值变化"
- 变量变化时自动上报
-
适用场景
- 设备状态改变时
- 参数调整后
- 外部事件触发后
3. 实施步骤
-
创建上报变量
- 在变量定义中创建状态变量
- 设置初始值
- 确保变量名清晰易懂
-
配置触发动作
- 选择合适的触发方式
- 添加"变量设置"或"串口输出"动作
- 配置要上报的数据
-
小程序端显示
- 确保小程序控件绑定对应变量
- 验证数据是否能正常显示
- 测试断线重连场景
注意事项:
- 小程序连接事件目前平台不支持,需要使用其他触发方式
- 定时上报会占用一定的网络资源,需合理设置时间间隔
- 建议结合实际业务需求选择合适的触发机制
- 测试时注意观察数据上报的实时性和准确性