293|5

168

帖子

3

TA的资源

一粒金砂(高级)

【2024 DigiKey 创意大赛】ESP-32-S3- 入门雷达检测 + 语音播报 [复制链接]

本帖最后由 御坂10032号 于 2024-10-29 01:09 编辑

简介

 

本章节主要完成客厅入门检测的功能。 具体则为采用雷达模块来进行检测是否存在人员移动, 当如果有人员移动的话,雷达将会发送一个高电平给ESP32S3-devkit,之后这个高电平信号将会被中断给捕获到,从而点亮红色LED灯, 并且驱动MX98357模块来播放音频。

 

接线图如下:

 

 

ee414c5b79b7d88712b21feb41f0961.jpg  

 

在这里非常感谢群友提供的I2S的配置指导。 

 

image.png  

 

后经过群友的帮助之后,成功的自定义并且初始化了I2S的特定PIN,并且播放了一个简单的音调。具体的demo 来自下图。

 

image.png  

 

如果你的板子接线正确的话, 那么你可以听到一个“嘟~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~”的声音。

 

那么现在还需要解决一个问题就是如何来读取WAV格式。这里其实有很多种方式,比如说通过网络或者是通过SD卡来存取SD卡内保存的音频文件都可以完成播放。 但是由于我这个是检测客厅人员回家的,所以仅仅需要播放一个”欢迎回家“即可。 于是我使用AI语音生成的网站生成了一个"欢迎回家"的语音

 

 

image.png  

 

 

这里wav语音转换的时候我踩了很多坑。 我不贴上没有解决的bug, 我这里发现了一个很好的解决方案。 请参考这个帖子 

 

具体的步骤为, 首先使用Audacity 把数据转换为unsigned 8 bit的wav格式。然后通过使用Freeware Hex Editor and Disk Editor打开 wav格式的数据,将数据全选并且拷贝为c语言数组。

 

 

如下图所示

 

image.png  

 

修改原本播放音调的代码如下图所示(删除掉播放音频数据的代码)

 

#include <ESP_I2S.h>
#include <Adafruit_NeoPixel.h>

#define LED_PIN 38       // Pin connected to the data input of SK68XXMINI-HS
#define NUMPIXELS 1      // Number of LEDs (set to 1 if using a single SK68XXMINI-HS)
#define INTERRUPT_PIN 1  // Pin connected to IO1 for detecting high/low signal

Adafruit_NeoPixel pixels(NUMPIXELS, LED_PIN, NEO_GRB + NEO_KHZ800);

bool ledOn = false;  // LED state

void IRAM_ATTR handleInterrupt() {
  // Toggle LED state based on the level of INTERRUPT_PIN
  ledOn = digitalRead(INTERRUPT_PIN);  // Read the state of the pin (HIGH or LOW)
}

unsigned char rawData[66044] = {
  
};


const size_t wavDataSize = sizeof(rawData) / sizeof(rawData[0]);

i2s_data_bit_width_t bps = I2S_DATA_BIT_WIDTH_16BIT;
i2s_mode_t mode = I2S_MODE_STD;
i2s_slot_mode_t slot = I2S_SLOT_MODE_MONO;

I2SClass i2s;

void setup() {
  Serial.begin(115200);
  Serial.println("I2S playback from array");

  pinMode(INTERRUPT_PIN, INPUT);                                                   // Set INTERRUPT_PIN (IO1) as input
  attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), handleInterrupt, CHANGE);  // Trigger on any change in level (HIGH or LOW)

  i2s.setPins(41, 42, 40);  // BCLK, LRC, DIN
  // 启动 I2S,设置采样率和每个样本的位宽
  if (!i2s.begin(mode, 30000, bps, slot)) {  // 假设采样率为 48000 Hz
    Serial.println("Failed to initialize I2S!");
    while (1)
      ;  // 不执行任何操作
  }
  pixels.begin();  // 初始化 LED
}

void loop() {
  if (ledOn) {
    // 点亮红色 LED
    pixels.setPixelColor(0, pixels.Color(255, 0, 0));  // 设置为红色
    pixels.show();                                     // 更新 LED 显示

    // 播放 WAV 数据
    for (size_t i = 0; i < wavDataSize; i++) {
      i2s.write(rawData[i]);  // 写入样本到 I2S
    }
  } else {
    // 关闭 LED
    pixels.setPixelColor(0, pixels.Color(0, 0, 0));  // 关闭 LED
    pixels.show();                                   // 更新 LED 显示
  }

  delay(5000);  // 添加一个小延迟,避免过于频繁的读取
}

 

并且将你拷贝的音频数组放到rawData处。 同时绑定IO中断用来读取雷达的反馈。这里需要注意的是, 可能需要你自己手动调整采样率。 我这个音频文件下载下来的时候经过查看采样率应该是在48KHZ的,但是如果这个地方使用48KHZ进行播放的时候,音频会出现失帧情况。 所以我在这里调整了好久的采样率以及播放完每一个数组元素的延迟。 最后得到了上面的代码。 

 

完整的播放音频代码如下:

music_play.ino (399.74 KB, 下载次数: 0)

最新回复

你分享的资料很好,对我很有帮助,谢谢分享这么好的资料!   详情 回复 发表于 2024-10-29 12:33

回复
举报

6883

帖子

2

TA的资源

版主

后面我也要用语音播报,16KHz的音频能播放不~

点评

没试过, 你的音频如果没问题的话应该就没问题  详情 回复 发表于 2024-10-29 13:08

回复

6168

帖子

6

TA的资源

版主

在一个密闭的空间,雷达反方向是不是也能让他检测到 

点评

不会, 这个雷达就是一个很普通的雷达. 好点的雷达更不会了  详情 回复 发表于 2024-10-29 13:08
个人签名

在爱好的道路上不断前进,在生活的迷雾中播撒光引


回复

11

帖子

0

TA的资源

一粒金砂(中级)

你分享的资料很好,对我很有帮助,谢谢分享这么好的资料!


回复

168

帖子

3

TA的资源

一粒金砂(高级)

wangerxian 发表于 2024-10-29 09:01 后面我也要用语音播报,16KHz的音频能播放不~

没试过, 你的音频如果没问题的话应该就没问题


回复

168

帖子

3

TA的资源

一粒金砂(高级)

秦天qintian0303 发表于 2024-10-29 09:08 在一个密闭的空间,雷达反方向是不是也能让他检测到 

不会, 这个雷达就是一个很普通的雷达. 好点的雷达更不会了


回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表