要使用ESP32控制INMP441采集并用MAX98357播放音频,您需要遵循以下步骤:
1.准备所需的硬件和软件
ESP32开发板
INMP441麦克风模块
MAX98357音频放大器模块
Arduino IDE
2.将ESP32与INMP441连接
将ESP32和INMP441连接如下:
ESP32 3.3V引脚 -> INMP441 VCC引脚
ESP32 GND 引脚 -> INMP441 GND 引脚
ESP32 GPIO22引脚 -> INMP441 LRCL引脚
ESP32 GPIO21引脚 -> INMP441 BCLK引脚
ESP32 GPIO32引脚 -> INMP441 DAT引脚
3.将ESP32与MAX98357连接
将ESP32和MAX98357连接如下:
ESP32 GND 引脚 -> MAX98357 GND 引脚
ESP32 GPIO25引脚 -> MAX98357 LRCL引脚
ESP32 GPIO26引脚 -> MAX98357 BCLK引脚
ESP32 GPIO27引脚 -> MAX98357 DIN引脚
ESP32 3.3V引脚 -> MAX98357 VIN引脚
4.编写Arduino代码
您需要在Arduino IDE中编写代码来控制ESP32、INMP441和MAX98357来采集、播放和处理音频数据。以下是一个简单的代码示例:
#include "Arduino.h"
#include <driver/i2s.h>
#define INMP441_LRCL 22
#define INMP441_BCLK 21
#define INMP441_DOUT 32
#define MAX98357_LRCL 25
#define MAX98357_BCLK 26
#define MAX98357_DIN 27
#define SAMPLE_RATE 16000
i2s_config_t i2sIn_config = {
.mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_RX),
.sample_rate = SAMPLE_RATE,
.bits_per_sample = i2s_bits_per_sample_t(32),
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = I2S_COMM_FORMAT_I2S_MSB,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
.dma_buf_count = 4,
.dma_buf_len = 512
};
i2s_config_t i2sOut_config = {
.mode = i2s_mode_t(I2S_MODE_MASTER | I2S_MODE_TX),
.sample_rate = SAMPLE_RATE,
.bits_per_sample = i2s_bits_per_sample_t(16),
.channel_format = I2S_CHANNEL_FMT_ONLY_LEFT,
.communication_format = I2S_COMM_FORMAT_I2S_MSB,
.intr_alloc_flags = ESP_INTR_FLAG_LEVEL1,
.dma_buf_count = 4,
.dma_buf_len = 512
};
void setup() {
Serial.begin(115200);
i2s_driver_install(I2S_NUM_0, &i2sIn_config, 0, NULL);
i2s_set_pin(I2S_NUM_0, NULL);
i2s_driver_install(I2S_NUM_1, &i2sOut_config, 0, NULL);
i2s_set_pin(I2S_NUM_1, NULL);
pinMode(MAX98357_LRCL, OUTPUT);
pinMode(MAX98357_BCLK, OUTPUT);
pinMode(MAX98357_DIN, OUTPUT);
// MAX98357 setup
digitalWrite(MAX98357_LRCL, LOW);
digitalWrite(MAX98357_BCLK, LOW);
digitalWrite(MAX98357_DIN, LOW);
delay(10);
writeRegister(0x08, 0x08);
}
void loop() {
size_t bytes_read;
int16_t data[256];
i2s_read(I2S_NUM_0, &data, sizeof(data), &bytes_read, portMAX_DELAY);
i2s_write(I2S_NUM_1, &data, sizeof(data), &bytes_read, portMAX_DELAY);
}
void writeRegister(uint8_t reg, uint8_t val) {
pinMode(MAX98357_LRCL, OUTPUT);
pinMode(MAX98357_BCLK, OUTPUT);
pinMode(MAX98357_DIN, OUTPUT);
int i;
for(i = 7; i >= 0; i--) {
digitalWrite(MAX98357_LRCL, LOW);
digitalWrite(MAX98357_BCLK, LOW);
digitalWrite(MAX98357_DIN, (reg >> i) & 1);
digitalWrite(MAX98357_BCLK, HIGH);
}
for(i = 7; i >= 0; i--) {
digitalWrite(MAX98357_LRCL, LOW);
digitalWrite(MAX98357_BCLK, LOW);
digitalWrite(MAX98357_DIN, (val >> i) & 1);
digitalWrite(MAX98357_BCLK, HIGH);
}
}
在以上代码中,我们使用了I2S库来控制INMP441收集音频数据和MAX98357播放音频数据。在setup()函数中,我们初始化I2S库和MAX98357芯片的配置。
在loop()函数中,我们使用i2s_read()函数读取I2S缓冲区中的音频数据,并使用i2s_write()函数将数据写入MAX98357中进行播放。
此外,我们还提供了一个函数writeRegister用于向MAX98357芯片写入寄存器数据,使其能够正确配置MAX98357芯片。
5.上传和运行代码文章来源:https://www.toymoban.com/news/detail-426381.html
将代码上传到您的ESP32开发板,并在串行监视器中查看输出以确保一切正常。您应该能够从INMP441收集音频数据,并从MAX98357扬声器中听到声音。文章来源地址https://www.toymoban.com/news/detail-426381.html
到了这里,关于要使用ESP32控制INMP441采集并用MAX98357播放音频实现对讲机的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!