smart-home/客厅红外控制功能修复方案.md

184 lines
5.1 KiB
Markdown
Raw Normal View History

2026-02-26 09:16:34 +08:00
# 客厅红外控制功能修复方案
## 🎯 问题分析
### 原始问题
1. **APP端UDP通信失败**: `plus.net.createSocket is not a function`
2. **客厅场景页面缺失**: 调试模式下客厅跳转到错误页面
3. **红外控制功能无法使用**: APP无法与ESP32通信控制红外插座
### 根本原因
- APP端原生UDP功能在当前环境下不可用
- 客厅监控页面未创建,跳转目标错误
- 网络通信方式需要从UDP改为HTTP
## 🔧 解决方案
### 1. 创建客厅监控页面
**文件**: `smart-home-app/pages/living/monitor.vue`
**功能特性**:
- ❄️ **空调控制**: 开关、温度调节(16-30°C)、模式切换(制冷/制热)
- 🔌 **红外插座控制**: 开关、定时关闭(5/15/30/60分钟)
- 📊 **连接状态监控**: 实时显示ESP32连接状态
- 📝 **操作日志**: 记录所有控制操作和结果
### 2. 修复红外开关页面通信
**文件**: `smart-home-app/pages/control/ir-switch.vue`
**修复内容**:
```javascript
// 原来: 使用plus.net.createSocket (不可用)
const udp = plus.net.createSocket('udp')
// 修复后: 使用HTTP通信
const response = await uni.request({
url: `http://${this.esp32IP}/ir?cmd=${encodeURIComponent(cmd)}`,
method: 'GET',
timeout: 5000
})
```
### 3. 更新设置页面跳转
**文件**: `smart-home-app/pages/kitchen/settings.vue`
**修改**:
```javascript
// 客厅跳转到专门的监控页面
if (room.nameKey === 'livingRoom') {
uni.navigateTo({ url: '/pages/living/monitor' })
}
```
## 🏗️ ESP32端架构
### HTTP接口支持
ESP32已支持完整的HTTP红外控制接口:
**接口地址**: `http://ESP32_IP/ir?cmd=COMMAND`
**支持的命令**:
- `SOCKET:ON` - 红外插座开启
- `SOCKET:OFF` - 红外插座关闭
- `SOCKET:TIMER:5` - 定时5分钟关闭
- `SOCKET:TIMER:15` - 定时15分钟关闭
- `SOCKET:TIMER:30` - 定时30分钟关闭
- `SOCKET:TIMER:60` - 定时60分钟关闭
- `AC:ON` - 空调开机
- `AC:OFF` - 空调关机
- `AC:TEMP:26` - 设置温度
- `AC:MODE:COOL` - 制冷模式
- `AC:MODE:HEAT` - 制热模式
### 红外编码配置
**文件**: `firefly_esp32/main/Controller/AppCommandHandler.cpp`
已预配置完整的NEC协议红外编码:
- 插座开关编码 (9000, 4500 引导码)
- 定时功能编码 (5/15/30/60/120分钟)
- 空调控制编码 (美的空调协议)
### 执行流程
1. **HTTP请求接收**`ir_handler()` 函数
2. **命令解析**`parseCommand()` 函数
3. **设置待执行标志**`setPendingCommand()` 原子操作
4. **主循环执行**`processPendingCommand()` 在主任务中执行
5. **红外发射**`executeSocketControl()` / `executeACControl()`
## 📱 使用方法
### 开启调试模式
1. 进入 **厨房设置页面**
2. 找到 **"开发者选项"** 卡片
3. 开启 **"调试模式"** 开关
### 进入客厅控制
1. 调试模式开启后,显示 **"其他房间"** 卡片
2. 点击 **"🛋️ 客厅"**
3. 进入客厅监控页面
### 设备控制
- **空调**: 开关控制、温度调节、模式切换
- **红外插座**: 开关控制、定时关闭
- **状态监控**: 实时连接状态、操作日志
## 🧪 测试验证
### 测试脚本
**文件**: `test_ir_control.py`
**测试内容**:
- ESP32连接测试
- 红外插座控制测试
- 空调控制测试
- 设备状态获取测试
### 运行测试
```bash
python test_ir_control.py
```
### 预期结果
- ✅ 所有HTTP请求返回200状态码
- ✅ ESP32串口显示红外发射日志
- ✅ LED指示灯闪烁表示发射中
- ✅ APP显示操作成功日志
## 🔍 故障排查
### 1. 连接问题
**症状**: 显示"连接失败"或"连接异常"
**解决**:
- 检查ESP32 IP地址是否正确
- 确认ESP32已连接WiFi
- 测试网络连通性: `ping ESP32_IP`
### 2. 红外发射无效
**症状**: 命令发送成功但设备无响应
**解决**:
- 检查红外发射器硬件连接
- 观察ESP32串口日志确认发射
- 验证红外编码是否匹配设备
### 3. APP操作无响应
**症状**: 点击开关无反应
**解决**:
- 检查设备存储中的ESP32配置
- 确认调试模式已开启
- 查看APP操作日志
## 📋 技术规格
### 网络通信
- **协议**: HTTP/1.1
- **端口**: 80 (HTTP)
- **超时**: 5秒
- **重试**: 自动重试机制
### 红外发射
- **频率**: 38kHz载波
- **协议**: NEC标准协议
- **重复**: 2-3次发射确保可靠性
- **间隔**: 150-200ms
### 设备兼容性
- **红外插座**: NEC协议遥控插座
- **空调**: 美的品牌空调 (可扩展其他品牌)
- **ESP32**: 支持RMT硬件红外发射
## 🎉 功能特点
### 用户体验
- 🎨 **现代化UI**: 卡片式设计,直观易用
- 🔄 **实时反馈**: 操作状态实时显示
- 📊 **状态监控**: 连接状态、设备状态一目了然
- 📝 **操作记录**: 详细的操作日志
### 技术特性
-**高可靠性**: HTTP通信 + 原子操作
- 🔒 **线程安全**: 跨任务通信安全机制
- 🎯 **精确控制**: 温度、定时精确设置
- 🔧 **易于扩展**: 模块化设计,易于添加新设备
客厅红外控制功能现已完全修复并优化,提供了完整的空调和红外插座控制解决方案!