当前位置: 首页 > news >正文

【花雕动手做】行空板 K10 系列实验之语音识别与语音合成的组合开关LED灯运用


行空板K10是一款专为快速体验物联网和学习人工智能而设计的开发学习板,100%采用国产芯片,知识产权自主可控,符合信息科技课程中编程学习、物联网及人工智能等教学需求。该板集成2.8寸LCD彩屏、WiFi蓝牙、摄像头、麦克风、扬声器、RGB指示灯、多种传感器及丰富的扩展接口。凭借高度集成的板载资源,教学过程中无需额外连接其他设备,便可轻松实现传感器控制、物联网应用以及人脸识别、语音识别、语音合成等AI人工智能项目。

主要特点
集成摄像头&内置算法,可进行离线图像检测
集成麦克风&内置算法,可进行离线语音识别
集成扬声器&内置算法,可进行离线语音合成
2.8寸彩色屏幕,数据展示更清晰
集成度高,利于教学
接口丰富,兼容软件多,扩展性好


主打:人工智能模块

语音识别相关说明


语音合成相关说明

辅助:屏幕显示相关积木


LED控制模块

知识点:语音识别(ASR)
一、什么是语音识别(ASR)
语音识别英文缩写是 ASR(Automatic Speech Recognition),简单来说:让单片机、电脑听懂人说话,把麦克风采集到的声音信号,转换成文字或者指令。
分为两大类:
在线语音识别:需要联网,把声音上传到云端服务器解析,识别词汇量巨大;
离线语音识别:不需要 WiFi、不需要网络,语音模型预先存放在芯片内部,本地直接处理声音,适合单片机、行空板、Arduino 这类硬件。
你代码里使用的就是离线本地 ASR 语音模块。

二、离线语音模块核心功能(对应你 K10 代码)

  1. 两种工作模式
    (1)持续拾音模式 CONTINUOUS
    麦克风一直处于收音状态,不间断监听声音,专门用来做语音唤醒。
    对应代码:asr.asrInit(CONTINUOUS, CN_MODE, 12000);
    (2)按键触发模式
    按下按键才开始录音识别,省电,一般用于命令词识别。
  2. 语言模式 CN_MODE
    CN_MODE:中文模式,只识别汉语;
    EN_MODE:英文模式,识别英语。
    本程序开启中文识别,用来识别唤醒词:你好小新。
  3. 灵敏度阈值(第三个参数 12000)
    数值代表声音检测灵敏度:
    数值越大:越不容易被环境杂音误触发,抗干扰强;
    数值越小:轻声说话就能识别,但是容易被噪音误唤醒。
    12000 属于中等灵敏度,适合室内环境使用。

三、语音唤醒技术(本项目核心)

  1. 唤醒词机制
    唤醒词就是开门密码。模块平时处于低功耗监听状态,只监听这一句话,其他普通对话会直接忽略。
    只有说出预设唤醒词(你好小新),模块才会被 “唤醒”,进入待命状态,之后才可以识别后续控制指令。
  2. 代码里的唤醒检测函数
asr.isWakeUp()

检测到唤醒词,函数返回 true;
没有检测到唤醒词,返回 false。
3. 模块状态标志

asr._asrState

值 = 0:语音模块正在启动、模型加载中,暂时无法工作;
值 ≠ 0:初始化完成,可以正常收音识别。
程序中用 while 循环等待模块就绪,避免硬件未启动造成程序崩溃。

四、硬件运行完整工作流程
上电初始化行空板主板与显示屏;
启动 ASR 语音芯片,加载离线语音模型;
等待语音模块就绪;
屏幕打印实验标题;
模块持续收音,安静待机,只监听唤醒词;
使用者说出:你好小新;
程序捕捉到唤醒信号,屏幕切换文字提示 “已唤醒行空板”;
没有听到唤醒词,则一直显示唤醒词提示语句;
每秒刷新一次屏幕,并清除文字,防止画面重叠。

五、离线语音识别优缺点
优点
完全离线,不用网络、不用流量;
响应速度极快,话音刚落立刻识别;
单片机就能驱动,成本低,非常适合机器人、智能音箱、门禁、实验教具;
不受网络波动影响,设备在野外也能正常使用。
缺点
词汇数量有限,一般只能预先录入几十条唤醒词 + 控制指令;
对嘈杂环境比较敏感,噪音大会出现识别失败;
无法自由识别任意一句话,只能识别预先烧录好的词语。

六、拓展功能(可以在现有代码上升级)
多级指令识别
唤醒之后,再识别 “开灯”“关灯”“前进”“后退”,控制电机与 LED 灯;
自定义唤醒词
修改库文件,把 “你好小新” 改成 “你好行空板”;
多句话语音交互
唤醒后连续识别多条语音命令;
调节收音灵敏度,解决误唤醒或者识别不到声音的问题。

七、容易遇到的常见问题
识别不到唤醒词
调低阈值数值,靠近麦克风,降低环境噪音。
无缘无故自动唤醒(误触发)
把灵敏度数值调高,提高抗干扰能力。
程序卡死在初始化循环
语音模块接线异常,串口通信断开,导致模块始终处于未就绪状态。

知识点:行空板 K10 离线语音合成(TTS)介绍
1、底层方案
依托 ESP-SR 语音套件内置esp-tts轻量化离线语音合成引擎,无需 WiFi 联网,文字本地实时转人声,依托板载喇叭直接发声。
2、功能能力
仅支持中文汉字、数字、常用标点朗读;内置小新、小乐两种人声音色;提供 0–5 级语速调节;支持短句、长文本流式合成播放,自带停顿逻辑。
3、硬件配套
板载集成扬声器,无需外接音频设备;共用芯片 PSRAM 内存资源,与离线语音识别 ASR 存在内存抢占冲突,二者无法同时运行,同时初始化会内存报错、设备反复重启。
4、资源占用
单独运行 TTS 仅占用约 3MB PSRAM,程序运行稳定;若搭配屏幕、传感器,内存余量会进一步缩减,不建议叠加 AI 视觉模型。
5、开发形式
Mind + 提供图形化语音合成积木,底层封装规避指针崩溃问题;也可调用playText.h底层库手写代码,仅推荐纯播报场景使用。
6、适用场景
设备状态语音播报、文字朗读、交互提示、温湿度 / 数字信息语音输出;适合不需要语音指令识别、仅单向发声的项目。
7、短板
无英文朗读能力;人声存在轻微机械拼接感,自然度弱于云端 TTS;无法和离线语音识别共存,有双向语音交互需求只能选用联网在线语音方案。


【花雕动手做】行空板 K10 系列实验之语音识别与语音合成的组合开关LED灯运用
实验开源代码

// 引入离线语音识别ASR库,实现语音唤醒、命令识别与语音播报#include"asr.h"// 引入行空板K10硬件驱动库,用于控制屏幕、RGB彩灯等外设#include"unihiker_k10.h"// 实例化硬件对象UNIHIKER_K10 k10;// 行空板主控对象,操控屏幕、彩灯、语音播报ASR asr;// 语音识别对象,处理收音、识别、TTS语音朗读// 定义屏幕旋转参数,数值2代表屏幕倒置显示uint8_tscreen_dir=2;//=====================================================================// setup初始化函数:上电/重启仅执行一次,完成硬件初始化与指令配置//=====================================================================voidsetup(){// 初始化行空板底层所有硬件资源k10.begin();// 配置语音识别模块// CONTINUOUS:持续不间断收音// CN_MODE:中文识别模式// 12000:语音检测灵敏度,数值越大抗环境噪音越强asr.asrInit(CONTINUOUS,CN_MODE,12000);// 阻塞等待语音模块启动完成// _asrState=0 表示语音模型正在加载,模块未就绪// 每100毫秒检测一次状态,防止硬件未就绪导致程序出错while(asr._asrState==0){delay(100);}// 根据预设参数初始化显示屏k10.initScreen(screen_dir);// 创建屏幕绘图画布,所有文字先写入画布缓冲区k10.creatCanvas();// 设置语音播报语速// 参数范围1~5,数字越大语速越快;2为中等语速asr.setAsrSpeed(2);// 向语音模块添加两条自定义离线语音命令// 函数格式:addASRCommand(命令编号, 拼音口令)// 编号1:拼音 kai deng 对应中文“开灯”asr.addASRCommand(0+1,"kai deng");// 编号2:拼音 guan deng 对应中文“关灯”asr.addASRCommand(1+1,"guan deng");// 设置屏幕背景颜色:0x000000 纯黑色背景k10.setScreenBackground(0x000000);}//=====================================================================// loop主循环:初始化完成后无限循环,实时监测语音指令//=====================================================================voidloop(){// 条件判断:是否识别到唤醒词【你好小新】if(asr.isWakeUp()){// 唤醒成功:在画布第6行写入红色文字k10.canvas->canvasText("已唤醒行空板.......",6,0xFF0000);// 刷新画布内容到LCD屏幕k10.canvas->updateCanvas();}else{// 未唤醒状态:第4行写入浅蓝色文字,提示唤醒关键词k10.canvas->canvasText("唤醒词为“你好小新”",4,0x33CCFF);k10.canvas->updateCanvas();}// 判断:是否识别到编号1的语音命令“开灯”if(asr.isDetectCmdID(0+1)){// 在第9行写入白色文字,提示执行开灯动作k10.canvas->canvasText(" 打开白色灯光",9,0xFFFFFF);k10.canvas->updateCanvas();// 点亮全部RGB彩灯:-1代表所有灯珠,0xFFFFFF为纯白色k10.rgb->write(-1,0xFFFFFF);// TTS语音合成,喇叭朗读语音:灯打开asr.speak("灯打开");// 保持画面与语音2秒delay(2000);}// 判断:是否识别到编号2的语音命令“关灯”if(asr.isDetectCmdID(1+1)){// 清空画布第9行,避免新旧文字重叠k10.canvas->canvasClear(9);// 写入浅绿色文字,提示关灯动作k10.canvas->canvasText(" 关闭白色灯光",9,0x99FF99);k10.canvas->updateCanvas();// 关闭所有RGB彩灯,颜色0x000000代表熄灭k10.rgb->write(-1,0x000000);// 喇叭语音播报:关灯了asr.speak("关灯了");// 画面停留2秒delay(2000);}// 清空画布第6行及以下所有文字,清除上一轮显示内容k10.canvas->canvasClear(6);}

代码解读
一、项目整体功能
该程序运行在行空板 K10,实现离线语音唤醒 + 语音指令控制 + 语音播报。
操作流程:说出唤醒词 “你好小新” 唤醒设备,再说出 “开灯”“关灯”,屏幕同步显示文字、板载彩灯对应亮灭,同时喇叭发出语音提示。

二、分段代码解读

  1. 头文件与对象定义
#include"asr.h"#include"unihiker_k10.h"

asr.h:离线语音库,包含语音识别、文字转语音播报、指令配置功能。
unihiker_k10.h:行空板硬件库,用来控制显示屏、RGB 彩灯。

UNIHIKER_K10 k10;ASR asr;

k10:行空板硬件对象,管理屏幕、彩灯。
asr:语音识别对象,负责收音识别与语音朗读。

uint8_tscreen_dir=2;

设置屏幕旋转方向,2 为倒置方向。

  1. setup () 初始化函数(上电仅执行一次)
k10.begin();

初始化行空板所有底层硬件。

asr.asrInit(CONTINUOUS,CN_MODE,12000);

初始化语音模块:
CONTINUOUS:持续收音,不间断监听声音;
CN_MODE:中文识别模式;
12000:收音灵敏度,数值越高,抗干扰越强,不容易误触发。

while(asr._asrState==0){delay(100);}

等待语音模块加载模型完成。_asrState=0代表模块未就绪,程序循环等待,每 100ms 检测一次,防止程序异常。

k10.initScreen(screen_dir);k10.creatCanvas();

初始化屏幕,并创建绘图缓冲区(画布),所有文字先写入画布再统一刷新。

asr.setAsrSpeed(2);

设置语音播报语速。档位 1~5,数字越大读得越快,2 为中等语速。

asr.addASRCommand(0+1,"kai deng");asr.addASRCommand(1+1,"guan deng");

预先添加两条离线语音指令:
1 号指令:拼音 kai deng → 开灯
2 号指令:拼音 guan deng → 关灯
离线语音必须提前注册指令,只能识别预设口令。

k10.setScreenBackground(0x000000);

把屏幕背景设置为纯黑色,彩色文字对比更明显。

  1. loop () 无限主循环
    (1)唤醒状态监测
if(asr.isWakeUp())

检测是否说出唤醒词 “你好小新”:
唤醒成功:屏幕第 6 行显示红色文字 “已唤醒行空板”;
未唤醒:屏幕第 4 行显示浅蓝色文字,提示唤醒词。
updateCanvas() 把画布内容刷新到屏幕。
(2)开灯指令处理

if(asr.isDetectCmdID(0+1))

识别到 1 号指令 “开灯”:
屏幕第 9 行输出白色文字;
打开全部 RGB 灯,颜色为纯白色(0xFFFFFF);
调用 asr.speak(“灯打开”);,喇叭语音播报;
延时 2 秒,保持画面。
(3)关灯指令处理

if(asr.isDetectCmdID(1+1))

识别到 2 号指令 “关灯”:
清空第 9 行旧文字,防止画面重叠;
屏幕打印浅绿色文字;
关闭所有彩灯,灯光值为 0x000000;
喇叭播报 “关灯了”,延时停留 2 秒。
(4)画面清理

k10.canvas->canvasClear(6);

清空第 6 行及以下所有文字,清除上一轮内容,等待下一次语音指令。

三、完整运行步骤
设备上电,初始化主板、屏幕、语音模块,等待语音芯片启动;
配置播报语速,录入 “开灯”“关灯” 两条命令,屏幕设置黑色背景;
麦克风持续监听唤醒词;
说出 “你好小新”,设备被唤醒,屏幕弹出唤醒提示;
语音说出 “开灯”:屏幕提示、灯亮起、喇叭发声,保持 2 秒;
语音说出 “关灯”:屏幕更新、灯光熄灭、语音提示;
自动清空屏幕文字,回到待机监听状态。

Mind+图形编程


实验场景图与视频记录




http://www.jsqmd.com/news/1082320/

相关文章:

  • VMware虚拟磁盘类型全解析:厚置备延迟清零 vs 精简置备 vs 独立磁盘——90%工程师选错的3大致命误区
  • 网盘直链下载助手终极指南:如何快速免费获取九大网盘文件直链
  • 网易智企位居中国大模型内容风控服务商市场首位
  • 如何彻底告别网盘限速?八大平台直链下载神器完整指南
  • ASC0101S — 商业航天级 1 位双向电平转换器:小封装解决跨电压域大问题
  • 全栈学习——Figma学习
  • SunnyUI:让C WinForm开发焕发现代化魅力的70+控件库
  • FFXIV TexTools实战指南:三步打造你的专属《最终幻想14》游戏世界
  • 3分钟免费激活Windows和Office:智能激活脚本终极指南
  • AI视频增强工具Video2X 6.0.0终极指南:免费提升视频画质和流畅度
  • Webshell上传攻防实战:从Shop靶机到文件上传漏洞深度解析
  • 《光污染:现状、应对策略与未来可持续发展路径》
  • 命理师客户排盘历史怎么管理?2026最新工具测评看数据复盘能力
  • 从指标采集到异常通知:搭建完整的Linux服务器监控告警系统
  • Linux服务器安全加固:彻底关闭RPCBIND服务与防火墙配置实战
  • 3步快速上手茉莉花插件:Zotero中文文献管理的终极解决方案
  • 5分钟掌握ExifToolGUI:Windows上最强大的照片元数据管理工具
  • 鸿蒙原生ArkTS布局之ListItemGroup分组列表通讯录实现
  • 英雄联盟回放文件终极解析指南:ROFL播放器完整使用教程
  • 【VMware OVF导出黄金法则】:20年老司机亲授5大避坑指南与3种极速导出实战方案
  • MCP 协议如何助力企业实现 Agent 自动化
  • 如何永久保存你的微信回忆:WeChatMsg完整指南让聊天记录永不消失
  • Reloaded-II模块化架构的技术突破与系统稳定性优化
  • 终极抖音直播录制指南:如何搭建40+平台无人值守自动录制系统
  • 2026 变声器横评:4 款主流产品实测,新手入门避坑指南
  • 终极指南:如何用开源工具免费突破网盘限速,实现全平台高速下载
  • 树莓派3启动流程全解析:从OTP配置到USB启动实战
  • 树莓派config.txt遗产选项深度解析:从底层原理到裸机开发实战
  • 别光喊AI Agent,自己动手造一个!LangChain工作机制解析与实战入门
  • 实战指南:docker-wechatbot-webhook如何高效实现微信媒体文件自动保存