
ESP-32开发板WIFI+蓝牙2合1双核CPU低功耗ESP32 ESP-32S
https://item.taobao.com/item.htm?_u=h1qf7bf56b34&id=559516521103&pisk=gkmg9hAyuVz1V5dLJDZ65zKft28KBlZj0jIYMoF28WPBhNQ9CryqnjmxWxPYmjcmi5U21lnmtYMvCmp_bn2qwXqxB5FxtKcthid6llIVifMy1AFvCmV4tfl0ldNYgScx3Vpp23HsCoZ4iQKJ258omrGGb-z23Wy_EpewdV-qzoZ2wIbd0Ptucf5YDX5V8JPQn-54QjPEL8yg0-ya0pVUn8_V_jl2Kyy83-74urWUL8FF7N7aQk7Ue-eaQoPwKvPQnR5ZgoJ3YWwqH_S4ZmoIYIqIQ6trcHGYIPVrQ5kteDRYnNMLtmnoYRD14vPHppn3IPVzu25iTclK3cn_RQfzcv3oiqlXywZi3VraeAtGxukZJm2KDKQ0_finLcahFgZm7f04P2x5PPz0s2oa-tSqdk0ngqcMsNNZWX47LyWDVJh8TAiZ-K1EQbFgbJzp4LDUu2n_PcdFjuuSBl3qGUQQjxuaxgol8a5aEiweHD7flPyQK7EjbmjeViinnpvhPHzadRtHKpbjRPyQKHvHKaRg7Jwaf&spm=a1z09.2.0.0.20f82e8dYaPasL

INMP441全向麦克风模块 MEMS 高精度 低功耗 I2S接口支持ESP32-S3

接口定义:
SCK:I²S接口的串行数据时钟
WS :用于I²S接口的串行数据字选择
L/R:左/右声道选择。一般接地
设置为低电平时,麦克风在I²S帧的左声道输出信号。
设置为高电平时,麦克风在右声道输出信号
SD:I²S接口的串行数据输出。
VCC:输入电源,1.8V至3.3V.
GND:电源地
只是参考不同的板子接线不一样
INMP441 ESP32开发板
-
#define I2S_MIC_WS 25 // INMP441 WS (LRCLK)#define I2S_MIC_SD 33 // INMP441 SD (DOUT)#define I2S_MIC_SCK 32 // INMP441 SCK (BCLK)
- L/R >> GND
- GND >> GND
- VDD >> VDD3.3
MAX98357 I2S 音频放大器模块 无滤波D类放大支持ESP32-S3 树莓pi


代码

#include <driver/i2s.h>
// 引脚定义
#define I2S_MIC_WS 25 // INMP441 WS (LRCLK)
#define I2S_MIC_SD 33 // INMP441 SD (DOUT)
#define I2S_MIC_SCK 32 // INMP441 SCK (BCLK)
#define I2S_SPK_WS 26 // MAX98357 LRCLK
#define I2S_SPK_DOUT 27 // MAX98357 DIN
#define I2S_SPK_BCLK 14 // MAX98357 BCLK
// I2S配置
#define SAMPLE_RATE 44100
#define SAMPLE_BITS 16
#define BUFFER_SIZE 1024
void setup() {
Serial.begin(115200);
// 初始化I2S麦克风输入
i2s_config_t mic_i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX),
.sample_rate = SAMPLE_RATE,
.bits_per_sample = (i2s_bits_per_sample_t)SAMPLE_BITS,
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = I2S_COMM_FORMAT_STAND_I2S,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
.dma_buf_count = 8,
.dma_buf_len = BUFFER_SIZE,
.use_apll = false,
.tx_desc_auto_clear = false,
.fixed_mclk = 0
};
i2s_pin_config_t mic_pin_config = {
.mck_io_num = I2S_PIN_NO_CHANGE,
.bck_io_num = I2S_MIC_SCK,
.ws_io_num = I2S_MIC_WS,
.data_out_num = I2S_PIN_NO_CHANGE,
.data_in_num = I2S_MIC_SD
};
i2s_driver_install(I2S_NUM_0, &mic_i2s_config, 0, NULL);
i2s_set_pin(I2S_NUM_0, &mic_pin_config);
// 初始化I2S扬声器输出
i2s_config_t spk_i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
.sample_rate = SAMPLE_RATE,
.bits_per_sample = (i2s_bits_per_sample_t)SAMPLE_BITS,
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = I2S_COMM_FORMAT_STAND_I2S,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
.dma_buf_count = 8,
.dma_buf_len = BUFFER_SIZE,
.use_apll = false,
.tx_desc_auto_clear = false,
.fixed_mclk = 0
};
i2s_pin_config_t spk_pin_config = {
.mck_io_num = I2S_PIN_NO_CHANGE,
.bck_io_num = I2S_SPK_BCLK,
.ws_io_num = I2S_SPK_WS,
.data_out_num = I2S_SPK_DOUT,
.data_in_num = I2S_PIN_NO_CHANGE
};
i2s_driver_install(I2S_NUM_1, &spk_i2s_config, 0, NULL);
i2s_set_pin(I2S_NUM_1, &spk_pin_config);
Serial.println("I2S初始化完成,开始音频回环...");
}
void loop() {
int16_t audio_buffer[BUFFER_SIZE];
size_t bytes_read;
// 从麦克风读取数据
i2s_read(I2S_NUM_0, audio_buffer, sizeof(audio_buffer), &bytes_read, portMAX_DELAY);
// 将数据写入扬声器
size_t bytes_written;
i2s_write(I2S_NUM_1, audio_buffer, bytes_read, &bytes_written, portMAX_DELAY);
// 可选:打印一些调试信息
static unsigned long last_print = 0;
if (millis() - last_print > 1000) {
Serial.printf("音频处理中... 缓冲区大小: %d\n", bytes_read);
last_print = millis();
}
}
浙公网安备 33010602011771号