ASRPRO离线语音模块与ESP01S接线和配置说明

# ASR_ESP01S_BROADCAST 接线说明(ESP01S 双路 IO + ASRPRO 语音)

本固件设备类型为 `ASR_ESP01S_BROADCAST`,配网 SSID 前缀 `ASR01S`。  
设备支持两部分能力:
- ESP01S 双路 IO(GPIO0/GPIO2)本地控制
- ASRPRO 串口语音命令上报(`EASY_IOT:xxxxx`)

---

## 1. ESP01S 双路输出引脚

| ESP01S 引脚 | 逻辑通道 | 说明 |
|---|---|---|
| GPIO0 | 通道 0 | 继电器/开关控制输出 |
| GPIO2 | 通道 1 | 继电器/开关控制输出 |

---

## 2. ASRPRO 与 ESP01S 串口连接

### 2.1 运行接线(语音控制时)

| ASRPRO | ESP01S | 说明 |
|---|---|---|
| `PB5(TX)` | `GPIO3(RX)` | ASRPRO 发语音命令给 ESP01S |
| `GND` | `GND` | 必须共地 |

- 串口波特率:`9600`(与固件一致)
- 当前链路仅需要 ASRPRO -> ESP01S 单向发送,ESP 不回传到 ASR

### 2.2 ASRPRO 烧录(CH341)常用接法

- `PB6 -> CH341 TX`
- `PB5 -> CH341 RX`

---

## 3. 喇叭/功放控制(已同步当前代码)

`STUDY_SELF_ESP01S.hd` 当前配置如下:
- `SPEAKER_PWR_CTRL_ENABLED = 1`
- `SPEAKER_PWR_PIN = 2`
- `SPEAKER_PWR_ACTIVE_LOW = 1`(低电平有效)
- `SPEAKER_IDLE_OFF_MS = 15000`
- `SPEAKER_BOOT_KEEP_MS = 15000`
- `SPEAKER_INTERACTION_KEEP_MS = 120000`(学习交互态长保活)

语音识别成功进入 `ASR_CODE()` 后,会调用 `speaker_power_keepalive()` 打开功放并延长保活;超时后自动关闭,降低待机功耗。  
另外上电欢迎语阶段会临时保活更久,避免播报中被提前关断。

> 说明:`SPEAKER_PWR_PIN` 是 ASRPRO SDK 的 IO 编号,不是 ESP8266 的 GPIO 编号。

### 3.1 接线建议

- ASRPRO 的 `IO#2` -> 功放板 `EN/SHDN`(或外接 MOS 管的控制端)
- 功放板与 ASRPRO 必须共地
- 若你使用的是低电平使能功放,把 `SPEAKER_PWR_ACTIVE_LOW` 改为 `1`

### 3.2 重要变更

“持续翻转功放控制脚(便于找线/找脚位)”调试代码已移除,避免覆盖正常逻辑。  
现在仅保留“有语音才开功放,空闲自动关断”的正式行为。

---

## 4. 串口语音上报规则

ASRPRO 语音事件会输出 `EASY_IOT:NNNNN`。  
其中仅 `10302~10333` 这段会由 ESP01S 上报服务端并参与映射执行。

示例:
- `EASY_IOT:10302`:会进入服务端语音映射
- `EASY_IOT:1`、`EASY_IOT:10401`:不会上报到映射逻辑

### 4.1 学习命令 ID 规则(重要)

为避免“说了开始学习却不进入真实学习”的混乱,需明确区分三类 ID:

- 学习流程控制入口(真实触发学习状态机):
  - `10400`:学习唤醒词
  - `10401`:学习命令词
  - `10402`:重新学习
  - `10403`:退出学习
  - `10450~10479`:按序号学习第 1~30 条(推荐用户实际说这一组)
- 业务执行命令(会转发给 ESP 并上报服务端):
  - `10302~10333`
- 学习提示音 ID(内部播报用途,不是学习入口):
  - `11001~11030`

补充说明:
- 在底层 `cwsl_sample` 中,`11001~11030` 由 `reg_cmd_list` 的 `reg_play_id` 使用,仅用于播报“请说第 N 条指令”等提示音。
- 因此,用户应优先说 `10450~10479` 对应口令(如“开始学习第一条指令”)进入真实学习流程。
- 为避免误触发,本工程已将 `11001~11030` 的 ASR 文案改为“内部保留口令110xx”,不建议日常使用。

---

## 5. 业务流程简述

1. ESP01S 配网上线后,上报设备类型 `ASR_ESP01S_BROADCAST`
2. APP 可直接控制通道 0/1(对应 GPIO0/GPIO2)
3. ASRPRO 串口发命令给 ESP01S
4. ESP01S 请求 `/api/devices/:id/voice-command`
5. 服务端按 APP 配置映射执行目标动作(可本机,也可其他在线设备)

---

## 6. APP 侧映射配置建议

在设备详情页“语音命令映射”中添加:
- 关键词:如 `EASY_IOT:10302`
- 目标设备:可选本机或其他设备
- 目标通道:多通道设备时选择通道
- 执行动作:`ON/OFF/TOGGLE`

若目标是当前设备:
- 通道 0 -> GPIO0
- 通道 1 -> GPIO2

---

## 7. ASRPRO 本地命令(不走串口上报)

`STUDY_SELF_ESP01S.hd` 内已配置本地直控命令,不会通过 `EASY_IOT:` 发给 ESP:

| 语音示例 | 作用 |
|---|---|
| 大声一点 / 小声一点 | `vol_set` 档位 +1 / -1 |
| 最大音量 / 静音 / 中等音量 | 设定固定音量档位 |
| 一号开~四号开 / 一号关~四号关 | 控制 4 路本地 IO(默认 `USER_IO_PINS={0,1,2,4}`) |

修改本地 IO 引脚时,仅需调整 `USER_IO_PINS`,并避免与串口相关引脚冲突。

---

## 8. 快速排查(接线后建议)

1. 先确认 ASRPRO 与 ESP01S 共地
2. 语音触发后,串口是否输出 `EASY_IOT:103xx`
3. APP 映射是否与 `103xx` 对应一致
4. 功放使能是否与 `SPEAKER_PWR_ACTIVE_LOW` 逻辑一致
5. 若无声,先看功放 `EN/SHDN` 是否被 `IO#2` 正确拉到有效电平

附件下载

评论区