小智屏幕显示聆听但是不能输入,可能是麦克风问题,如下图。
inmp441麦克风很容易有问题,sck引脚很容易焊接到外面的圆环上,以下是问题引脚,用刀片分开就好了。
如果还是有问题,就爱莫能助了。
接下来给出一个arduino的测试代码,测试麦克风问题。
接线参考下面引脚,会用arduino,应该知道怎么接,麦克风6个引脚,下面代码给出三个引脚连接方式,vdd还有gnd不要忘了,还有一个l/r引脚,接gnd和vcc,或者不接,选择左声道还有右声道的,应该都可以。
#include <driver/i2s.h>这个库可能没有,需要自己安装,这个上网搜怎么安装库
#include <driver/i2s.h>
// INMP441 引脚定义
#define I2S_SCK 16 // BCK
#define I2S_WS 15 // WS/LRCLK
#define I2S_SD 13 // SD
void setup() {
Serial.begin(115200);
delay(1000);
// I2S配置(完全标准的结构体初始化)
i2s_config_t i2s_config;
i2s_config.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_RX);
i2s_config.sample_rate = 44100;
i2s_config.bits_per_sample = I2S_BITS_PER_SAMPLE_24BIT;
i2s_config.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT;
i2s_config.communication_format = I2S_COMM_FORMAT_STAND_I2S;
i2s_config.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1;
i2s_config.dma_buf_count = 8;
i2s_config.dma_buf_len = 1024;
i2s_config.use_apll = false;
i2s_config.tx_desc_auto_clear = false;
i2s_config.fixed_mclk = 0;
// I2S引脚配置(完全标准的结构体初始化)
i2s_pin_config_t pin_config = {};
pin_config.bck_io_num = I2S_SCK;
pin_config.ws_io_num = I2S_WS;
pin_config.data_out_num = -1;
pin_config.data_in_num = I2S_SD;
pin_config.mck_io_num = -1;
// 安装驱动
esp_err_t err = i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
if (err != ESP_OK) {
Serial.printf("I2S驱动安装失败: 0x%X\n", err);
while(1);
}
err = i2s_set_pin(I2S_NUM_0, &pin_config);
if (err != ESP_OK) {
Serial.printf("I2S引脚设置失败: 0x%X\n", err);
while(1);
}
Serial.println("I2S初始化成功,开始采集音频...");
}
void loop() {
int32_t raw_sample;
size_t bytes_read;
if (i2s_read(I2S_NUM_0, &raw_sample, sizeof(raw_sample), &bytes_read, 0) == ESP_OK) {
if (bytes_read > 0) {
int32_t sample = raw_sample >> 8; // 24位有效数据
Serial.println(abs(sample));
// 麦克风检测逻辑
static uint32_t zero_count = 0;
if (sample == 0) {
if (++zero_count > 1000) {
Serial.println("警告:麦克风可能未正常工作!");
zero_count = 0;
}
} else {
zero_count = 0;
}
}
}
delay(200);
}
1.复制代码到arduino,编译并且上传到esp32s3
2.打开arduino的串口监视器
3.左图串口数据表示麦克风有问题,右图表示麦克风没有问题