2.3.2 语音控制开灯#
2.3.2.1 简介#
使用小智语音模块接收到的语音指令控制UNO板连接的LED灯,我们可以将LED灯设置成卧室,厨房,阳台等。用户只需说出“打开客厅灯”或“关闭客厅灯”等指令,系统便能快速响应,实现精准的本地化控制。该方案不仅提供了便捷的交互体验,也为后续集成更多智能设备(如风扇、窗户)奠定了坚实基础,是迈向全屋智能的低成本入门实践。
2.3.2.2 控制指令表#
命令码 |
命令词 |
命令回复 |
|---|---|---|
3 |
开白灯,开灯,打开客厅灯 |
已打开 |
4 |
关白灯,关灯,关闭客厅灯 |
已关闭 |
2.3.2.3 接线图#

2.3.2.4 代码#
// 引入SoftwareSerial库,用于创建软串口
#include <SoftwareSerial.h>
// 创建软串口对象:RX引脚为A5,TX引脚为A4
// 用于连接语音识别模块
SoftwareSerial mySerial(A5, A4);
// 定义LED连接的引脚号(数字引脚3)
int ledPin = 3;
// 定义变量用于存储从语音模块接收到的控制码
volatile int Voice_Control = 0; // 初始化为0,确保首次判断时不触发任何指令
void setup() {
// 初始化硬件串口,用于调试输出,波特率9600
Serial.begin(9600);
// 初始化软串口,用于连接语音模块,波特率9600
mySerial.begin(9600);
// 将LED引脚设置为输出模式
pinMode(ledPin, OUTPUT);
}
void loop() {
// 检查软串口是否有来自语音模块的数据可读
if (mySerial.available()) {
// 从软串口读取一个字节的数据
Voice_Control = mySerial.read();
// 将接收到的数据通过硬件串口输出到串口监视器,便于调试
Serial.println(Voice_Control);
}
// 根据接收到的指令值执行相应操作
if (Voice_Control == 3) {
// 当接收到值3时,点亮LED(高电平)
digitalWrite(ledPin, HIGH);
} else if (Voice_Control == 4) {
// 当接收到值4时,熄灭LED(低电平)
digitalWrite(ledPin, LOW);
}
// 清除指令,避免重复执行
Voice_Control = 0;
}
2.3.2.5 代码说明#
① 导入模拟串口库文件;创建模拟串口对象并设置模拟串口引脚为:RX:A5,TX:A4 ;定义LED控制引脚为D3 ;创建一个int类型变量名称为Voice_Control用于存放语音模块发送过来的控制指令
// 引入SoftwareSerial库,用于创建软串口
#include <SoftwareSerial.h>
// 创建软串口对象:RX引脚为A5,TX引脚为A4
// 用于连接语音识别模块
SoftwareSerial mySerial(A5, A4);
// 定义LED连接的引脚号(数字引脚3)
int ledPin = 3;
// 定义变量用于存储从语音模块接收到的控制码
volatile int Voice_Control = 0; // 初始化为0,确保首次判断时不触发任何指令
② 设置串口波特率为9600 ; 设置模拟串口波特率为9600 ;将LED控制引脚设置为输出模式
// 初始化硬件串口,用于调试输出,波特率9600
Serial.begin(9600);
// 初始化软串口,用于连接语音模块,波特率9600
mySerial.begin(9600);
// 将LED引脚设置为输出模式
pinMode(ledPin, OUTPUT);
③ 使用if判断模拟串口中是否有数据发送过来 ;如果有数据发送过来就读取数据并将数据赋值给变量Voice_Control ;使用串口换行打印变量Voice_Control的值(只能使用串口打印模拟串口不行)方便观察接收到的指令值
// 检查软串口是否有来自语音模块的数据可读
if (mySerial.available()) {
// 从软串口读取一个字节的数据
Voice_Control = mySerial.read();
// 将接收到的数据通过硬件串口输出到串口监视器,便于调试
Serial.println(Voice_Control);
}
③ 对变量Voice_Control进行判断(从控制指令表中可知指令码)我想要语音喊开灯与关灯控制led灯的亮灭,对照控制指令表,开灯的指令码为:3,关灯的指令码为:4,所以我们就使用判断模块进行判断如果变量Voice_Control等于3则控制led灯亮,否则如果Voice_Control等于4则led灯熄灭 ; 最后清除变量Voice_Control的值,避免重复执行。
// 根据接收到的指令值执行相应操作
if (Voice_Control == 3) {
// 当接收到值3时,点亮LED(高电平)
digitalWrite(ledPin, HIGH);
} else if (Voice_Control == 4) {
// 当接收到值4时,熄灭LED(低电平)
digitalWrite(ledPin, LOW);
}
// 清除指令,避免重复执行
Voice_Control = 0;
2.3.2.6 代码结果#
上传代码成功后,使用唤醒词“小智小智”唤醒小智语音模块,他会回答你“我在”然后你就可以使用命令词进行控制它了,如当我们教程是开灯教程,我们就可以这样.
开灯示例: 你:“小智小智” ,小智:“我在”,你:“开灯” 或 “开白灯” 或 “打开客厅灯”,小智:“已打开”
关灯示例: 你:“小智小智” ,小智:“我在”,你:“关灯” 或 “关白灯” 或 “关闭客厅灯”,小智:“已关闭”