This commit is contained in:
2025-12-09 16:33:44 +08:00
parent 345af5e2a3
commit 1d42f5ea50
49 changed files with 12015 additions and 1 deletions

321
DEVICE_BINDING_GUIDE.md Executable file
View File

@@ -0,0 +1,321 @@
# ESP32设备绑定功能使用指南
## 📋 功能概述
ESP32音乐播放器现在支持绑定到用户账号实现个性化功能
- ✅ 设备与用户账号绑定
- ✅ 安全的Token认证机制
- ✅ 通过语音命令完成绑定
- ✅ 为后续歌单功能奠定基础
---
## 🚀 快速开始
### **第1步启动服务器**
```powershell
cd d:\esp32-music-server\Meow\MeowEmbeddedMusicServer
go run .
```
服务器将在 `http://localhost:2233` 启动
---
### **第2步用户登录**
访问:`http://localhost:2233`
使用测试账号登录:
- 用户名:`test`
- 密码:`123456`
---
### **第3步生成绑定码**
**方式1使用命令行工具临时**
```powershell
# 向服务器请求生成绑定码
curl -X POST http://localhost:2233/api/device/generate-code `
-H "Content-Type: application/json" `
-H "Cookie: session_token=YOUR_SESSION_TOKEN"
```
**方式2使用浏览器控制台推荐**
1. 登录后按 `F12` 打开开发者工具
2. 切换到 **Console** 标签
3. 输入以下代码:
```javascript
fetch('/api/device/generate-code', {
method: 'POST',
headers: {'Content-Type': 'application/json'}
})
.then(r => r.json())
.then(data => {
console.log('绑定码:', data.code);
alert('绑定码:' + data.code + '\n有效期5分钟');
});
```
4. 记下显示的6位数字绑定码例如`123456`
---
### **第4步ESP32端绑定**
对ESP32说
```
"小智绑定设备绑定码123456"
```
或者:
```
"小智bind device, binding code is 123456"
```
ESP32会回复
```
✅ 设备绑定成功!
已绑定到用户: test
```
---
### **第5步验证绑定状态**
对ESP32说
```
"小智,查询设备状态"
```
ESP32会显示
```
📱 设备信息:
MAC地址: AA:BB:CC:DD:EE:FF
绑定状态: ✅ 已绑定
绑定用户: test
服务器验证: ✅ 通过
```
---
## 🔧 高级功能
### **解绑设备**
对ESP32说
```
"小智,解绑设备"
```
### **自定义设备名称**
对ESP32说
```
"小智绑定设备绑定码123456设备名称客厅音响"
```
---
## 📊 数据存储
### **服务器端**
设备信息存储在:`d:\esp32-music-server\Meow\MeowEmbeddedMusicServer\devices.json`
```json
{
"devices": {
"AA:BB:CC:DD:EE:FF": {
"mac": "AA:BB:CC:DD:EE:FF",
"username": "test",
"device_name": "ESP32音乐播放器",
"token": "a1b2c3d4e5f6...",
"bind_time": "2025-11-24T16:00:00Z",
"last_seen": "2025-11-24T16:30:00Z",
"is_active": true
}
}
}
```
### **ESP32端**
Token存储在NVS非易失性存储
- 命名空间:`device`
- Key: `token` - 设备Token
- Key: `username` - 绑定的用户名
---
## 🔌 API文档
### **1. 生成绑定码**
```
POST /api/device/generate-code
Authorization: 需要登录
```
**响应:**
```json
{
"success": true,
"code": "123456",
"expires_in": 300
}
```
---
### **2. ESP32绑定设备**
```
POST /api/esp32/bind
Content-Type: application/json
```
**请求体:**
```json
{
"mac": "AA:BB:CC:DD:EE:FF",
"binding_code": "123456",
"device_name": "ESP32音乐播放器"
}
```
**响应:**
```json
{
"success": true,
"message": "设备绑定成功",
"token": "a1b2c3d4e5f6...",
"username": "test"
}
```
---
### **3. 验证设备Token**
```
GET /api/esp32/verify
X-Device-Token: a1b2c3d4e5f6...
```
**响应:**
```json
{
"success": true,
"device": {
"mac": "AA:BB:CC:DD:EE:FF",
"username": "test",
"device_name": "ESP32音乐播放器",
"bind_time": "2025-11-24T16:00:00Z",
"last_seen": "2025-11-24T16:30:00Z"
}
}
```
---
## 🧪 测试流程
### **完整测试步骤**
1. **启动服务器**
```powershell
go run .
```
2. **生成绑定码**(使用浏览器控制台)
3. **ESP32绑定**
- 对ESP32说"小智绑定设备绑定码123456"
- 观察ESP32日志
```
[DeviceManager] Starting device binding with code: 123456
[DeviceManager] Sending bind request to: http://...
[DeviceManager] Bind request status code: 200
[DeviceManager] Device successfully bound to user: test
```
4. **查询状态**
- 对ESP32说"小智,查询设备状态"
5. **验证服务器数据**
- 检查 `devices.json` 文件是否包含设备信息
6. **测试解绑**
- 对ESP32说"小智,解绑设备"
- 再次查询状态,应显示未绑定
---
## 🐛 故障排除
### **问题1绑定码无效**
**现象**ESP32提示"绑定失败"
**解决方案**
- 检查绑定码是否输入正确
- 绑定码有效期为5分钟请重新生成
- 确认网络连接正常
---
### **问题2设备已绑定**
**现象**:提示"设备已绑定到用户XXX"
**解决方案**
- 先解绑设备对ESP32说"小智,解绑设备"
- 或者在服务器端删除 `devices.json` 中的设备记录
---
### **问题3网络连接失败**
**现象**ESP32无法连接到服务器
**解决方案**
- 检查ESP32是否连接到WiFi
- 确认服务器地址是否正确:`http://http-embedded-music.miao-lab.top:2233`
- 检查防火墙设置
---
## 📝 下一步
绑定功能完成后,可以继续开发:
**阶段1基础绑定** - 已完成
**阶段2歌单系统** - 待开发
**阶段3Web管理界面** - 待开发
---
## 💡 提示
- 绑定码每次生成后只能使用一次
- 一个设备只能绑定到一个用户
- Token存储在ESP32的NVS中断电不丢失
- 可以通过解绑并重新绑定来更换用户
---
**🎉 享受您的个性化ESP32音乐播放器**