2. 语音控制智能灯

任务目标

本案例实现一个离线语音控制智能灯的最小可复现系统:使用SU-03T离线语音识别模块识别“小智小智”唤醒词及“开灯”“关灯”“调亮”“调暗”命令词,通过串口将识别结果发送给主控(以ESP32-C3为例),主控解析指令后控制LED灯开关与PWM亮度调节。系统不依赖云端,上电即可本地运行。

硬件与依赖

  • SU-03T语音识别模块(固件已训练好唤醒词与命令词,通过UART输出识别结果)
  • ESP32-C3开发板(或其他支持Arduino的ESP32系列)
  • LED灯珠(串联220Ω限流电阻,接GPIO2)
  • Arduino IDE(安装esp32开发板支持包,版本2.x)

SU-03T固件配置要点

在智能公元/AI语音平台创建产品并完成以下配置后编译烧录至SU-03T模块:

  • 唤醒词:小智小智
  • 命令词:开灯、关灯、调亮、调暗
  • 串口设置:波特率9600,引脚TX接ESP32-C3的GPIO4(RX)
  • 指令返回格式:识别到唤醒词后输出 W,识别到命令词后输出对应编号(开灯=1,关灯=2,调亮=3,调暗=4)

主控端完整代码

#include <Arduino.h>

#define LED_PIN       2
#define UART_RX_PIN   4
#define PWM_CHANNEL   0
#define PWM_FREQ      5000
#define PWM_RESOLUTION 8

const int BRIGHTNESS_STEP = 50;
int currentBrightness = 128;  // 初始亮度50%

void setup() {
  Serial.begin(115200);
  Serial1.begin(9600, SERIAL_8N1, UART_RX_PIN, -1);  // 接收SU-03T数据

  ledcSetup(PWM_CHANNEL, PWM_FREQ, PWM_RESOLUTION);
  ledcAttachPin(LED_PIN, PWM_CHANNEL);
  ledcWrite(PWM_CHANNEL, currentBrightness);
}

void loop() {
  if (Serial1.available() > 0) {
    char cmd = Serial1.read();
    handleCommand(cmd);
  }
}

void handleCommand(char cmd) {
  switch (cmd) {
    case 'W':  // 唤醒词,仅提示,不改变灯状态
      Serial.println("[INFO] 唤醒成功");
      break;
    case '1':  // 开灯
      currentBrightness = 128;
      ledcWrite(PWM_CHANNEL, currentBrightness);
      Serial.println("[CMD] 开灯");
      break;
    case '2':  // 关灯
      currentBrightness = 0;
      ledcWrite(PWM_CHANNEL, 0);
      Serial.println("[CMD] 关灯");
      break;
    case '3':  // 调亮
      currentBrightness = min(255, currentBrightness + BRIGHTNESS_STEP);
      ledcWrite(PWM_CHANNEL, currentBrightness);
      Serial.println("[CMD] 调亮");
      break;
    case '4':  // 调暗
      currentBrightness = max(0, currentBrightness - BRIGHTNESS_STEP);
      ledcWrite(PWM_CHANNEL, currentBrightness);
      Serial.println("[CMD] 调暗");
      break;
    default:
      Serial.println("[WARN] 未知指令");
      break;
  }
  Serial.print("[亮度] ");
  Serial.println(currentBrightness);
}

运行与验证

  1. 将代码烧录至ESP32-C3,打开串口监视器(波特率115200)。
  2. 连接SU-03模块:模块GND接ESP32-C3 GND,模块TX接GPIO4,模块VCC接5V(若模块为3.3V则接3V3)。
  3. 上电后,对SU-03模块说“小智小智”,串口应打印[INFO] 唤醒成功。
  4. 依次说“开灯”“调亮”“调暗”“关灯”,观察LED灯状态变化,串口打印对应[CMD]信息及当前亮度值。

通过条件:每说一个命令词,LED灯在2秒内做出正确响应,且串口输出的指令名称与所说命令一致。调亮/调暗每次亮度变化50/255,连续执行4次后达到最亮或最暗。

常见问题

  • 无串口输出:检查SU-03模块TX是否接对GPIO4,确认模块已烧录固件且波特率为9600。
  • 唤醒后命令不识别:SU-03需先唤醒再识别命令词,两次说话间隔不超过3秒。
  • LED亮度无变化:确认LED正极接GPIO2,且PWM通道与引脚绑定正确。
SU-03T 语音识别模块 ESP32-C3 主控 LED灯 GPIO2 UART TX 9600bps PWM 语音指令