基于 i.MX6ULL 架构的边缘计算智能语音交互终端【代码开源】
本项目是一款集成 AI 语音识别、多维环境感知、端云协同控制于一体的嵌入式边缘智能终端。系统基于 Qt/C++ 框架开发,适配 i.MX6ULL 工业级处理器,旨在构建一个高性能、低延迟的 AIoT(人工智能物联网)交互节点。
基于 i.MX6ULL 架构的智能语音交互终端【嵌入式linux应用开发项目】
前情提要
本项目是我在深入学习嵌入式 Linux 应用开发过程中的独立动手做的一个小项目。项目原型借鉴了正点原子的语音识别项目的 Demo,但在后续开发过程中,独立完成了功能扩展演进的全过程。涵盖了线程调度、MQTT 协议、系统/网络编程以及嵌入式系统资源分配等诸多底层知识。目前,项目已由单一的本地控制演进为一个具备端云协同能力的完整 AIoT 系统。细节上可能还不够完美,后续有时间会慢慢优化,以及该项目开发细节后续系列也会更新可以先关注,欢迎交流学习。【源码链接在最后】
项目简介
本项目是一款集成 AI 语音识别、多维环境感知、端云协同控制于一体的嵌入式边缘智能终端。系统基于 Qt/C++ 框架开发,适配 i.MX6ULL 工业级处理器,旨在构建一个高性能、低延迟的 AIoT(人工智能物联网)交互节点。
功能特点
🎤 语音交互
- 基于百度云语音识别API的实时语音识别
- 支持中文语音命令识别,支持“开灯”、“关灯”、“播放音乐”、“环境数据查询”等多种场景化指令
- 直观的语音交互界面(GIF动画反馈)

☁️ 云端远程控制
- 双向同步:基于 MQTT 协议接入中国移动 OneNET Studio 平台
- 状态上报:环境数据(光照、红外、接近距离)自动上报云端,支持手机 App 实时查看。
- 远程控制:支持手机端APP远程设备控制(LED、蜂鸣器、音乐播放器)
- 物模型对齐:完整实现 OneNET OneJson 协议,支持 set_reply 与 post_reply 响应机制。

💡 硬件控制
- LED灯开关控制
- 蜂鸣器报警控制
- 音乐播放器控制
- 可扩展支持多种硬件设备

🌡️ 环境感知与性能优化
- AP3216C传感器数据采集(光照强度、接近距离、红外数据)
- 多线程架构:传感器采集在独立线程运行,确保 GUI 响应优先级。
- 实时环境数据显示

🎵 音频播放
- 支持语音控制音乐文件播放
- 循环播放、暂停、上一曲/下一曲切换等功能
- 自动扫描应用目录下的myMusic文件夹
📱 用户界面
- 现代化简洁UI设计
- 语音识别状态实时反馈
- 传感器数据可视化显示
- 音乐播放状态和当前曲目显示

硬件要求
- 基于正点原子i.mx6ull alpha开发板(支持Linux/Qt运行环境)
- AP3216C环境传感器
- LED灯(或其他可控制硬件)
- 音频输入设备(麦克风)
- 音频输出设备(扬声器或耳机)
软件依赖
- Qt 5.12+ (支持Widgets模块)
- GCC/G++编译器
- 百度云语音识别API密钥
- Linux系统(支持sysfs硬件访问)
项目结构
02_asr_demo/:主应用程序代码- -
mainwindow.h:主窗口头文件 - -
mainwindow.cpp:主窗口代码 beep/:蜂鸣器控制代码led/:LED灯控制代码asr/:语音识别模块代码sensor/:传感器数据采集代码musicplayer/:音频播放控制代码mqttclient/:MQTT客户端通信代码myMusic/:音乐文件存储目录
安装与编译
1. 克隆项目
git clone https://github.com/your-username/VoiceControl-SmartDevice.git
cd VoiceControl-SmartDevice
2. 配置百度云API密钥
在 asr/asr.cpp 文件中配置您的百度云API密钥:
// 关键:替换为您的百度云API密钥!!!!
QString apiKey = "your_api_key";
QString secretKey = "your_secret_key";
3. 配置OneNET云端参数
使用工具生成 设备级 Token(资源路径需包含 devices/device_name)
确保 OneNET 控制台定义的标识符(Identifier)与代码中的 als、ir、led 完全一致。
在 mqttclient/mqttclient.h 文件中配置您的OneNET设备参数:
// 替换为您自己的OneNET设备参数
const QString m_productId = "your_product_id";
const QString m_deviceName = "your_device_name";
const QString m_token = "your_device_token";
4. 添加音乐文件
将WAV格式的音乐文件复制到 myMusic/ 目录下。
5. 编译项目
使用Qt Creator打开 02_asr_demo/02_asr_demo.pro 文件,然后点击"构建"按钮。
或者使用命令行编译:
cd 02_asr_demo
qmake
make
使用说明
1. 启动应用
运行编译生成的可执行文件:
./02_asr_demo
在正点原子 I.MX6U 开发板上运行此录音程序,需要先配置是麦克风(板子上的麦头)。麦头录音,则在板子上运行开启麦头录音的脚本:/home/root/shell/audio/mic_in_config.sh
2. 语音交互
- 点击屏幕中央的GIF动画开始说话
- 等待"正在听您说话"提示
- 说出语音命令,如:
- 硬件控制:
- “开灯” - 控制LED灯开启
- “关灯” - 控制LED灯关闭
- “报警”/“鸣笛” - 触发蜂鸣器报警
- 环境查询:
- “环境数据”/“光照强度如何”/“传感器数据” - 查询所有环境传感器数据
- 音乐控制:
- “播放音乐”/“播放歌曲” - 开始播放音乐
- “暂停音乐”/“暂停歌曲” - 暂停播放
- “停止音乐”/“停止歌曲” - 停止播放
- “下一首”/“下一曲” - 播放下一首
- “上一首”/“上一曲” - 播放上一首
- 硬件控制:
3. 云端远程控制
- 通过OneNET平台或手机APP远程控制设备
- 支持远程开关LED、蜂鸣器、音乐播放器
- 实时查看设备状态和传感器数据
- 设备状态变化会同步至云端
4. 查看环境数据
当识别到环境数据查询命令时,系统会:
- 自动启动传感器数据采集线程
- 在UI上显示实时环境数据(光照强度、接近距离、红外数据)
- 数据显示7秒后自动隐藏
核心功能实现
语音识别流程
- 用户点击界面启动录音
- 音频录制模块捕获音频数据
- 语音识别模块将音频发送到百度云API
- 接收并解析识别结果
- 根据识别结果执行相应操作(硬件控制或数据查询)
多线程环境数据采集
// SensorThread::run() 核心实现
void SensorThread::run() {
while (m_isRunning) {
// 采集传感器数据
m_sensor->updateSensorData();
// 获取并存储最新数据
m_alsData = m_sensor->alsData();
m_psData = m_sensor->psData();
m_irData = m_sensor->irData();
// 发送数据更新信号
emit sensorDataUpdated();
// 控制采集频率
msleep(m_updateInterval);
}
}
模块化设计
项目采用模块化架构,每个功能模块独立封装:
- asr模块:语音识别功能
- audiorecorder模块:音频录制功能
- led模块:LED控制功能
- sensor模块:环境传感器功能
扩展指南
添加新的硬件控制
- 创建新的硬件控制模块(参考led模块结构)
- 实现硬件控制类
- 在MainWindow中集成新模块
- 在onAsrReadyData()中添加语音命令处理逻辑
支持新的传感器
- 在sensor模块中添加新传感器驱动
- 扩展SensorThread支持新传感器数据采集
- 更新UI显示逻辑
添加音乐文件
- 将WAV格式的音乐文件复制到
myMusic/目录 - 程序会自动扫描并添加到播放列表中
- 用户可以在音乐控制命令中使用添加的音乐文件
项目依赖
| 模块 | 依赖项 | 版本要求 |
|---|---|---|
| 核心框架 | Qt | 5.12+ |
| 语音识别 | 百度云API | - |
| 硬件访问 | Linux sysfs | - |
| 编译工具 | GCC/G++ | 4.8+ |
联系方式
如有问题或建议,请通过以下方式联系:
- 项目地址:https://github.com/nono741852/VoiceControl-SmartDevice.git
- 邮箱:ryn18247501992@163.com
更多推荐

所有评论(0)