首页 > 分享 > MeowBot:ESP32 语音控制宠物猫 DIY 教程——玩转语音识别与 MQTT 智能家居控制 (附代码解析)

MeowBot:ESP32 语音控制宠物猫 DIY 教程——玩转语音识别与 MQTT 智能家居控制 (附代码解析)

摘要: 本文将手把手教你打造一只名为 MeowBot 的智能宠物猫!它不仅可以通过舵机灵动地打招呼,还能听懂你的语音指令,帮你控制智能家居设备。让我们一起开启这段充满乐趣的 DIY 之旅吧!

关键词: ESP32、语音识别、MQTT、智能家居、宠物机器人

一、 引言

厌倦了冰冷的智能音箱?渴望一只既能陪伴你,又能帮你控制家居的萌宠?今天就来教你 DIY 一只基于 ESP32 的智能宠物猫 MeowBot!它能够识别你的语音指令,并通过 MQTT 协议控制智能家居设备,为你的生活增添乐趣和科技感。

二、 MeowBot 功能介绍

MeowBot 具备以下功能:

打招呼: 当你靠近 MeowBot 时,它会通过舵机控制头部和尾巴摆动,并发出喵叫声,萌化你的心。语音控制: MeowBot 能听懂你的指令,例如“小猫,帮我打开灯”,然后通过 MQTT 协议发送控制指令给智能家居设备。扩展功能: MeowBot 还可以根据你的创意扩展其他功能,例如播放音乐、语音播报天气等。 三、 MeowBot 系统设计

MeowBot 的系统架构图如下所示:

3.1 硬件部分

MeowBot 的硬件清单如下:

ESP32 开发板: 作为 MeowBot 的大脑,负责接收传感器数据、处理语音指令、控制舵机和发送 MQTT 消息。LD3320 语音识别模块: 用于识别用户的语音指令,将其转换为文本信息。MG995 舵机 (x2): 用于控制 MeowBot 的头部和尾巴动作,使其更加生动形象。HC-SR501 人体红外传感器: 用于检测是否有人靠近 MeowBot,触发打招呼动作。其他模块 (可选): OLED 显示屏、扬声器、LED 灯等,可以根据需要添加。 3.2 软件部分

MeowBot 的软件部分主要包括:

Arduino IDE: 用于编写和上传 ESP32 代码。LD3320 库: 用于驱动 LD3320 语音识别模块。PubSubClient 库: 用于 ESP32 连接 MQTT 服务器。Servo 库: 用于控制舵机的转动角度。 四、 MeowBot 制作步骤 4.1 硬件连接

按照以下电路图连接各个硬件模块:

注意: 具体的引脚连接需要根据你使用的硬件模块进行调整。

4.2 软件编写 4.2.1 安装库文件

在 Arduino IDE 中,依次点击“项目”->“加载库”->“管理库”,搜索并安装以下库文件:

LD3320PubSubClientServo 4.2.2 代码示例

#include <LD3320.h>

#include <WiFi.h>

#include <PubSubClient.h>

#include <Servo.h>

const char* ssid = "你的WiFi名称";

const char* password = "你的WiFi密码";

const char* mqtt_server = "你的MQTT服务器地址";

const int mqtt_port = 1883;

const char* mqtt_user = "你的MQTT用户名";

const char* mqtt_password = "你的MQTT密码";

const int headServoPin = 12;

const int tailServoPin = 14;

const int pirSensorPin = 27;

const char* openLightCommand = "小猫,帮我打开灯";

const char* closeLightCommand = "小猫,帮我关灯";

LD3320 voiceRecognition;

WiFiClient espClient;

PubSubClient mqttClient(espClient);

Servo headServo;

Servo tailServo;

const char* lightTopic = "home/light";

void setup() {

Serial.begin(115200);

voiceRecognition.init();

voiceRecognition.setInterrupt(false);

headServo.attach(headServoPin);

tailServo.attach(tailServoPin);

pinMode(pirSensorPin, INPUT);

WiFi.begin(ssid, password);

while (WiFi.status() != WL_CONNECTED) {

delay(1000);

Serial.println("正在连接WiFi...");

}

Serial.println("WiFi连接成功!");

mqttClient.setServer(mqtt_server, mqtt_port);

mqttClient.setCallback(mqttCallback);

while (!mqttClient.connected()) {

if (mqttClient.connect("MeowBot", mqtt_user, mqtt_password)) {

Serial.println("MQTT连接成功!");

} else {

Serial.print("MQTT连接失败,错误码:");

Serial.println(mqttClient.state());

delay(2000);

}

}

}

void loop() {

mqttClient.loop();

if (digitalRead(pirSensorPin) == HIGH) {

greet();

}

if (voiceRecognition.available()) {

String command = voiceRecognition.readVoice();

Serial.print("识别到的指令:");

Serial.println(command);

handleCommand(command);

}

}

void greet() {

for (int i = 0; i < 3; i++) {

headServo.write(60);

tailServo.write(120);

delay(500);

headServo.write(120);

tailServo.write(60);

delay(500);

}

}

void handleCommand(String command) {

if (command == openLightCommand) {

mqttClient.publish(lightTopic, "on");

Serial.println("已发送打开灯的指令");

} else if (command == closeLightCommand) {

mqttClient.publish(lightTopic, "off");

Serial.println("已发送关闭灯的指令");

} else {

Serial.println("未识别到的指令");

}

}

void mqttCallback(char* topic, byte* payload, unsigned int length) {

}

4.3 代码解析

头文件: 代码开头的 #include 部分引入了程序所需库文件的头文件。

<LD3320.h>: LD3320 语音识别模块库,用于控制和读取 LD3320。<WiFi.h>: ESP32 WiFi 库,用于连接 WiFi 网络。<PubSubClient.h>: MQTT 客户端库,用于 ESP32 与 MQTT 服务器进行通信。<Servo.h>: 舵机控制库,用于控制 MeowBot 的头部和尾巴舵机。

WiFi 和 MQTT 设置:

ssid 和 password : 存储你的 WiFi 网络名称和密码,确保 MeowBot 能够连接到你的家庭网络。mqtt_server, mqtt_port, mqtt_user, mqtt_password: MQTT 服务器的相关信息,包括地址、端口号、用户名和密码。你需要设置好自己的 MQTT 服务器,并将这些信息填写到代码中,以便 MeowBot 与服务器进行通信。

定义引脚:

headServoPin, tailServoPin, pirSensorPin: 定义了头部舵机、尾巴舵机和人体红外传感器分别连接到 ESP32 开发板的哪些引脚。你需要根据实际连接情况修改这些引脚号。

定义语音指令:

openLightCommand, closeLightCommand: 定义了 MeowBot 能够识别的语音指令,例如 "小猫,帮我打开灯" 和 "小猫,帮我关灯"。 你可以根据自己的喜好修改这些指令,甚至添加更多指令来控制不同的智能家居设备。

创建对象:

voiceRecognition: 创建 LD3320 对象,用于控制 LD3320 语音识别模块。espClient: 创建 WiFiClient 对象,用于 ESP32 连接到 WiFi 网络。mqttClient: 创建 PubSubClient 对象,用于 MQTT 通信,需要传入 WiFiClient 对象作为参数。headServo, tailServo: 创建 Servo 对象,分别控制 MeowBot 的头部和尾巴舵机。

MQTT 主题:

lightTopic: 定义了控制灯光状态的 MQTT 主题,例如 "home/light"。 你可以根据实际控制的设备修改主题名称。

初始化函数 setup():

Serial.begin(115200): 初始化串口通信,用于调试输出信息。voiceRecognition.init(): 初始化 LD3320 语音识别模块。voiceRecognition.setInterrupt(false): 设置语音识别模块为非中断模式,即程序会一直等待识别结果,不会被其他任务打断。headServo.attach(headServoPin): 将头部舵机对象与对应的引脚关联起来。tailServo.attach(tailServoPin): 将尾巴舵机对象与对应的引脚关联起来。pinMode(pirSensorPin, INPUT): 将人体红外传感器引脚设置为输入模式。WiFi.begin(ssid, password): 连接 WiFi 网络。mqttClient.setServer(mqtt_server, mqtt_port): 设置 MQTT 服务器地址和端口号。mqttClient.setCallback(mqttCallback): 设置 MQTT 消息回调函数,当收到订阅主题的消息时,会调用该函数进行处理。mqttClient.connect("MeowBot", mqtt_user, mqtt_password): 连接 MQTT 服务器。

主循环函数 loop():

mqttClient.loop(): 处理 MQTT 连接状态,保持与服务器的连接。digitalRead(pirSensorPin) == HIGH: 检测人体红外传感器是否检测到有人靠近。greet(): 如果检测到有人靠近,则调用 greet() 函数让 MeowBot 打招呼。voiceRecognition.available(): 检查语音识别模块是否识别到语音指令。voiceRecognition.readVoice(): 读取识别到的语音指令。handleCommand(command): 调用 handleCommand() 函数处理识别到的语音指令。

打招呼函数 greet():

通过控制头部和尾巴舵机的角度,模拟 MeowBot 打招呼的动作。

处理语音指令函数 handleCommand():

该函数接收一个字符串类型的参数 command,表示识别到的语音指令。首先,使用 if (command == openLightCommand) 判断指令是否为打开灯的指令。 如果是,则调用 mqttClient.publish(lightTopic, "on") 向 MQTT 服务器发送打开灯的指令。lightTopic 是预先定义的控制灯光状态的 MQTT 主题,"on" 表示打开灯。最后,通过串口打印 "已发送打开灯的指令",方便调试。接着,使用 else if (command == closeLightCommand) 判断指令是否为关闭灯的指令。 如果是,则调用 mqttClient.publish(lightTopic, "off") 向 MQTT 服务器发送关闭灯的指令。"off" 表示关闭灯。最后,通过串口打印 "已发送关闭灯的指令",方便调试。最后,如果指令既不是打开灯也不是关闭灯,则进入 else 分支,表示未识别到有效指令。 此时,程序会通过串口打印 "未识别到的指令",提示用户重新输入指令。

MQTT 回调函数 mqttCallback():

该函数在 ESP32 从订阅的 MQTT 主题接收到消息时被调用。你可以根据需要编写该函数,例如,当接收到控制灯光状态的反馈消息时,可以通过串口打印出来,或者控制 LED 灯指示灯状态等。

总结:

MeowBot 的代码清晰易懂,主要实现了语音识别、舵机控制和 MQTT 通信功能。你可以根据自己的需求修改代码,例如添加更多语音指令、控制其他智能家居设备,甚至设计更复杂的动作和交互逻辑,打造独一无二的智能宠物猫。

相关知识

MeowBot:ESP32 语音控制宠物猫 DIY 教程——玩转语音识别与 MQTT 智能家居控制 (附代码解析)
语音情感识别调研
天猫精灵 喵控智能语音管家
宠物语音识别软件
宠物中心
一种利用宠物语音信号识别情绪的方法及系统与流程
AI智能语音宠物语言识别APP下载,AI智能语音宠物语言识别APP v1.0
宠物声音识别与理解研究.pptx
天猫精灵智能家居的性价比如何?
一种利用宠物语音信号识别情绪的方法及系统.pdf

网址: MeowBot:ESP32 语音控制宠物猫 DIY 教程——玩转语音识别与 MQTT 智能家居控制 (附代码解析) https://m.mcbbbk.com/newsview154920.html

所属分类:萌宠日常
上一篇: 半夜狗狂叫 扰民问题怎解决
下一篇: [抛砖引玉] 分享几个宠物控制宏