)
【 声明版权所有欢迎转载请勿用于商业用途。 联系信箱feixiaoxing 163.com】esp32本身也是支持音乐播放的主要是i2s接口。现在电商网站上面有一种芯片输入是i2s接口输出可以直接给喇叭。不像一般的芯片后面还要一个音频放大器。比如ns4168就是其中的一种今天正好来试试。当然这里播放的都是wav格式即没有压缩的音频文件。1、信号接口主要的信号接口就5个。两个是3.3v电源和地。另外三个是BCLK、WS、DOUT。有的可能名字不一样叫BCLK、LRCLK、SDA。板子上还有DATA和CLK那个是负责麦克风的可以先不管。2、对应引脚选择引脚26、25、22即可。3、选择hello.wav可以利用everything在电脑上搜一搜指标就是16bit采样、16k速率、单声道。不然声音很难听。4、CMakeLists准备本身hello.wav是作为文件直接连接到代码里面的所以对代码分区有点影响。hello.wav也不能弄得太大idf_component_register(SRCS main.c INCLUDE_DIRS . EMBED_FILES hello.wav)5、代码部分代码部分不复杂可以让ai直接生成即可#include stdint.h #include freertos/FreeRTOS.h #include esp_log.h #include driver/i2s_std.h #define TAG AUDIO #define SAMPLE_RATE 16000 #define I2S_BCLK GPIO_NUM_26 #define I2S_WS GPIO_NUM_25 #define I2S_DOUT GPIO_NUM_22 static i2s_chan_handle_t tx_handle; /* Embedded wav file */ extern const uint8_t hello_wav_start[] asm(_binary_hello_wav_start); extern const uint8_t hello_wav_end[] asm(_binary_hello_wav_end); static void i2s_init(void) { i2s_chan_config_t chan_cfg I2S_CHANNEL_DEFAULT_CONFIG(I2S_NUM_0, I2S_ROLE_MASTER); ESP_ERROR_CHECK( i2s_new_channel(chan_cfg, tx_handle, NULL) ); i2s_std_config_t cfg { .clk_cfg I2S_STD_CLK_DEFAULT_CONFIG(SAMPLE_RATE), .slot_cfg I2S_STD_PHILIPS_SLOT_DEFAULT_CONFIG( I2S_DATA_BIT_WIDTH_16BIT, I2S_SLOT_MODE_MONO ), .gpio_cfg { .mclk I2S_GPIO_UNUSED, .bclk I2S_BCLK, .ws I2S_WS, .dout I2S_DOUT, .din I2S_GPIO_UNUSED, }, }; ESP_ERROR_CHECK( i2s_channel_init_std_mode(tx_handle, cfg) ); ESP_ERROR_CHECK( i2s_channel_enable(tx_handle) ); } static void play_wav(void) { const uint8_t *data hello_wav_start 44; size_t len hello_wav_end - hello_wav_start - 44; while (len) { size_t size len 1024 ? 1024 : len; size_t written; ESP_ERROR_CHECK( i2s_channel_write( tx_handle, data, size, written, portMAX_DELAY ) ); data size; len - size; } } void app_main(void) { ESP_LOGI(TAG, NS4168 WAV player); i2s_init(); play_wav(); }6、测试验证测试的时候可以电脑上听一遍然后喇叭再放一编看看有什么区别。