ESP32의 30핀 모델에서 핀25와 핀26은 내장 DAC 기능을 가지고 있는데, 이를 활용하면 ESP32에서 숫자를 출력해서 0~3.3V를 이 핀을 통해 내보낼 수 있다. 일반 DAC 칩의 기능을 이 핀 둘이 가지고 있는 것이다. 드론봇 워크샵의 자료를 참조했다.
https://dronebotworkshop.com/esp32-dac/
아래 예제에서는 esp32의 DAC판을 활용해 DacESP32라는 라이브러리를 사용하고 있는데, 50Hz에서 3000Hz를 발생시켜 스피커를 통해 내보내고 있다.
#include <Wire.h>
#include <LiquidCrystal_I2C.h>
LiquidCrystal_I2C lcd(0x27,20,4);
#include <DacESP32.h>
DacESP32 dac1(GPIO_NUM_25);
const int default_hz = 1000;
void print_Hz(const int Hz) {
lcd.clear();
lcd.setCursor(0, 0);
lcd.print("ESP32 interanl DAC test");
lcd.setCursor(0, 1);
lcd.print("DacESP32.h library");
lcd.setCursor(0, 2);
lcd.print("Sound of 50~3000 Hz");
lcd.setCursor(0, 3);
lcd.print(Hz);
lcd.setCursor(5, 3);
lcd.print("Hz");
}
void setup() {
Serial.begin(115200);
lcd.init();
lcd.backlight();
dac1.outputCW(default_hz);
print_Hz(default_hz);
delay(2000);
}
const int ratio = 50;
void loop() {
for (int i = 1; i < 60; i++) {
dac1.outputCW(i*ratio);
Serial.println(i*ratio);
print_Hz(i*ratio);
delay(200);
}
}
https://www.youtube.com/shorts/p1xWEM8MbjE