Ein Beispiel für die Spannungsmessung mit dem ADC eines ESP32 Moduls. Die Spannung wird auf einer Webseite durch einen Messuhr -Indikator visualisiert. Das Anzeigeinstrument ist mit HTML Canvas Gauge Realisiert. Das HTML Anzeigeinstrument funktioniert ohne Zugriff auf Internet. Die gauge.min.js Bibliothek ist lokal auf dem ESP32 gespeichert. Eigentlich lassen sich auf diese Weise HTML dashboards und verschiedenes Webinterface mit Visualization bauen.
In diesem Beispiel fragt die Visualization Webseite 2-mal in die Sekunde den Messwert ab. Dies geschieht mittels AJAX-Objekt und JavaScript. Ich habe auch eine Anzeige vorgesehen die das Verbindungstatus anzeigt. Der Kreis oben links wird rot, wenn Anfrage an den ESP32 Server gesendet wird. Und er wird wieder Grau, wenn eine Antwort vom ESP32 Server zurückkommt. Wenn der Kreis rot bleibt, dann ist die Verbindung abgebrochen oder ESP32 Server antwortet nicht.
Das Arduino Sketch, bei Aufruf des ESP32 IP-Adresse, macht nichts anderes als eine HTML-Webseite an den Browser zu schicken. Und beim Aufruf von ADC.txt wird ein Text mit dem ADC-Messwert gesendet. Ständige Aktualisierung und Visualisierung geschieht mittels JavaScript. Webseiten Quelltext, JavaScript, und gauge.min.js Bibliothek befinden sich in der Datei „index_html.h“ im Projektordner.
Arduino Sketsh für ESP32
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 |
#include <WiFi.h> #include <WiFiClient.h> #include <WebServer.h> #include <driver/adc.h> #include "index_html.h" WebServer server(80); float adcval = 0; // ADC Mittelwert void setup(void) { // Initialisiere ESP32 ADC adc1_config_width(ADC_WIDTH_12Bit); // ADC Auflösung 10Bit (4096 = 1,1V) adc1_config_channel_atten(ADC1_CHANNEL_0, ADC_ATTEN_0db); // Verstärkung 0dB =1,1 V Max Serial.begin(115200); Serial.print(""); Serial.println("Start"); WiFi.mode(WIFI_AP); WiFi.softAP("astral", "tiramisu"); // Name und Passwort des Wi-Fi Netzes delay(500); IPAddress apIP(192, 168, 1, 1); // Hier wird IP bestimmt WiFi.softAPConfig(apIP, apIP, IPAddress(255, 255, 255, 0)); Serial.println("Starte AP astral"); Serial.print("IP Adresse "); //Ausgabe aktueller IP des Servers Serial.println(WiFi.softAPIP()); server.on("/", Ereignis_Index); server.on("/gauge.min.js", Ereignis_js); server.on("/ADC.txt", Ereignis_ADC); server.onNotFound(handleNotFound); server.begin(); Serial.println("HTTP Server gestarted"); } void Ereignis_Index() // Wenn "http://<ip address>/" aufgerufen wurde { server.send(200, "text/html", indexHTML); //dann Index Webseite senden } void Ereignis_js() // Wenn "http://<ip address>/gauge.min.js" aufgerufen wurde { server.send(200, "text/html", gauge); // dann gauge.min.js senden } void Ereignis_ADC() // Wenn "http://<ip address>/ADC.txt" aufgerufen wurde { float temp = (10 * adcval) / 4096; // Maximale Spannung 1,1V erzeugt Wert von 10V server.sendHeader("Cache-Control", "no-cache"); // Sehr wichtig !!!!!!!!!!!!!!!!!!! server.send(200, "text/plain", String (temp)); // dann text mit ADC Wert senden } void handleNotFound() { server.send(404, "text/plain", "File Not Found\n\n"); } void loop(void) { server.handleClient(); // software Tiefpassfilter, filtert Ausreißer adcval = ( 15 * adcval + adc1_get_raw ( ADC1_CHANNEL_0 ) ) / 16; // ESP32 ADC 0 Lesen delay(10); } |
Ich habe für dieses Beispielprogramm das ADC1_0 verwendet. Diese GPIO hat auf dem ESP32 (LOLIN32, ESP-WROOM-32) Board die Bezeichnung „VP“
ADC ist so eingestellt das maximale Spannung 1.1V beträgt. Um 10V zu messen wird ein Spannungsteiler benötigt. Ich schlage vor 10 K wiederstand und 10 K Präzisionspotentiometer zu verwenden.
Um das ADC-Eingang gegen Überspannung zu schützen sollte eine schottky Diode (BAT48) zwischen ADC-Eingang und 3,3 V Stromversorgung geschaltet werden. So kann die GPIO Eingangsspannung auch bei falscher Poti Einstellung die 3,6V nicht übersteigen.
Einstellen des Messbereichs
Einstellen: Das Poti in minimale Stellung positionieren. 10V am Meßeingang geben. So lange am Poti drehen bis das Gauge Anzeigeinstrument die 10V anzeigt.
Übrigens Sie können auf gleiche Weise ESP32 für Messung andere Spannungen einstellen. Kleinste Spannung ist 2,2V.
Zum Beispiel für Messbereich 24 V muss in der Zeile 49 der Multiplikator auf 24 gesetzt werden.
float temp = (10 * adcval) / 4096;
In der Datei „index_html.h“ müssen noch folgende Werte angepasst werden damit die Skala richtige Messbereich hat.
data-max-value=“10″
data-major-ticks=“0 1 2 3 4 5 6 7 8 9 10″
data-highlights=“0 10 #aaa“
Ausprobieren
- Mit WiFi Netzwerk „astral“ verbinden. Das Passwort lautet „tiramisu“
- Im Browser http://192.168.1.1/ eingeben
- Mit dem Finger das „VP“ Pinn berühren, damit der Zeiger sich bewegt.
Download von mir Kompiliertes Programm als fertige Firmware
Kann direkt ohne Arduino IDE und Programmierkenntnissen in Mikrocontroller übertragen werden. Sie benötigen nur Handy-Datenkabel. Passendes Tool befindet sich in der ZIP-Datei.
Download Firmware BIN-Datei ADC Analog Gauge für LOLIN32 (ESP32) -Tool zum laden der Firmware und Anleitung sind im Archiv. (Kompiliert mit Arduino ver. 1.8.5, Core für ESP32 Stand 20.04.18).
Download Arduino Projekt AnalogGauge_Sketsh, es wird Bibliothek WebServer_tng benötigt.