Spannung messen mit dem ESP32

Ich habe heute die ADS1115 Sesnsoren bekommen. Und die Spannungsmessung ist damit etwa gleich gut, als mit einem Messgerät. Und er hat ja vier Mess-Kanäle Der Sensor kostet allerdings mit 9,- Euro fast so viel wie mein teuerster ESP32. Aber ok, ich finde die Messung mit dem ESP32 ADC ist keine Alternative. Ausser es reicht zu wissen, Spannung da ja/nein. Da spielt es keine Rolle ob das 3,3 oder 3 Volt sind.
Hier im Bild ist der Untere Wert am OLED Display der vom ADS1115, der obere der ADC vom ESP32.

Hier noch der aktuelle Code zum Bild.

/* Abfrage von analogen Werten am ESP32
   - per GPIO-Pin
   - am ADS1115 mit Weitergabe per I2C
  2021-05-28 Heiko (unsinnsbasis.de)
*/

#include <Adafruit_ADS1X15.h> // bindet Wire.h für I2C mit ein
Adafruit_ADS1115 ads;
#define ADS_I2C_ADDR 0x48

// OLED Display einrichten
#include <U8g2lib.h>  // als U8g2 im Bibliotheksverwalter zu finden
U8G2_SH1106_128X64_NONAME_F_HW_I2C oled(U8G2_R0);

const float multiplier = 0.125F; // ADS1115-Multiplikator bei einf. Verstärkung
#define A_PIN 4  // GPIO-Pin für analoge Eingabe
int A_Value;         // Messwert per GPIO
int adc0;            // Messwert an Kanal 0 des ADS1115
float A_mv, ads_mv;  // Messwert in Millivolt umgerechnet
// ----------------------------------------------------SETUP------------------------------------
void setup() {
  Serial.begin(115200);
  delay(500);
  Serial.println("Analog-Test ESP32");

  ads.begin(ADS_I2C_ADDR, &Wire);
  // Werte 1-fach verstärken (ESP32 liefert  max. 3,3V)
  ads.setGain(GAIN_ONE);

  oled.begin();
  oled.clearBuffer();              // Textspeicher löschen
  oled.setFont(u8g2_font_6x12_tr); // choose a suitable font 6x12
  //oled.setFont(u8g2_font_9x15_mf);
  oled.setCursor(12, (1 * 10));
  oled.print(F("Analog-Test ESP32"));
  oled.setCursor(28, (2 * 10));
  oled.print(F("Mit ADS1115"));
  oled.sendBuffer();
}
// ----------------------------------------------------LOOP--------------------------------------
void loop() {
  A_Value = analogRead(A_PIN);  // 0...4095
  //Serial.printf("Rohwert: %d", A_Value);

  // Wert in Volt umrechnen für ADC - ESP32
  A_mv = (A_Value * 3300.0 / 4095.0) / 1000UL;
  //Serial.printf("; %4.2f V", A_mv);
  // Messung per ADS1115
  // - Kanal 0 messen (single-ended)
  adc0 = ads.readADC_SingleEnded(0);
  ads_mv = ads.computeVolts(adc0);
  // oder
  // - differenzielle Messung an Kanal 0/1
  //adc0 = ads.readADC_Differential_0_1();
  //ads_mv = (adc0 * multiplier);
  //Serial.printf("; I2C: %4.2f mV\n", ads_mv);

  // Messung ausgeben
  oled.setFont(u8g2_font_10x20_mf);
  oled.setCursor(20, (2 * 20));
  oled.print(A_mv);
  oled.print(F(" Volt"));
  oled.setCursor(20, (3 * 20));
  oled.print(ads_mv);
  oled.print(F(" Volt"));
  oled.sendBuffer();
  delay(1000);
}