Hardware connection
小智AI终端DIY面包板WIFI-LCD彩屏接线教程[1]
- VCC: 3.3v
- GND: GND
- BCLK: I2S位时钟引脚,GPIO 15
- LRC: I2S左右声道时钟引脚,GPIO 16
- DIN: I2S数据输出引脚,GPIO 7
- SD: 悬空
- GAIN: 悬空(默认3dB增益)或接3.3V(15dB增益)。
I2s
#define I2S_BCLK 15
#define I2S_LRC 16
#define I2S_DOUT 7
static void configure_speaker()
{
i2s_config_t i2s_config = {
.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX),
.sample_rate = 44100,
.bits_per_sample = I2S_BITS_PER_SAMPLE_16BIT,
.channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
.communication_format = I2S_COMM_FORMAT_STAND_I2S,
.intr_alloc_flags = 0,
.dma_buf_count = 8,
.dma_buf_len = 64,
.use_apll = false,
.tx_desc_auto_clear = true};
i2s_pin_config_t pin_config = {
.bck_io_num = I2S_BCLK,
.ws_io_num = I2S_LRC,
.data_out_num = I2S_DOUT,
.data_in_num = I2S_PIN_NO_CHANGE};
i2s_driver_install(I2S_NUM_0, &i2s_config, 0, NULL);
i2s_set_pin(I2S_NUM_0, &pin_config);
}
Play test sound:
void generate_test_sound()
{
size_t bytes_written;
for (uint32_t i = 0; i < audio_length; i++) {
// 从Flash读取数据(无需pgmspace.h)
int16_t sample;
memcpy(&sample, &audio_data[i], sizeof(sample)); // 安全读取方式
// 发送立体声数据
int16_t stereo_sample[2] = {sample, sample};
i2s_write(I2S_NUM_0, stereo_sample, sizeof(stereo_sample), &bytes_written, portMAX_DELAY);
}
}