第 8 课 · 语音识别
这一课学什么?
这一课只讲一个核心点:语音命令。
语音模块不会持续给你一串变化数值,它更像是在“听到一次命令”之后,返回一个对应的编号。

学习目标
- 知道默认唤醒词和常用命令词
- 会读取语音模块返回的命令 ID
- 会把几个常用命令 ID 映射成动作
- 理解语音输入和持续型传感器输入的区别
- 能完成一个简单的“听口令行动”程序
用到的硬件和功能
这一课需要接入 ASR 语音识别模块。
会用到的接口主要有:
cm.power_on():给扩展模块上电。cm.asr_get_command():读取最新命令 ID。没有新命令时通常返回0。cm.asr_play_command(cmd_id):播报指定命令。cmd_id是你想让模块播报的命令编号,例如19、20、21或自学习得到的4、5、6。cocube.move_ms(direction, speed, ms):按时间执行一次动作。direction取cocube.FORWARD/cocube.BACKWARD;speed是速度;ms是持续时间。cocube.rotate_ms(direction, speed, ms):按时间转向。direction取cocube.LEFT/cocube.RIGHT;speed是转向速度;ms是持续时间。cocube.brake():刹车停车。
先认识这个能力
语音识别和距离、光照这类输入有一个明显区别:
- 距离和光照是持续变化的
- 语音命令更像一次事件
所以这一课的程序会特别像“等待触发”:
- 听到了,再执行
- 没听到,就继续等待
在真正开始写代码前,还要先知道这套模块的基本使用顺序:
- 先说唤醒词
- 等模块进入聆听状态
- 再说命令词
- 程序里读取返回的命令 ID
默认可用的唤醒词有:
你好小智小智你好
如果之前做过自学习,也可能还存在一个“学习的唤醒词”,对应 ID 1。
常用的基础命令词可以先记这几组:
| ID | 命令词 | 适合拿来做什么 |
|---|---|---|
19 | 前进 | 第一组移动测试 |
20 | 后退 | 第一组移动测试 |
21 | 停车 | 第一组移动测试 |
22 | 左转九十度 | 扩展动作 |
25 | 右转九十度 | 扩展动作 |
28 | 加速一档 | 扩展动作 |
29 | 减速一档 | 扩展动作 |
82 | 打开夹爪 | 扩展模块联动 |
83 | 关闭夹爪 | 扩展模块联动 |
开始编程
1. 先看看模块返回了什么命令 ID
import time
import cocube_module as cm
cm.power_on()
time.sleep_ms(500)
while True:
command = cm.asr_get_command()
if command:
print("command =", command)
time.sleep_ms(50)
先跑这段程序,确认模块能稳定返回命令编号。
1.1 使用时先说什么?
推荐先按这个节奏测试:
- 先说
你好小智或小智你好 - 等模块响应
- 再说
前进、后退或停车
如果模块已经被重新学习过,也可以先试自己设置过的唤醒词。
2. 把 3 个常用命令绑定成动作
先从最小组合开始,只用 3 个命令:
19:前进20:后退21:停车
import time
import cocube
import cocube_module as cm
cm.power_on()
time.sleep_ms(500)
while True:
command = cm.asr_get_command()
if command == 19:
print("收到前进命令")
cm.asr_play_command(19)
cocube.move_ms(cocube.FORWARD, 25, 500)
elif command == 20:
print("收到后退命令")
cm.asr_play_command(20)
cocube.move_ms(cocube.BACKWARD, 25, 500)
elif command == 21:
print("收到停车命令")
cm.asr_play_command(21)
cocube.brake()
time.sleep_ms(50)
这段程序的重点是:
同样是一个数字编号,真正执行什么动作,完全由你来定义。
运行时观察什么
运行这段程序时,重点看这些现象:
- 没有新命令时,
asr_get_command()通常返回0 - 收到命令后,动作是一次性触发的,不是持续变化的
- 前进、后退、停车这类命令最适合作为第一组测试
- 先把命令识别稳定,再增加更复杂的动作组合
常见问题 / 使用提醒
- 初次上电后,模块需要一点准备时间
- 环境越安静,识别越稳定
- 先说唤醒词,再说命令词;只说命令词通常不会触发
- 先用 2 到 3 个命令跑通,再慢慢往上加
- 如果程序没有反应,先只打印命令 ID,不要一开始就排查动作逻辑
如果想换成自己的口令
这一类功能在 cocube-learn 里有更完整的操作说明,这里把编程时最需要的部分提炼出来。
1. 学习新的唤醒词
唤醒词的作用是让模块从待机状态进入聆听状态。
操作顺序:
- 先用默认唤醒词
你好小智或小智你好唤醒模块 - 说
学习唤醒词 - 按语音提示,说出你想设置的新唤醒词
- 等模块确认后,再用新的唤醒词测试一次
使用时注意:
- 重新学习前,最好先删除旧的学习唤醒词
- 新唤醒词尽量简短、清晰,避免和常用命令太像
- 环境安静一些,成功率会更高
2. 学习新的命令词
如果你不想只用默认的 前进、后退、停车,可以自己录入新的命令词。
操作顺序:
- 先用唤醒词唤醒模块
- 说
学习命令词 - 按提示依次录入自己的命令词
- 每学习成功一条,都会占用一个新的命令 ID
这里最关键的一点是:
- 自学习命令词的 ID 从
4开始 - 第一条通常是
4 - 第二条通常是
5 - 第三条通常是
6
所以你学完之后,最好先跑一遍打印 command 的程序,确认自己的命令词分别对应哪个 ID,再写动作映射。
3. 删除已经学习的词条
如果之前学错了,或者想重新录,可以这样做:
- 先用唤醒词唤醒模块
- 说
我要删除 - 再根据提示选择:
删除命令词删除唤醒词全部删除退出删除
唤醒词与命令表
如果你需要查完整的唤醒词和命令词,可以直接看下面这张表。
完整命令 ID 列表(从 cocube-learn 搬过来,默认折叠)
| ID | 命令词 | 功能类型 | 播报语句 |
|---|---|---|---|
| 1 | 学习的唤醒词 | 唤醒词 | 我在 |
| 2 | 你好小智 | 唤醒词 | 我在 |
| 3 | 小智你好 | 唤醒词 | 我在 |
| 4 | 第一个自定义 | 命令词 | 好的 |
| 5 | 第二个自定义 | 命令词 | 好的 |
| 6 | 第三个自定义 | 命令词 | 好的 |
| 7 | 第四个自定义 | 命令词 | 好的 |
| 8 | 第五个自定义 | 命令词 | 好的 |
| 9 | 第六个自定义 | 命令词 | 好的 |
| 10 | 第七个自定义 | 命令词 | 好的 |
| 11 | 第八个自定义 | 命令词 | 好的 |
| 12 | 第九个自定义 | 命令词 | 好的 |
| 13 | 第十个自定义 | 命令词 | 好的 |
| 14 | 第十一自定义 | 命令词 | 好的 |
| 15 | 第十二自定义 | 命令词 | 好的 |
| 16 | 第十三自定义 | 命令词 | 好的 |
| 17 | 第十四自定义 | 命令词 | 好的 |
| 18 | 第十五自定义 | 命令词 | 好的 |
| 19 | 前进 | 命令词 | 开始前进 |
| 20 | 后退 | 命令词 | 开始后退 |
| 21 | 停车 | 命令词 | 已停车 |
| 22 | 左转九十度 | 命令词 | 左转九十度 |
| 23 | 左转四十五度 | 命令词 | 左转四十五度 |
| 24 | 左转三十度 | 命令词 | 左转三十度 |
| 25 | 右转九十度 | 命令词 | 右转九十度 |
| 26 | 右转四十五度 | 命令词 | 右转四十五度 |
| 27 | 右转三十度 | 命令词 | 右转三十度 |
| 28 | 加速一档 | 命令词 | 已加速 |
| 29 | 减速一档 | 命令词 | 已减速 |
| 30 | 打开车灯 | 命令词 | 车灯已打开 |
| 31 | 关闭车灯 | 命令词 | 车灯已关闭 |
| 32 | 巡线模式 | 命令词 | 已进入+巡线模式 |
| 33 | 追光模式 | 命令词 | 已进入+追光模式 |
| 34 | 蓝牙控制模式 | 命令词 | 已进入+蓝牙控制模式 |
| 35 | 避障模式 | 命令词 | 已进入+避障模式 |
| 36 | 人脸识别 | 命令词 | 已进入+人脸识别模式 |
| 37 | 物体追踪 | 命令词 | 已进入+物体追踪模式 |
| 38 | 物体识别 | 命令词 | 已进入+物体识别模式 |
| 39 | 巡线追踪 | 命令词 | 已进入+巡线追踪模式 |
| 40 | 颜色识别 | 命令词 | 已进入+颜色识别模块 |
| 41 | 标签识别 | 命令词 | 已进入+标签识别模式 |
| 42 | 物体分类 | 命令词 | 已进入+物体分类模式 |
| 43 | 二维码识别 | 命令词 | 已进入+二维码识别模式 |
| 44 | 清除屏幕 | 命令词 | 已清除屏幕 |
| 45 | 学习一次 | 命令词 | 开始学习 |
| 46 | 遗忘 | 命令词 | 已遗忘 |
| 47 | 加载模型 | 命令词 | 模型加载中 |
| 48 | 保存模型 | 命令词 | 模型已保存 |
| 49 | 拍照并保存 | 命令词 | 拍照完成 |
| 50 | 保存并返回 | 命令词 | 已保存 |
| 51 | 显示数字零 | 命令词 | 好的 |
| 52 | 显示数字一 | 命令词 | 好的 |
| 53 | 显示数字二 | 命令词 | 好的 |
| 54 | 显示数字三 | 命令词 | 好的 |
| 55 | 显示数字四 | 命令词 | 好的 |
| 56 | 显示数字五 | 命令词 | 好的 |
| 57 | 显示数字六 | 命令词 | 好的 |
| 58 | 显示数字七 | 命令词 | 好的 |
| 59 | 显示数字八 | 命令词 | 好的 |
| 60 | 显示数字九 | 命令词 | 好的 |
| 61 | 显示笑脸 | 命令词 | 好的 |
| 62 | 显示哭脸 | 命令词 | 好的 |
| 63 | 显示爱心 | 命令词 | 好的 |
| 64 | 读取当前位置 | 命令词 | 读取中 |
| 65 | 读取环境光 | 命令词 | 读取中 |
| 66 | 读取指南针 | 命令词 | 读取中 |
| 67 | 读取温度 | 命令词 | 读取中 |
| 68 | 读取加速度 | 命令词 | 读取中 |
| 69 | 读取声音强度 | 命令词 | 读取中 |
| 70 | 读取按键A | 命令词 | 读取中 |
| 71 | 读取按键B | 命令词 | 读取中 |
| 72 | 打开摄像头 | 命令词 | 摄像头已打开 |
| 73 | 关闭摄像头 | 命令词 | 摄像头已关闭 |
| 74 | 打开风扇 | 命令词 | 风扇已打开 |
| 75 | 关闭风扇 | 命令词 | 风扇已关闭 |
| 76 | 风速一档 | 命令词 | 一档启动 |
| 77 | 风速二档 | 命令词 | 二档启动 |
| 78 | 风速三档 | 命令词 | 三档启动 |
| 79 | 开启摇头 | 命令词 | 开始摇头 |
| 80 | 停止摇头 | 命令词 | 停止摇头 |
| 81 | 归位 | 命令词 | 正在归位 |
| 82 | 打开夹爪 | 命令词 | 夹爪已打开 |
| 83 | 关闭夹爪 | 命令词 | 夹爪已关闭 |
| 84 | 打开蜂鸣器 | 命令词 | 蜂鸣器已打开 |
| 85 | 关闭蜂鸣器 | 命令词 | 蜂鸣器已关闭 |
| 86 | 打开喇叭 | 命令词 | 喇叭已打开 |
| 87 | 关闭喇叭 | 命令词 | 喇叭已关闭 |
| 88 | 播放音乐 | 命令词 | 开始播放 |
| 89 | 停止播放 | 命令词 | 停止播放 |
| 90 | 上一曲 | 命令词 | 切换上一曲 |
| 91 | 下一曲 | 命令词 | 切换下一曲 |
| 92 | 单曲循环 | 命令词 | 单曲循环 |
| 93 | 列表循环 | 命令词 | 列表循环 |
| 94 | 随机播放 | 命令词 | 随机播放 |
| 95 | 增大音量 | 增大音量 | 音量已增大 |
| 96 | 减小音量 | 减小音量 | 音量已减小 |
| 97 | 最大音量 | 最大音量 | 音量已最大 |
| 98 | 最小音量 | 最小音量 | 音量已最小 |
| 99 | 中等音量 | 中等音量 | 中等音量 |
| 100 | 开播报 | 开播报 | 开启播报功能 |
| 101 | 关播报 | 关播报 | 关闭播报功能 |
| 102 | 打开灯光 | 命令词 | 灯光已开 |
| 103 | 关闭灯光 | 命令词 | 灯光已关 |
| 104 | 调高亮度 | 命令词 | 亮度调高 |
| 105 | 调低亮度 | 命令词 | 亮度调低 |
| 106 | 最高亮度 | 命令词 | 最高亮度 |
| 107 | 最低亮度 | 命令词 | 最低亮度 |
| 108 | 调高色温 | 命令词 | 色温调高 |
| 109 | 调低色温 | 命令词 | 色温调低 |
| 110 | 日光模式 | 命令词 | 日光模式 |
| 111 | 月光模式 | 命令词 | 月光模式 |
| 112 | 设置为红色 | 命令词 | 已设红色 |
| 113 | 设置为橙色 | 命令词 | 已设橙色 |
| 114 | 设置为黄色 | 命令词 | 已设黄色 |
| 115 | 设置为绿色 | 命令词 | 已设绿色 |
| 116 | 设置为青色 | 命令词 | 已设青色 |
| 117 | 设置为蓝色 | 命令词 | 已设蓝色 |
| 118 | 设置为紫色 | 命令词 | 已设紫色 |
| 119 | 设置为白色 | 命令词 | 已设白色 |
| 120 | 打开空调 | 命令词 | 空调已开 |
| 121 | 关闭空调 | 命令词 | 空调已关 |
| 122 | 温度调高 | 命令词 | 温度调高 |
| 123 | 温度调低 | 命令词 | 温度调低 |
| 124 | 制冷模式 | 命令词 | 制冷模式 |
| 125 | 制热模式 | 命令词 | 制热模式 |
| 126 | 自动模式 | 命令词 | 自动模式 |
| 127 | 除湿模式 | 命令词 | 除湿模式 |
| 128 | 通风模式 | 命令词 | 通风模式 |
| 129 | 打开上下扫风 | 命令词 | 上下扫风 |
| 130 | 关闭上下扫风 | 命令词 | 停止扫风 |
| 131 | 打开左右扫风 | 命令词 | 左右扫风 |
| 132 | 关闭左右扫风 | 命令词 | 停止扫风 |
| 133 | 打开窗户 | 命令词 | 窗户已开 |
| 134 | 关闭窗户 | 命令词 | 窗户已关 |
| 135 | 打开窗帘 | 命令词 | 窗帘已开 |
| 136 | 关闭窗帘 | 命令词 | 窗帘已关 |
| 137 | 开门 | 命令词 | 门已打开 |
| 138 | 关门 | 命令词 | 门已关闭 |
挑战一下
做一个“自定义口令遥控车”:
- 先学习 3 条自己的命令词
- 用打印程序确认它们对应的 ID
- 把这 3 个 ID 分别绑定成前进、后退、停车
- 再额外加 1 条扩展命令,例如左转或打开夹爪
如果想继续升级,可以试这几个方向:
- 同时兼容默认命令词和自定义命令词
- 给不同命令配不同的屏幕提示或播报
- 再增加一条“转向”或“抓取”动作
参考代码:自定义命令词控制 CoCube(先自己试,再展开)
import time
import cocube
import cocube_module as cm
cm.power_on()
time.sleep_ms(500)
while True:
command = cm.asr_get_command()
if command == 4:
cocube.move_ms(cocube.FORWARD, 25, 600)
elif command == 5:
cocube.move_ms(cocube.BACKWARD, 25, 600)
elif command == 6:
cocube.brake()
elif command == 7:
cocube.rotate_ms(cocube.LEFT, 25, 500)
time.sleep_ms(50)
这段代码默认把前 4 条自学习命令,映射成前进、后退、停车、左转。
如果你的学习顺序不一样,就把 4/5/6/7 换成自己实际测到的命令 ID。
快速参考
这一课最常用的写法是:
import cocube_module as cm
cm.power_on()
print(cm.asr_get_command())
cm.asr_play_command(19)
cm.power_on():打开扩展模块电源cm.asr_get_command():读取最新命令 IDcm.asr_play_command(id):播放对应语音反馈cocube.move_ms(...):执行一次短动作cocube.brake():停车
如果想继续查外设接口,可以查看 cocube_module 快速参考。