
.
Forum zur gegenseitigen Hilfe für Hobby´s, Spass und Technik, im Raum Penzberg, Garmisch, Bad Tölz, Seeshaupt
Code: Alles auswählen
/* 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 Millivolt umrechnen
A_mv = A_Value * 3300.0 / 4095.0;
Serial.printf("; %4.2f mV", A_mv);
// Messung ausgeben
oled.setFont(u8g2_font_10x20_mf);
oled.setCursor(10, (2 * 20));
oled.print(A_mv);
oled.print(F(" mV"));
oled.sendBuffer();
// Messung per ADS1115
// - Kanal 0 messen (single-ended)
// adc0 = ads.readADC_SingleEnded(0);
// ads_mv = ads.computeVolts(adc0) * 1000;
// 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);
delay(200);
}
Code: Alles auswählen
/* 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) / 1000;
//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);
}
Code: Alles auswählen
// - 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);
Code: Alles auswählen
/* 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
int A_Value; // Messwert per GPIO
int adc0; // Messwert an Kanal 0 des ADS1115
int adc1; // Messwert an Kanal 1 des ADS1115
int adc2; // Messwert an Kanal 2 des ADS1115
int adc3; // Messwert an Kanal 3 des ADS1115
float A_mv, ads_mv0, ads_mv1, ads_mv2, ads_mv3 ; // 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()
{
// Messung per ADS1115
// - Kanal 0 messen (single-ended)
adc0 = ads.readADC_SingleEnded(0);
ads_mv0 = ads.computeVolts(adc0);
// - Kanal 1 messen (single-ended)
adc1 = ads.readADC_SingleEnded(1);
ads_mv1 = ads.computeVolts(adc1);
// 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);
//ADS Kanal 0 anzeigen
oled.setCursor(20, (2 * 20));
oled.print(ads_mv0);
oled.print(F(" Volt"));
//ADS Kanal 1 anzeigen
oled.setCursor(20, (3 * 20));
oled.print(ads_mv1);
oled.print(F(" Volt"));
oled.sendBuffer();
delay(1000);
}
Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast