184 lines
5.1 KiB
Markdown
184 lines
5.1 KiB
Markdown
|
|
# 客厅红外控制功能修复方案
|
||
|
|
|
||
|
|
## 🎯 问题分析
|
||
|
|
|
||
|
|
### 原始问题
|
||
|
|
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通信 + 原子操作
|
||
|
|
- 🔒 **线程安全**: 跨任务通信安全机制
|
||
|
|
- 🎯 **精确控制**: 温度、定时精确设置
|
||
|
|
- 🔧 **易于扩展**: 模块化设计,易于添加新设备
|
||
|
|
|
||
|
|
客厅红外控制功能现已完全修复并优化,提供了完整的空调和红外插座控制解决方案!
|