ESP32使用I2S及I2S输出到DAC(Arduino)

介绍

本文展示了在Arduino环境下ESP32的I2S的使用。
ESP32有两个I2S:I2S0和I2S1。其中I2S0支持的功能要多些。
ESP32的Arduino库似乎未提供对I2S的直接支持,因此需要调用IDF库的内容,我们需要:

#include <driver/i2s.h>

这个头文件位于Arduino放开发板包的文件夹里的:\esp32\hardware\esp32\1.0.6\tools\sdk\include\driver\driver,其中1.0.6是版本,我这里的可能偏旧一点,可能和新版本在编程细节上略有不同,比如某些枚举值的名称,但具体内容仔细查阅这个头文件即可。

硬件

I2S需要外接对应的硬件,常见的是两种:输出数据到播放器或从麦克风读取数据。这里使用的是前者,外部功放是MAX98375A,关于这个可以参见这个文章:ESP32-IDF使用I2S驱动MAX98375–解析WAV文件,该文章也讲解了I2S,而且上文提到的不同版本的编程细节不同在这里也有所体现,该文的代码写法和我下文的写法有所不同,可以自行对比尝试。
根据ESP32技术参考手册所述,I2S标准总线定义了三种信号:时钟信号BCK、声道选择信号WS和串行数据信号SD,这三个信号线都是可以正常利用IO_MUX进行引脚映射的,下文代码会体现。此外还有一个I2Sn_CLK,该时钟信号不能随便引脚映射,不过要注意它和BCK(有时也叫BCLK)不是一个东西,I2Sn_CLK不常用,所以这里可以不管。

I2S代码

#include <driver/i2s.h>
//这里可以修改引脚映射
#define BCLK  26//时钟信号
#define LRC   27//声道选择信号
#define DIN   33//串行数据信号(这里是对外部功放来说是DIN)

void setup(){
   
  i2s_config_t i2s_config;// I2S配置结构体
  i2s_config.mode = (i2s_mode_t)(I2S_MODE_MASTER | I2S_MODE_TX);// 使用主模式并设置为发送数据
  i2s_config.sample_rate = 44100;// 设置采样率为44100Hz
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值