Im Gegensatz zum ESP8266 weist der ESP32 ein wesentlich besser ausgebautes System zur analogen IO auf.
Der ESP32 besitzt zwei 12-bit ADCs, die nach dem Verfahren der Successiven Approximation arbeiten und insgesamt 18 analoge Eingänge bedienen. Einige dieser Eingänge können zur Bildung eines programmierbaren Verstärkers (PGA) zur Verstärkung kleiner Analogsignale herangezogen werden.
Die ADC API unterstützt ADC1 (9 Kanäle, an GPIO 32 – 39), und ADC2 (10 Kanäle, an den GPIOs 0, 2, 4, 12 – 15 und 25 – 27). Bei der Verwendung von ADC2 gilt es aber, gerade bei der Verwendung von WiFi, gewisse Restriktionen zu beachten. Für den Test hier spielen sie aber keine Rolle .
Außerdem hat der ESP32 zwei 8-bit DACs, die mit GPIO25 (Channel 1) und GPIO26 (Channel 2) verbunden sind.
Für einen ersten Test des DAC-ADC-Subsystems ist es am einfachsten, den DAC an GPIO25 mit ADC19 an GPIO26 zu verbinden. Hier wird also ADC2 verwendet.

Das Arduino Testprogramm weist keine Besonderheiten auf und zeigt vor allem, wie DAC und ADC angesprochen werden können. Auf Github steht es zum Download zur Verfügung.
/*
ESP32 Test of DAC & ADC
(c) Claus Kuehnel 2018-03-01 info@ckuehnel.ch
ESP32 has two 8-bit DAC channels, connected to GPIO25 (Channel 1) and GPIO26 (Channel 2)
There are 16 ADC channels. ADC19 goes to GPIO26.
Connect GPIO25 & GPIO26 fpr this test.
*/
#define LED 2
uint8_t DAC_Channel_1 = 25;
uint8_t ADC19 = 26;
uint8_t dac;
uint16_t adc;
void setup()
{
Serial.begin(115200);
pinMode(LED, OUTPUT);
delay(5000);
Serial.println("\n DAC\tADC\t DIFF");
}
void loop()
{
int16_t diff;
for (dac = 0; dac < 256; dac++)
{
digitalWrite(LED, HIGH);
delay(100);
dacWrite(DAC_Channel_1, dac);
delay(100);
adc = analogRead(ADC19);
diff = 16 * dac - adc;
Serial.printf("%4d\t%6d\t%4d\n", dac, adc, diff);
digitalWrite(LED, LOW);
delay(900);
}
}
Die seriellen Ausgaben habe ich geloggt, um diese für die folgende Grafik aufzubereiten.

Aus der dargestellten DAC-ADC-Charakteristik kann man deutlich erkennen, dass das analoge Subsystem durch die zu erkennende Nichtlinearität durchaus einige Probleme aufweist. Es lohnt sich deshalb, im Forum die Diskussion um die ADC Issues zu verfolgen.
Pingback: PyBoard ADC & DAC – MicroPython
Pingback: Externer ADC am ESP32 | ck blog
Pingback: Longan Nano ADC & DAC | ck blog
Pingback: Arduino Portenta H7 – ckArduino
Pingback: Messung von Umgebungsbedingungen für Pflanzen mit LILYGO®TTGO T-Higrow Sensor – ckArduino