L’ESP32 et ses dérivés tels que l’ESP32-S2 ont un générateur de forme d’onde sinusoïdale/cosinusoïdale intégré pour le DAC 8 bits intégré.
L’utiliser requiert ESP-IDF v5.1+ (voir l’exemple officiel). L’utiliser avec Arduino est légèrement plus difficile, puisque la version stable du framework arduino-esp32 au moment de l’écriture de ce post est basée sur ESP-IDF v4.4 qui ne fournit pas l’API du générateur cosinus DAC.
Par conséquent, nous devons spécifier explicitement la version arduino-espressif32 (commit git) dans platformio.ini :
[env:esp32dev]
platform = espressif32
# Le commit f9cddfde697b659b9e818ec514f1505d2bd4a8ae est la branche esp-idf-v5.1-libs @2022-02-01
platform_packages = framework-arduinoespressif32 @ https://github.com/espressif/arduino-esp32.git#f9cddfde697b659b9e818ec514f1505d2bd4a8ae
board = esp32dev
framework = arduinoLe code source principal de l’exemple est plutôt simple :
#include <Arduino.h>
#include <driver/dac_cosine.h>
void setup() {
dac_cosine_handle_t chan0_handle;
dac_cosine_config_t cos0_cfg = {
.chan_id = DAC_CHAN_1, // GPIO26
.freq_hz = 1000,
.clk_src = DAC_COSINE_CLK_SRC_DEFAULT,
.atten = DAC_COSINE_ATTEN_DEFAULT,
.phase = DAC_COSINE_PHASE_0,
.offset = 0,
//.flags.force_set_freq = false,
};
ESP_ERROR_CHECK(dac_cosine_new_channel(&cos0_cfg, &chan0_handle));
ESP_ERROR_CHECK(dac_cosine_start(chan0_handle));
}
void loop() {
// mettez votre code principal ici, à exécuter répétitivement :
delay(1000);
}Si vous voulez voir comment la forme d’onde générée apparaît sur un oscilloscope, voir À quoi ressemble la forme d’onde du générateur cosinus DAC de l’ESP32 sur un oscilloscope ?