“智控家居”—— 基于英飞凌PSoC6和阿里云大模型的智能家居控制
本实验包含两方面的内容:嵌入式开发端和云端服务程序设计。核心目标是实现 “语音指令→云端识别→设备控制” 的智能家居闭环。
实验介绍
本实验包含两方面的内容:嵌入式开发端和云端服务程序设计。核心目标是实现 “语音指令→云端识别→设备控制” 的智能家居闭环。
嵌入式端:
硬件基于Infineon CY8CPROTO-062-4343W PSoC6 开发板,板载 WiFi 模块与双通道PDM麦克风,通过麦克风采集用户语音数据。语音数据按 “16kHz 采样率、双声道、16 位采样宽度” 标准化后,打包为 UDP 数据包(目的端口:57345),通过 WiFi 发送至云端;同时接收云端下发的控制指令(如 “开灯” 对应 0x01、“关空调” 对应 0x02),驱动板载 LED(模拟灯)或外接继电器(模拟空调)执行动作。
云端:
前期开发可在本地 PC 搭建环境调试,调试成功后部署至阿里云 ECS,实现完整 AIoT 系统。具体功能如下:
语音控制
系统提供高效便捷的语音控制方式,用户无需手动操作界面,只需直接说出清晰明确的语音指令,即可实现对家中智能设备的精准操控。云端接收音频数据流,生成.WAV文件后,通过调用阿里大模型实现语音转文本命令。然后,云端将命令下发到嵌入式端实现智能控制。支持中英双语识别。例如,用户可以说中文“开灯”或英文“Turn on the light”,系统均能迅速准确地识别并响应,向智能灯具发送控制命令,实现灯具的开启或关闭。
界面交互控制
系统配备直观的图形化界面,用户通过访问系统网页,即可在界面上看到受控设备(包括灯、空调等)的当前状态(开/关)。界面为每个设备提供直观的控件,如开关按钮、图标等。除语音控制外,用户也可以点击这些控件,发送控制指令控制设备的开关状态。例如,用户想关闭空调,只需在界面交互控制页面找到空调对应的开关按钮并点击“关闭”,系统就会将控制信号传输至智能空调,实现设备的关机操作。
多语言支持
为适应不同用户群体,系统提供一键切换中英文的功能。无论是页面上的文本说明、标签标识,还是各类按钮名称,均能实现实时、无延迟的切换。
实时反馈机制
系统具备实时反馈能力,涵盖语音识别结果、设备状态更新以及历史记录等多个方面。当用户下达语音指令后,系统不仅快速识别并展示识别结果,还实时反馈设备的执行状态。例如,用户发出“开灯”指令,界面会立即显示“正在开启灯光”,并在操作成功后同步更新设备状态为“已开启”。同时,系统会记录所有语音命令及其执行结果,历史记录可随时查看,以便用户追溯过往操作,进行管理和分析。
可视化操作体验
系统采用多种直观的可视化手段展示设备状态和操作结果。通过图标、鲜明的色彩以及流畅的动画效果,让用户一目了然地掌握设备当前状况。例如,灯具开启时图标呈现明亮状态,关闭时则显示为灰暗样式。
实验环境及资源准备
一、概述
嵌入式端设备需求:Infineon CY8CPROTO-062-4343W PSoC6 开发板(含 WiFi 模块)。板载PDM接口麦克风、KEY、LED、KitProg3 USB 调试器、USB 数据线;核心功能为语音采集、UDP 传输、设备控制。
云端部署内容:前端(Vue3+Element Plus,实现设备控制与状态展示)、后端(Python Flask,提供 API 与业务逻辑)、数据库(MySQL 8.0,存储语音命令历史);依赖阿里云 ECS、千问大模型 API(gummy-realtime-v1,语音识别服务)。
二、软硬件运行平台
硬件需求
用户端:普通个人电脑(Windows/macOS/Linux 均可),安装 Chrome/Firefox/Safari 浏览器;网络需满足下载 / 上传速度稳定在 1Mb/s(确保音频传输流畅)。
云服务器端:操作系统推荐 Linux(CentOS 8 / Ubuntu 22.04 LTS),CPU 为双处理器 2.0GHz 及以上,内存≥2GB,磁盘空间≥8GB,带宽≥1Mbps;项目运行期间需保持开机,确保嵌入式端与云端通信。
嵌入式端:Infineon CY8CPROTO-062-4343W PSoC6 开发板、USB-C to USB-A 数据线(供电 + 调试)。
软件需求
后端 IDE:PyCharm Community Edition 2024.1.1(Flask 代码开发与调试)
前端 IDE:IntelliJ IDEA 2024.1.2(Vue3 代码开发,搭配 Element Plus 插件)
嵌入式 IDE:ModusToolbox™ IDE 3.4(开发板代码开发、烧录与调试)
接口测试工具:Postman 10.24.0(测试后端 API 正确性)
软件需求表如下所示。

数据库
MySQL 8.0:关系型数据库,存储语音命令历史记录(含 id、命令文本、设备类型、执行结果、时间戳),支持分布式部署提升可用性。

数据库的ER图如图1所示,数据表如表2所示

Redis 6.2.6(可选):非关系型 key-value 数据库,缓存设备实时状态(如灯 / 空调开关、嵌入式端连接状态),减少MySQL 查询压力,提升前端响应速度。
关键数据结构如图2所示

三、云端实验资源
在开始实验之前,请先点击右侧屏幕的“进入实操”再进行后续操作

实验资源简介
进入实操前,请确保阿里云账号满足以下条件:
个人账号资源
使用您个人的云资源进行操作,资源归属于个人。
平台仅提供手册参考,不会对资源做任何操作。
确保已完成云工开物300元代金券领取。
领取权益及实验资源开通
第一步:本次实验需要您通过领取阿里云云工开物300元高校专属权益优惠券(若已领取请跳过)
重要实验产生的费用优先使用优惠券,优惠券使用完毕后需您自行承担。

第二步:领取学生专属300元优惠券后,点击进入【学生用券中心】
两种方式
方式一
方式二
实例规格
包年包月
按时收费
资源说明
本场景主要涉及以下云产品和服务:ECS
根据自己的需求选择包年包月 或 按量付费,两种方式均支持抵扣学生300元代金券。
购买步骤
找到【包年包月不焦虑】模块
选择【e实例(处理器与内存比1:1)(3个月)】
点击【立即购买】

找到【按量付费更灵活】模块
选择【e实例(处理器与内存比1:1)】
点击【立即购买】

第三步:开通大模型 API
在阿里云官网搜索阿里云百炼进入控制台,或点击进入阿里云百炼控制台,点击【应用开发】tab

若之前未登录开通过阿里云百炼请按以下步骤操作,若已开通过百炼服务请跳过此步
进入【应用开发】—【应用管理】,点击【立即登录】

阅读服务协议并点击【同意】

点击【密钥管理】→【创建API-Key】,选择“默认业务空间”,创建后保存 API-Key(用于后端 app.py 配置)


- 说明
本场景主要涉及阿里云 ECS、千问大模型 API(gummy-realtime-v1),预计资源消耗及费用如下:
ECS 服务器:
按量付费:仅在部署(1 小时)、调试(2 小时)、演示(1 小时)时开启,总时长 4 小时;2 核 2G 实例按量单价约 0.12 元 / 小时,总费用≈0.5 元;
包年包月:e实例 2 核 2G3 个月官网价246.43 元,可用 300 元优惠券抵扣,实际费用 0 元。
大模型 API:
新用户免费额度36000 秒,实验预计使用487 秒(约8 分钟),不产生额外费用。
超出免费额度后,单价 0.00015 元 / 秒,费用极低。
其他费用:
流量费用(ECS 按固定带宽 1Mbps,无额外收费)、OSS对象存储费用(无需使用,费用0)
如果您调整了资源规格、使用时长,或执行了本方案以外的操作,可能导致费用发生变化,请以控制台显示的实际价格为准。
该实验下资源消耗查看方式:
实验完成后,进入阿里云控制台→【费用与成本】→【账单详情】→【明细】,筛选 “账单月份” 和 “产品名称”(ECS / 人工智能平台 PAI),即可查看具体消耗与费用。

实验原理及步骤
前期需在本地 PC 搭建前端(Vue3)、后端(Flask)、数据库(MySQL)环境,完成嵌入式端与本地云端的联调(确保语音采集→识别→控制全流程通畅)后,再部署至阿里云 ECS。
(1)网络环境要求
网络配置要求:嵌入式设备和客户端必须在同一局域网内。
UDP 端口要求:服务器监听端口:57345(可配置);音频数据传输端口:动态分配。
HTTP端口:后端服务:5000;前端服务:默认 80。
通信协议:设备与服务器:UDP 协议;前端与服务器:HTTP协议。
(2)部署要求
嵌入式设备部署:设备需放置在 WiFi 信号覆盖范围内。
电源要求:Micro USB 接口连接开发板(用于程序烧录和通信),USB 接口用于供电。
服务器部署:部署在云服务器,需要固定 IP 地址或域名。
前端部署:部署在独立的云服务器上。
一、实验实现的技术路径
(1)预备知识
语音识别基础:了解语音信号数字化过程(采样、量化、编码),掌握 16kHz 采样率、双声道等参数对识别效果的影响
UDP 协议:理解 UDP 无连接、低延迟特点,掌握数据包打包(音频数据 + 时间戳)与解析逻辑,适配嵌入式端与云端实时通信(UDP 代码对应文件:udp_client.c)。
音频信号处理:了解均值滤波(降噪)、静音检测(剔除无效数据)、MFCC 特征提取(将音频转为模型可识别特征)的核心原理。
云端大模型调用:掌握阿里云 DashScope SDK 使用方法,理解 API 调用流程(音频上传→模型识别→结果返回),熟悉置信度阈值等参数配置(API 调用逻辑对应 app.py)。
Web 开发技术:了解 Vue3 组合式 API(前端交互,对应 Home.vue)、Flask RESTful API(后端接口,对应 app.py)、前后端跨域处理(Flask-CORS)。
(2)技术路线
系统采用三层架构如图1所示。

图2 系统架构图
根据架构图,系统整体分为感知终端层、云平台层和前端交互层,采用了多种关键技术,涵盖B/S(浏览器/服务器)、C/S(客户端/服务器)以及物联网终端。以下是详细说明:
1、系统实现采用的关键技术
感知终端层(嵌入式端)
嵌入式开发板(开发板核心) :负责音频采集、设备控制(如灯、空调等),并与WiFi模块协同工作,实现本地家电的智能控制。
WiFi通信模块(4343w):负责将采集到的音频数据通过UDP协议实时传输到云平台,实现低延迟、高效率的数据交换。
麦克风:用于采集用户语音指令,作为语音识别的原始数据来源。
云平台层
数据接收模块 :通过UDP协议接收来自终端的音频数据,保证数据的实时性和完整性。
语音识别模块:利用云端AI服务(如阿里云DashScope)进行高精度语音识别,将音频转为文本命令。
数据库模块:负责存储语音命令历史、设备状态等信息,实现数据的持久化和可追溯。
接口服务模块:提供RESTful API接口,支持前端通过HTTP协议访问和控制,实现前后端解耦
云端AI服务:云端语音识别准确率高,计算资源充足,便于后续扩展更多AI能力
前端交互层
Web前端(B/S架构):用户通过浏览器访问智能家居控制界面,进行设备状态查看、手动控制、历史查询等操作
界面操作与反馈:实时展示设备状态、语音识别结果和历史记录,支持中英文切换,提升用户体验
响应式Web前端 :适配PC和移动端,提升用户体验和系统普适性。
2、关键开发技术框架说明
前端开发
Vue.js:主流渐进式JavaScript框架,组件化开发,易于维护和扩展。
Element Plus:基于Vue的UI组件库,提升界面美观性和开发效率。
响应式设计:适配不同屏幕尺寸,支持移动端访问。
后端开发
Flask:轻量级Python Web框架,便于快速开发RESTful API。
Flask-CORS:解决前后端跨域问题。
PyMySQL:实现与MySQL数据库的高效交互。
多线程/队列:提升并发处理能力,保证音频处理和命令响应的实时性。
嵌入式开发
FreeRTOS:实时操作系统,支持多任务并发,提升系统稳定性。
UDP Socket编程:实现音频数据的实时传输和设备控制。
PSoC6/4343w WiFi模块:实现无线通信和本地设备控制。
PDM-PCM模块:负责采集双通道麦克风音频数据并转为PCM数据流。
LED:模拟灯、空调等家电开关状态。
KEY:用于输入音频指令前的背景噪声获取,按键按下时获取背景噪声,松开按键时获取音频命令。
大模型调用
阿里云DashScope语音识别API:高精度语音转文本,支持多语言识别。
系统通过B/S和C/S架构的有机结合,充分利用Web前端、云平台和嵌入式终端的各自优势,实现了高效、易用、可扩展的智能家居语音控制平台。
3、接口(模块接口、系统间接口)说明
系统模块间通信概述
本系统包含三个主要模块:嵌入式终端(PSoC6 设备),后端服务器(Python Flask 服务),前端应用(Vue.js 应用)
模块间数据交换详细说明
前端与后端通信(HTTP协议)
获取设备状态
请求方式:GET
端点:`/api/device/status`
响应格式:
json
{
"success": boolean,
"connected": boolean,
"address": "string",
"lastHeartbeat": number,
"lastHeartbeatTime": "string",
"uptime": number,
"lightStatus": boolean,
"acStatus": boolean,
"voiceStatus": {
"isListening": boolean,
"currentText": "string",
"confidence": number,
"volume": number,
"duration": number,
"startTime": number
}
}
手动控制设备
请求方式:POST
端点:`/api/device/control`
请求体格式:
json
{
"device": "string",// "light" 或 "ac"
"status": boolean // true表示开启,false表示关闭
}
响应格式:
json
{
"success": boolean,
"message": "string",
"lightStatus": boolean,
"acStatus": boolean,
"voiceStatus": object,
"connected": boolean
}
获取语音命令历史
请求方式:GET
端点:`/api/voice/history`
查询参数:limit (可选,默认 10)
响应格式:
json
{
"success": boolean,
"history": [
{
"id": number,
"command_text": "string",
"command_type": "string",
"device_type": "string",
"action": "string",
"success": boolean,
"created_at": "string"
}
]
}
后端与嵌入式设备通信(UDP 协议)
音频数据传输:
协议:UDP
端口:57345
数据格式:
采样率:16000Hz
通道数:2(单声道)
采样位数:16 位
数据包大小:≤ 225000 字节
结束标志:b'flag'
控制命令格式:
从服务器到设备的控制命令(1 字节):
0x00:关闭 LED
0x01:打开 LED
0x02:关闭空调
0x03:打开空调
异常处理
UDP 连接断开:
检测机制:心跳超时
处理方式:自动重连,前端显示连接状态
HTTP 请求失败:
处理方式:返回错误状态码和详细信息
错误格式:
json
{
"success": false,
"message": "错误描述",
"connected": boolean
}
二、硬件功能介绍
CY8CPROTO-062-4343W以英飞凌PSoC 6 系列微控制器为核心,具有512KB大小的SRAM,支撑数据处理需求。连接性上,它支持Micro-USB接口,既可用于编程、调试也可用于供电。双模无线模块使该开发平台具备Wi-Fi和低功耗蓝牙功能。对于音频处理,内置的PDM-PCM模块支持数字麦克风输入,适用于语音识别、音频录制等应用场景。
除此之外,该开发平台还支持FreeRTOS物联网操作系统,允许开发者创建多任务应用程序。

图3 CY8CPROTO-062-4343W开发平台
三、软件功能介绍
嵌入式端软件任务划分:根据功能要求和硬件组成,可以建立两个主要任务。分别为:UDP Client任务 和Audio任务。

任务功能描述:
UDP Client任务:处理网络连接,与UDP服务器通信,接收并执行控制命令(LED/AC开关)。
连接 WiFi
使用预设的 SSID:"Xiaomi 15"
密码:"123456789"
安全类型:WPA2-AES-PSK
最多尝试连接 10 次
初始化网络通信
初始化安全套接字
创建 UDP 客户端套接字
设置接收回调函数
处理接收到的控制命令
(b'0'): 关灯 - 直接关闭 LED
(b'1'): 开灯 - 闪烁 1 次后保持常亮
(b'2'): 关空调 - 闪烁 2 次后关闭
(b'3'): 开空调 - 闪烁 2 次后保持常亮
未知命令 - 闪烁 3 次后关闭
Audio任务:处理音频录制,发送音频数据到服务器,响应按钮操作。初始化音频系统、时钟系统、用户按钮、初始化 PDM/PCM 模块。
设置音频参数
采样率:16kHz
缓冲区大小:224000 字节(7秒录音)
抽取率:64
系统时钟:24.576MHz
录音和发送流程
等待用户按下按钮
按下按钮后开始录音
录音完成后,LED 指示灯亮起
将音频数据分块(每块1KB)发送到服务器
发送完成后发送结束标志("flag")
LED 指示灯熄灭,等待下一次录音
LED控制任务:执行LED开关和闪烁模式(1-3次闪烁)
LED 闪烁模式用于指示不同状态:
开灯:闪烁 1 次后保持常亮
关灯:直接熄灭
开空调:闪烁 2 次后保持常亮
关空调:闪烁 2 次后熄灭
错误/未知命令:闪烁 3 次后熄灭
云端软件系统逻辑总图如下所示

系统依据控制方式及功能实现的差异性,将功能划分为语音控制与界面交互控制两大模块层次。语音控制模块专注于语音指令的接收、识别与解析,实现对智能设备的语音操控;界面交互控制模块则侧重于通过图形化界面为用户提供更加直观、精确的控制体验。两大模块内部根据具体功能需求进一步细分子模块,层次清晰明确,便于功能的开发、测试与维护。

四、业务逻辑层
模型调用器
支持 “快速 / 精准” 模式切换,调用失败自动重试(最多 3 次),提示失败原因(如网络中断 / API 密钥错误);
实时展示调用状态(等待调用 / 调用中 / 完成),调用完成后自动触发命令解析。
命令解析器
中英文双语匹配(如 “Turn on the light”→“开灯”,“Turn off AC”→“关空调”);
有效性判断:无明确设备(如 “打开”)或动作(如 “空调”)判定为无效命令,前端提示 “请说完整指令(如‘开空调’)”
API 服务层
接口规范:采用 RESTful API V1.0,请求 / 响应格式统一为 JSON
关键端点:API 服务层接口详情如表3所示

数据存储层

五、本地PC端搭建云端ECS环境,用于前期调试
前端
创建vue3项目
安装相关依赖:
npm install
npm install element-plus @element-plus/icons-vue axios vue-router
完成页面设计,与后端接口对接,与后端的通信接口为:
设备控制:'http://localhost:5000/api/device/control'
状态查询:'http://localhost:5000/api/device/status'
语音历史:'http://localhost:5000/api/voice/history'
后端
使用 Flask 框架,完成以下接口设计:
设备状态查询接口 /api/device/status [GET]
提供设备的实时状态信息
返回信息:
连接状态:设备是否在线
设备地址:当前连接的设备IP和端口
最后心跳时间:判断设备活跃度
设备运行时间:系统稳定性监控
灯光状态:当前是否开启
空调状态:当前是否开启
语音识别状态:当前识别进度
设备状态查询接口/api/device/control [POST]
处理手动控制设备的请求
接收参数:
device: 设备类型(light/ac)
status: 目标状态(true/false)
执行流程:
验证设备连接状态
解析控制命令
转换为对应的二进制指令
通过UDP发送到设备
更新系统状态
返回执行结果
语音命令历史查询 /api/voice/history [GET]
提供历史语音命令记录
查询参数:
limit: 返回记录数量限制
数据库查询优化:
按时间倒序排列
限制返回数量
返回信息:
命令文本
命令类型
设备类型
执行动作
执行结果
时间戳
云端项目部署
服务器购买配置
点击【立即购买】后,默认大部分配置,修改镜像为【云市场镜像】——【1Panel Linux】,最下方保证关闭自动续费,然后立即购买。注意此时下方金额应该显示0元。

后面自行确认订单即可

连接云服务器
打开阿里云,【工作台】——【云服务器ECS】
控制台连接:在 ECS 实例列表点击 “远程连接”→选择 “Workbench 远程连接”,输入用户名 root 和密码(后续重置),点击 “登录”;
XShell 连接(推荐):
打开 XShell→新建会话,主机填 ECS 公网 IP,端口 22,协议 SSH;
点击 “连接”,输入用户名 root,再输入密码,登录后进入 Linux 命令行。
重置密码
在 ECS 实例列表点击实例右侧 “更多”→“密码 / 密钥”→“重置实例密码”;
选择 “在线重置密码”(无需重启),输入新密码(如 “SmartHome@2025”,含大小写 / 数字 / 特殊符号),确认后点击 “修改”;
重新连接时使用新密码登录。


远程连接
点击远程连接按钮,使用刚刚重置的密码,立即登入。

也可以使用远程连接工具,例如XShell进行连接。我们后面的示例采用XShell进行连接并部署。
配置Conda中的Python环境
安装 Conda:
下载:wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.7.4-Linux-x86_64.sh;
安装:bash Miniconda3-py310_23.7.4-Linux-x86_64.sh,按提示输入 “yes” 并默认安装路径;
激活:source ~/.bashrc(命令行前显示 “(base)” 表示成功)
创建并激活 Python 环境:
创建:conda create --name smart-home python=3.10(按提示输入 “y”);
激活:conda activate smart-home(命令行前显示 “(smart-home)”)
安装依赖:
执行pip install flask==3.0.0 pymysql==1.1.1 dashscope==1.14.0 flask-cors==4.0.0,安装后端核心依赖(对应 app.py 需求)
配置数据库:
进入宝塔面板→【数据库】→【添加数据库】;
数据库名:smart_home,用户名:smart_home,密码:123456(与 app.py 中 MySQL 配置一致);
点击 “确定”,完成数据库创建。


配置 Python 项目
进入宝塔面板→【Python 项目】→【添加 Python 项目】;
项目名称:smart-home,Python 版本:3.10,项目路径:/www/wwwroot/smart-home/backend;
启动命令:python app.py,点击 “保存配置”。

分别启动前后端
部署后端
将本地后端代码(含 app.py、config.yaml)上传至 ECS 项目路径

编辑 config.yaml,填入阿里云大模型 API-Key;
进入后端目录,执行python app.py,后端在点击链接启动
部署前端
本地前端项目执行npm run build,生成 dist 文件夹

将 dist 文件夹上传至 ECS

进入宝塔面板→【HTML 项目】→【添加 HTML 项目】

绑定 IP:ECS 公网 IP,根目录:/www/wwwroot/smart-home/frontend/dist,点击 “确定”。
成功验证:打开浏览器输入 ECS 公网 IP,显示智能家居控制界面,即部署成功。

实验资源释放
无论购买的是包年包月还是按量付费方式,都需要手动释放资源。
1.进入阿里云控制台→【云服务器 ECS】→【实例】;
2.找到实验所用 ECS 实例,点击 “停止” 按钮(按量付费实例停止后不再计费,包年包月实例停止后仍按周期计费);
3.如需彻底释放按量付费实例,停止后点击 “更多”→“释放实例”,按提示确认(释放后数据不可恢复);
4.大模型 API 无需额外释放,免费额度用尽后自动停止服务。
资源释放后,可进入【费用与成本】→【账单详情】,确认无后续费用产生。
停止服务器,避免流量超支产生费用:

不再需要示例时请删除示例:
点击 云服务器ECS—实例—复制实例ID,点击【删除】

在弹窗粘贴实例ID,并进行勾选,点击【确定删除】

完成安全验证后,即可成功释放实例。

检查是否成功释放资源

关闭实验
在完成实验后,点击 结束实操

点击 取消 回到实验页面,点击 确定 跳转实验评分

请为本次实验评分,并给出您的建议,点击 确认,结束本次实验


































