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(); } }