介绍
本文展示了在Arduino环境下ESP32的DAC的使用。
ESP32有2路8位DAC,其中DAC1在PIN25,DAC2在PIN26,DAC引脚由于是模拟引脚,因此无法通过IO_MUX映射。
Arduino库提供了 dacWrite(uint8_t pin, uint8_t value) 这个函数,只需要传入引脚号(25或26)以及8位的输出设定值即可。
ESP32还能通过I2S将数据连续输出到DAC,这在DAC播放音频时十分有用,这种方法详见我的另一篇文章:ESP32使用I2S及I2S输出到DAC(Arduino)
还有一些高级用法,需要IDF库,可参考ESP-IDF编程指南DAC章节
函数实现和简化
使用 dacWrite 函数是最方便的方法,但该函数封装得比较完备或者说复杂,因此速度可能会牺牲一些,此函数位于 esp32-hal-dac.c 中(路径在Arduino放开发板包的文件夹里的:\esp32\hardware\esp32\1.0.6\cores\esp32,其中1.0.6是版本,我这里的可能偏旧一点),函数实现如下:
void IRAM_ATTR __dacWrite(uint8_t pin, uint8_t value)
{
if(pin < 25 || pin > 26){
return;//not dac pin
}