# BLE NUS 日志实现方案

## 方案总结

✅ **BLE NUS 作为日志输出是完全可行的**，而且是一个很好的选择！

## 推荐方案：BLE NUS + 日志缓冲

### 架构

```
Zephyr 日志系统
├─> RTT 后端（开发时，开发板连接）
├─> UART 后端（开发时，串口连接）
└─> BLE NUS 后端（现场调试）⭐
    ├─> 实时输出（BLE 连接时）
    └─> 日志缓冲（RAM 环形缓冲区，连接后可读取历史）
```

### 优点

1. **实时查看**：通过手机 App（nRF Connect）实时查看日志
2. **无需硬件**：不需要连接开发板
3. **历史日志**：缓冲最近 N 条日志，连接后可读取
4. **双向通信**：可以发送命令控制日志级别
5. **标准服务**：Nordic 官方支持，稳定可靠

### 注意事项

1. **需要 BLE 连接**：只有连接后才能看到日志
2. **性能影响**：日志量大时可能影响 BLE 性能（建议使用日志级别控制）
3. **功耗**：BLE 传输会增加功耗（可以按需启用/禁用）

## 实现状态

### ✅ 已完成

1. **基础框架**：
   - `ble_nus_log.h` / `ble_nus_log.c` - BLE NUS 日志后端框架
   - 日志缓冲结构（环形缓冲区）
   - BLE 连接状态检测

2. **配置**：
   - 在 `prj.conf` 中启用了 `CONFIG_BT_NUS=y`
   - 添加了日志后端配置

### ⏳ 待完成

1. **BLE NUS 服务初始化**：
   - 需要等 BLE 模块迁移后实现
   - 需要调用 `bt_nus_init()` 和 `bt_nus_send()`

2. **日志发送**：
   - 实现 `bt_nus_send()` 调用
   - 处理 BLE 未连接的情况

3. **日志缓冲读取**：
   - 实现通过 BLE NUS 读取历史日志的功能
   - 可以发送命令（如 "dump_logs"）来获取缓冲的日志

## 使用方式

### 开发阶段

1. **使用 RTT**：开发板连接时，使用 RTT Viewer
2. **使用 BLE NUS**：实际测试时，使用手机 App

### 现场调试

1. **连接设备**：使用手机 App（nRF Connect）连接到设备
2. **查看日志**：在 NUS 服务中实时查看日志
3. **读取历史**：发送命令读取缓冲的历史日志

## 手机 App 推荐

1. **nRF Connect**（Nordic 官方，免费）
   - 支持 NUS 服务
   - 可以查看实时日志
   - 可以发送命令

2. **自定义 App**（可选）
   - 可以添加日志过滤
   - 可以保存日志到文件
   - 可以发送命令控制设备

## 下一步

1. **等待 BLE 模块迁移**：实现 BLE NUS 服务初始化
2. **完善日志发送**：实现 `bt_nus_send()` 调用
3. **添加命令支持**：实现日志控制命令（清除、设置级别等）

## 与其他方案对比

| 方案 | 实时性 | 历史日志 | 复杂度 | 推荐度 |
|------|--------|----------|--------|--------|
| **BLE NUS** | ✅ 实时 | ✅ 缓冲 | 中 | ⭐⭐⭐⭐⭐ |
| RTT | ✅ 实时 | ❌ 无 | 低 | ⭐⭐⭐（仅开发） |
| UART | ✅ 实时 | ❌ 无 | 低 | ⭐⭐（需要硬件） |
| Flash 存储 | ❌ 需读取 | ✅ 完整 | 高 | ⭐⭐⭐（关键错误） |

## 结论

**BLE NUS 是您场景下的最佳选择**：
- ✅ 适合现场调试（无需硬件连接）
- ✅ 可以实时查看日志
- ✅ 可以缓冲历史日志
- ✅ 标准服务，稳定可靠

