Universeller 6-Facher Impulszähler mit WeMos
Der Impulszähler hat 6 Eingänge und kann zum Beispiel 6 Durchflusssensoren gleichzeitig bedienen.
Auch der Stromverbrauch lässt sich mittels eines Wechselstromzählers (Wattmeter) über HTTP abfragen und dann mit Hilfe von JavaScript oder PHP anzeigen oder protokolieren.
Aufruf erfolgt über IP des ESP8266 Impulszählers. Als Antwort werden 6 Zahlen als Text geliefert. Die Zahlen sind durch „ , “-Zeichen getrennt und zeigen die Anzahl der Impulse pro Minute. Es wird immer die letzte Minute vor dem Aufruf ausgewertet.
Dass seit dann so aus: Wenn der ESP8266 Impulszähler die IP 192.168.168.30 vom Router Zugevisen bekommt, geben Sie in adressleiste Ihres Internetbrowsers „http://192.168.168.30/“ und Sie bekommen etwa so ein Antwort 10,11,500,5,1,0,
Was entspricht 10 Impulsen pro Minute am Eingang1(D1) , 11 Impulsen pro Minute am Eingang2(D2) und so weiter.
Der ESP8266 WeMos Impulszähler arbeitet mit Interrupts, so werden die Impulse gezählt auch wenn WeMos gerade mit http Anfrage beschäftigt ist.
Die Impulse werden bei abfallender Flanke gezählt. Die Zähleingänge sind mit internen Pull UP Wiederständen an +3,3V gezogen und können direkt an Impulsausgang des S0 Stromzählers angeschlossen werden. S0+ an Zähleingang des WeMos, S0- an GND.
Arduino Sketch
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 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 |
#include <ESP8266WiFi.h> #include <ESP8266WebServer.h> #include <ESP8266HTTPUpdateServer.h> #include <Ticker.h> extern "C" { #include "gpio.h" #include "user_interface.h" } #define INT_PIN1 5 // Zuordnung der GPIOs #define INT_PIN2 4 #define INT_PIN3 2 #define INT_PIN4 13 #define INT_PIN5 12 #define INT_PIN6 14 unsigned long zehler[6]; unsigned long antwort[6]; // Impulse pro Minute ESP8266WebServer server(80);// Serverport hier einstellen ESP8266HTTPUpdateServer httpUpdater; Ticker Timer; void interruptRoutine1() { zehler[0]++; } void interruptRoutine2() { zehler[1]++; } void interruptRoutine3() { zehler[2]++; } void interruptRoutine4() { zehler[3]++; } void interruptRoutine5() { zehler[4]++; } void interruptRoutine6() { zehler[5]++; } void Ereignis_Index() // Anfrage vom Webbrowser { String Serverantwort = ""; // Antwort für Webbrowser vorbereiten for (int i = 0; i < 6; i++) { Serverantwort += String(antwort[i]) + ","; } server.sendHeader("Cache-Control", "no-cache"); server.send(200, "text/plain", Serverantwort); } void MinutenTimer() // Wird jede Minute ausgeführt { for (int i = 0; i < 6; i++) // Alle 6 Zehler durchgehen { antwort[i] = zehler[i]; // Zählstand in Ergebnis Wariable spechern zehler[i] = 0; // Zähler löschen für neue Zählung } } void setup() { pinMode(INT_PIN1, INPUT_PULLUP); pinMode(INT_PIN2, INPUT_PULLUP); pinMode(INT_PIN3, INPUT_PULLUP); pinMode(INT_PIN4, INPUT_PULLUP); pinMode(INT_PIN5, INPUT_PULLUP); pinMode(INT_PIN6, INPUT_PULLUP); Serial.begin(115200); Serial.println(""); Serial.println("Start"); Serial.println(""); Serial.println("Warte auf Verbindung"); WiFi.mode(WIFI_STA); // station modus verbinde mit dem Router WiFi.begin("MeineHomeWLAN", "MeinWLANpasswort"); // WLAN Login daten WiFi.hostname("ESP-Zaeler"); // Warte auf verbindung int timout = 0; while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("O"); timout++; if (timout > 20) // Wenn Anmeldung nicht möglich { Serial.println(""); Serial.println("Wlan verbindung fehlt"); break; } } if (WiFi.status() == WL_CONNECTED) { Serial.println(""); Serial.println("Mit Wlan verbunden"); Serial.println("IP Adresse: "); Serial.println(WiFi.localIP()); } server.on("/", Ereignis_Index); // Bechandlung der Ereignissen anschlissen httpUpdater.setup(&server); // Updater server.begin(); // Starte den Server Serial.println("HTTP Server gestartet"); Timer.attach(60, MinutenTimer); // Starte den 60s Timer // ---------------------- Starte Interrupts --------------------------------------------- attachInterrupt(INT_PIN1, interruptRoutine1, FALLING); attachInterrupt(INT_PIN2, interruptRoutine2, FALLING); attachInterrupt(INT_PIN3, interruptRoutine3, FALLING); attachInterrupt(INT_PIN4, interruptRoutine4, FALLING); attachInterrupt(INT_PIN5, interruptRoutine5, FALLING); attachInterrupt(INT_PIN6, interruptRoutine6, FALLING); } void loop() { server.handleClient(); } |
Schaltplan
webmaster_x_esp8266-server.de |