【花雕学编程】ESP32 DeepSeek 之使用语音识别和 LED 指示响应

在这里插入图片描述
《Arduino 手册(思路与案例)》栏目介绍:
在电子制作与智能控制的应用领域,本栏目涵盖了丰富的内容,包括但不限于以下主题:Arduino BLDC、Arduino CNC、Arduino E-Ink、Arduino ESP32 SPP、Arduino FreeRTOS、Arduino FOC、Arduino GRBL、Arduino HTTP、Arduino HUB75、Arduino IoT Cloud、Arduino JSON、Arduino LCD、Arduino OLED、Arduino LVGL、Arduino PID、Arduino TFT,以及Arduino智能家居、智慧交通、月球基地、智慧校园和智慧农业等多个方面与领域。不仅探讨了这些技术的基础知识和应用领域,还提供了众多具体的参考案例,帮助读者更好地理解和运用Arduino平台进行创新项目。目前,本栏目已有近4000篇相关博客,旨在为广大电子爱好者和开发者提供全面的学习资源与实践指导。通过这些丰富的案例和思路,读者可以获取灵感,推动自己的创作与开发进程。
https://blog.csdn.net/weixin_41659040/category_12422453.html

在这里插入图片描述
ESP32 DeepSeek之使用语音识别和LED指示响应

一、主要特点
语音识别功能:

系统集成语音识别模块(如Google Assistant或其他开源语音识别库),用户可以通过语音指令控制LED的状态,实现无接触的操作方式。
即时反馈机制:

LED灯作为反馈装置,可以根据语音指令的执行结果显示不同的状态(如开、关、故障等),提供直观的用户体验。
多种指令支持:

系统可以预设多种语音指令,用户可以通过简单的语音命令控制LED的亮度、颜色、闪烁模式等,增强了操作的灵活性。
易于集成与扩展:

ESP32作为一个功能强大的微控制器,可以与其他传感器和模块集成,扩展系统的功能,如环境监测、智能家居控制等。
低功耗设计:

ESP32具备低功耗特性,适合长时间运行的应用场景,确保系统在使用语音识别时不会过度消耗电源。

二、应用场景
智能家居控制:

用户可以通过语音命令控制家庭中的LED灯光,实现智能化照明,提升居住环境的舒适度和便利性。
辅助设备:

为行动不便的人士提供便利,用户可以通过语音控制LED灯的开关,提高生活质量。
教育与实验项目:

在教育领域,作为物联网(IoT)和语音识别技术的实验项目,帮助学生理解声音控制与自动化的基本原理。
商业展示:

在商店或展览中,使用语音控制LED指示灯展示产品信息或吸引顾客,提高互动性和客户体验。
智能安防系统:

通过语音指令控制LED指示灯的状态,作为安防系统的一部分,提供可视化的警报和状态指示。

三、注意事项
语音识别准确性:

语音识别质量受环境噪声和语音清晰度影响,需优化识别算法,确保在不同环境下均能有效识别用户指令。
数据隐私与安全:

语音数据可能涉及用户隐私,需采取适当的安全措施,确保数据处理和存储的安全性。
系统稳定性:

确保语音识别模块和LED指示灯的稳定性,避免因硬件故障导致的功能失效。
用户体验设计:

界面和操作流程应简洁明了,确保用户能够方便地理解和使用语音控制功能,降低学习成本。
故障处理与反馈机制:

设计有效的故障处理机制,确保在出现识别错误或LED故障时,能够及时向用户反馈并采取相应措施。

在这里插入图片描述

1、基于MicroPython的语音关键词识别控制LED

from machine import Pin, I2S
import time
 
# 初始化LED(GPIO2)
led = Pin(2, Pin.OUT)
 
# 模拟语音关键词检测(实际需替换为I2S+MFCC+TensorFlow Lite Micro)
def detect_keyword():
    # 简化版:通过阈值模拟关键词检测(实际需FFT分析)
    return True  # 假设检测到“开灯”
 
# 主循环
while True:
    if detect_keyword():
        led.value(1)  # 开灯
        time.sleep(0.5)
        led.value(0)  # 关闭LED模拟反馈
        print("LED已开启")
    else:
        led.value(0)  # 默认关灯
    time.sleep(0.1)

要点解读:

硬件适配性:ESP32-WROOM模块需外接麦克风(如INMP441),或使用内置麦克风(需配置I2S接口)。
语音处理简化:示例中阈值法仅用于演示,实际需通过MFCC提取特征+轻量级模型(如TensorFlow Lite Micro)实现关键词识别。
实时反馈机制:LED闪烁作为系统响应的直观反馈,避免用户因无感知而重复操作。
低功耗优化:在detect_keyword()中可添加休眠模式,减少麦克风持续采样的功耗。
扩展性:可通过MQTT协议将控制指令同步至手机APP,实现远程监控。

2、ESP32+DeepSeek云端AI情境感知控制LED

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
#include <DHT.h>
 
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
 
const char* ssid = "YOUR_WIFI";
const char* api_key = "YOUR_DEEPSEEK_KEY";
const int led_pin = 2;  // PWM控制LED亮度
 
void setup() {
    Serial.begin(115200);
    dht.begin();
    WiFi.begin(ssid, "YOUR_PASSWORD");
    while (WiFi.status() != WL_CONNECTED) delay(1000);
}
 
void loop() {
    float temp = dht.readTemperature();
    float hum = dht.readHumidity();
    int light_level = analogRead(34);  // 光敏电阻接入GPIO34
 
    // 构建JSON请求体
    StaticJsonDocument<200> doc;
    doc["temperature"] = temp;
    doc["humidity"] = hum;
    doc["light"] = light_level;
    String request;
    serializeJson(doc, request);
 
    // 调用DeepSeek API
    HTTPClient http;
    http.begin("https://api.deepseek.com/v1/context");
    http.addHeader("Content-Type", "application/json");
    http.addHeader("Authorization", api_key);
    int httpCode = http.POST(request);
 
    if (httpCode == 200) {
        String payload = http.getString();
        DynamicJsonDocument response(512);
        deserializeJson(response, payload);
        int brightness = response["brightness"];  // 0-255
        ledcWrite(0, brightness);  // PWM输出控制亮度
    }
    http.end();
    delay(5000);
}

要点解读:

多模态数据融合:结合温度、湿度、光照三维度数据,提升情境判断准确性(如区分“白天阅读”与“夜间阅读”)。
边缘-云端协同:ESP32仅负责数据采集与简单处理,复杂推理交由DeepSeek云端完成,平衡计算资源。
动态参数调整:通过PWM输出实现LED无级调光,适应不同场景需求(如200lux阅读模式 vs 50lux睡眠模式)。
安全机制:API请求需添加Authorization头,防止未授权访问。
异常处理:需添加传感器数据校验(如温湿度超出合理范围时触发报警)。

3、语音+DeepSeek多设备联动控制(含LED状态指示)

#include <WiFi.h>
#include <HTTPClient.h>
#include <ArduinoJson.h>
 
const char* ssid = "YOUR_WIFI";
const int led_r = 12, led_g = 14, led_b = 27;  // RGB LED控制引脚
 
void set_led_color(int r, int g, int b) {
    analogWrite(led_r, r);
    analogWrite(led_g, g);
    analogWrite(led_b, b);
}
 
void execute_command(String command) {
    HTTPClient http;
    http.begin("https://api.deepseek.com/v1/parse");
    http.addHeader("Content-Type", "application/json");
    http.addHeader("Authorization", "YOUR_API_KEY");
 
    StaticJsonDocument<100> doc;
    doc["command"] = command;
    String request;
    serializeJson(doc, request);
 
    int httpCode = http.POST(request);
    if (httpCode == 200) {
        String payload = http.getString();
        DynamicJsonDocument response(200);
        deserializeJson(response, payload);
        String action = response["action"];
 
        if (action == "turn_on_light") {
            set_led_color(0, 255, 0);  // 绿色表示成功
        } else if (action == "adjust_temperature") {
            set_led_color(255, 255, 0);  // 黄色表示执行中
        }
    } else {
        set_led_color(255, 0, 0);  // 红色表示错误
    }
    http.end();
}
 
void setup() {
    Serial.begin(115200);
    pinMode(led_r, OUTPUT);
    pinMode(led_g, OUTPUT);
    pinMode(led_b, OUTPUT);
    WiFi.begin(ssid, "YOUR_PASSWORD");
    while (WiFi.status() != WL_CONNECTED) delay(1000);
}
 
void loop() {
    if (Serial.available()) {
        String command = Serial.readStringUntil('\n');
        set_led_color(255, 255, 0);  // 黄色表示处理中
        execute_command(command);
    }
}

要点解读:
状态可视化:RGB LED通过颜色变化直观展示系统状态,提升用户体验。
设备兼容性:通过DeepSeek解析语音指令为标准化动作(如turn_on_light),便于扩展支持不同品牌设备。
低延迟设计:ESP32本地处理LED颜色切换,云端仅负责复杂指令解析,响应时间<500ms。
错误恢复机制:若API调用失败,LED显示红色并重试3次,避免系统卡死。
语音输入优化:实际需集成语音识别库(如Snowboy),将麦克风音频流转换为文本指令。

在这里插入图片描述

4、基本语音控制LED开关

#include <WiFi.h>
#include "DeepSeek.h"

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

DeepSeek deepSeek;
const int ledPin = 2; // LED连接到引脚2

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("连接中...");
  }
  Serial.println("已连接 WiFi");
  pinMode(ledPin, OUTPUT);
  deepSeek.begin();
}

void loop() {
  String command = deepSeek.listen(); // 监听语音指令

  if (command.length() > 0) {
    Serial.println("接收到命令: " + command);
    if (command == "打开LED") {
      digitalWrite(ledPin, HIGH); // 开启LED
      Serial.println("LED已开启");
    } else if (command == "关闭LED") {
      digitalWrite(ledPin, LOW); // 关闭LED
      Serial.println("LED已关闭");
    }
  }

  delay(1000); // 每秒检测一次
}
要点解读:

Wi-Fi连接:ESP32连接到Wi-Fi网络,确保能够进行语音识别和命令处理。
语音识别:使用DeepSeek进行语音指令的识别,允许用户通过语音控制LED的开关。
指令执行:根据语音指令执行相应的LED开关操作,展示了简单的控制逻辑。
串口输出:通过串口监控接收到的命令和LED状态,便于调试和使用。
扩展性:可以增加更多语音指令,控制多个LED或其他设备,增强系统功能。
案例二:语音控制LED亮度调节
cpp

复制
#include <WiFi.h>
#include "DeepSeek.h"

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

DeepSeek deepSeek;
const int ledPin = 2; // LED连接到引脚2
int brightness = 0; // 初始亮度

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("连接中...");
  }
  Serial.println("已连接 WiFi");
  pinMode(ledPin, OUTPUT);
  deepSeek.begin();
}

void loop() {
  String command = deepSeek.listen(); // 监听语音指令

  if (command.length() > 0) {
    Serial.println("接收到命令: " + command);
    if (command == "增加亮度") {
      brightness = min(brightness + 50, 255); // 增加亮度
      analogWrite(ledPin, brightness); // 调整LED亮度
      Serial.printf("LED亮度增加到: %d\n", brightness);
    } else if (command == "减少亮度") {
      brightness = max(brightness - 50, 0); // 减少亮度
      analogWrite(ledPin, brightness); // 调整LED亮度
      Serial.printf("LED亮度减少到: %d\n", brightness);
    }
  }

  delay(1000); // 每秒检测一次
}

要点解读:

LED亮度调节:通过语音指令来调节LED的亮度,实现更加灵活的控制。
PWM控制:使用PWM(脉宽调制)技术调整LED亮度,提供平滑的亮度变化效果。
语音指令:用户可以通过“增加亮度”和“减少亮度”指令来控制LED,增强系统交互性。
实时反馈:串口输出当前LED亮度,便于用户了解系统状态。
扩展性:可以增加更多亮度调节的细节指令,或结合其他传感器实现智能调控。

6、语音控制LED颜色变化(RGB LED)

#include <WiFi.h>
#include "DeepSeek.h"

const char* ssid = "YOUR_SSID";
const char* password = "YOUR_PASSWORD";

DeepSeek deepSeek;
const int redPin = 2;   // 红色引脚
const int greenPin = 4; // 绿色引脚
const int bluePin = 5;  // 蓝色引脚

void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.println("连接中...");
  }
  Serial.println("已连接 WiFi");
  pinMode(redPin, OUTPUT);
  pinMode(greenPin, OUTPUT);
  pinMode(bluePin, OUTPUT);
  deepSeek.begin();
}

void loop() {
  String command = deepSeek.listen(); // 监听语音指令

  if (command.length() > 0) {
    Serial.println("接收到命令: " + command);
    if (command == "红色") {
      setColor(255, 0, 0); // 设置为红色
    } else if (command == "绿色") {
      setColor(0, 255, 0); // 设置为绿色
    } else if (command == "蓝色") {
      setColor(0, 0, 255); // 设置为蓝色
    } else if (command == "关闭") {
      setColor(0, 0, 0); // 关闭LED
    }
  }

  delay(1000); // 每秒检测一次
}

void setColor(int red, int green, int blue) {
  analogWrite(redPin, red);
  analogWrite(greenPin, green);
  analogWrite(bluePin, blue);
  Serial.printf("LED颜色设置为: R=%d G=%d B=%d\n", red, green, blue);
}

要点解读:

RGB LED控制:通过语音指令实现RGB LED的颜色变化,提供丰富的视觉效果。
颜色设置:用户可以通过语音命令选择颜色,实现直观的交互。
PWM控制:结合PWM技术,平滑控制RGB LED的颜色变化,提供更好的用户体验。
实时监控:串口输出当前LED颜色设置,便于用户确认操作。
扩展性:可以增加更多颜色或颜色混合的语音指令,增强系统的灵活性和趣味性。

注意,以上案例只是为了拓展思路,仅供参考。它们可能有错误、不适用或者无法编译。您的硬件平台、使用场景和Arduino版本可能影响使用方法的选择。实际编程时,您要根据自己的硬件配置、使用场景和具体需求进行调整,并多次实际测试。您还要正确连接硬件,了解所用传感器和设备的规范和特性。涉及硬件操作的代码,您要在使用前确认引脚和电平等参数的正确性和安全性。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

驴友花雕

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值