So, hier mein Sketch.
Wie gesagt, wenn ich alles was mit StopWatch zu tun Kommentiere ( // )
läuft der Sketch ohne Fehlermeldung durch.
Vielleicht liegt es auch an meiner Arduino IDE (1.8.12)...
/*
*
* Impulse vom Stromzähler zählen und in DB speichern.
* Mit Zählerstand aus DB lesen nach Stromausfall
*
* 09.09.2020
* Version 01
*
*/
#include <ESP8266WiFi.h>
#include <WiFiClient.h>
const char* ssid = "idefix"; // << kann bis zu 32 Zeichen haben
const char* password = "############"; // << mindestens 8 Zeichen jedoch nicht länger als 64 Zeichen
IPAddress ip(192,168,178,212);
IPAddress gateway(192,168,178,1);
IPAddress subnet(255,255,255,0);
IPAddress dns(192, 168, 178, 1);
IPAddress server(192, 168, 178, 111); // IP-Adresse des Servers
WiFiClient client;
char host[] = "192.168.178.111"; // Domain
char url[] = "/Arduino/Strom/insert.php"; // Pfad zur insert1.php
char key[] = "ch5fn7sb"; // PW für DB
char lesen[] = "/Arduino/Strom/read.php"; // Pfad zur read.php
char buffer[10]; // puffer initialisieren mit leerem string
volatile int zustand = 0;
const int SoeinsPin = 2; // Initalisierung S0 für Zähler 1
double impuls = 0; // Impulsarray zum Zählen der Impulse
double zeit;
unsigned long watt;
float ZStand_DB; // Zählerstand aus DB
float ZStand_Neu; // Zählerstand Neu
float KWh_ist = 251.950; // Hier die gesamt KWh eintragen !! 251,6 gemessen am 25.5.2014 21:15Uhr
float kwh = 0.000; // Variable Kilowattstunden gesamt
float ZStand_0; // DB Eintrag leer bzw. keine Verbindung
char tmp1[16];
// StopWatch läuft nicht
#include <StopWatch.h>
StopWatch MySW;
StopWatch SWarray[5];
void setup() {
Serial.begin(115200);
delay(1000);
WiFi.config(ip, dns, gateway, subnet);
WiFi.setAutoConnect(false);
WiFi.mode(WIFI_STA);
WiFi.begin(ssid, password);
while (WiFi.waitForConnectResult() != WL_CONNECTED) {
Serial.println("Connection Failed! Rebooting...");
delay(5000);
ESP.restart();
}
delay(500);
if(client.connect(server, 80)) // LCD Anzeige Server verbindung
{
delay(2000);
Serial.print(F("Lese aus DB ..."));
delay(500);
daten_laden(); // DB auslesen beginnen
delay(4000);
ZStand_DB =atof(buffer)/1000; // durch 1000 teilen, weil in der read.php multipliziert wird (*100)
Serial.print("DB:");
Serial.print(ZStand_DB,3); // aktueller Zaehlerstand
//delay(2000);
} else {
Serial.print(F(">>> Kein LAN <<<"));
client.flush();
client.stop();
}
//pinMode(SoeinsPin, INPUT); // Definieren was SoeinsPin ist (Ein o. Ausgang?)
//attachInterrupt(0, zaehleneins, FALLING); //Interrupt wird ausgelößt bei Positiver Flanke und springt in Programm zaehlen1 0 = DigitalPin 2
}
void loop() {
if(zustand == 1) {
for (int i = 0; i < 1; i++) {
float kwh_db = (kwh,3);
float watt_db = watt;
Daten_senden(kwh_db, watt_db);
Serial.println("Sende Daten...");
Serial.print("KWH = " );
Serial.println(tmp1);
zustand = 0;
}
}
}
void zaehleneins() //Unterprogramm zum Impulse Zählen
{
MySW.stop();
zeit = MySW.elapsed();
MySW.reset();
MySW.start();
impuls = impuls + 1;
kwh = (impuls / 500) + ZStand_DB; //KWh_ist;
//kwh = impuls / 500;
dtostrf(kwh, 1, 3, tmp1);
Serial.print("KWh = ");
Serial.print(tmp1);
watt = 3600 / (zeit / 2000);
//watt = 3600000 / millisBetween;
Serial.print("\t Watt = ");
Serial.println(int(watt));
zustand = 1;
}
void Daten_senden(float kwh_db, float watt_db) // Sende Daten zur DB
{
if (client.connect(server, 80))
{
Serial.println(F("Verbunden, Sende Daten..."));
client.print(F("GET "));
client.print(url);
client.print(F("?kwh="));
client.print(kwh,3);
client.print(F("&watt="));
client.print(watt);
client.print(F("&key="));
client.print(key);
client.println(" HTTP/1.1");
client.print("Host: ");
client.print(host);
client.println();
client.println("User-Agent: Arduino");
client.println("Connection: close");
client.println();
client.flush();
client.stop();
}
else
{
Serial.println(F(" ***** VERBINDUNGSAUFBAU NICHT MÖGLICH *****"));
}
}
void daten_laden() // DB Abfragen
{
int index = 0; // zaehlindex auf 0 setzen
client.connect(server, 80); // connect to server
Serial.print(F("Verbinde ... , lade Daten "));
delay(5000);
if (client.connected()) { // wenn connected, request senden
client.print(F("GET "));
client.print(lesen);
client.println(F(" HTTP/1.1"));
client.print(("Host: "));
client.print(host);
client.println();
client.println();
Serial.print(F("Daten geladen..."));
delay(1500);
}
else {
Serial.println(F("Keine Verbindung..."));
client.flush();
client.stop();
}
while (client.available() && client.read() != '
Danke das Ihr euch das anschaut
Gruß
Stefan); // Lese solange Bytes aus der Verbindung und wirf sie weg bis ein $ gefunden wird.
while (client.available() && index < 10) { // einlesen der Nutzdaten. Aufpassen, das wir die Arraygrenze nicht überschreiten
buffer[index++] = client.read(); // solange zeichen vorhanden sind, das aktuelle zeichen in puffer schreiben und zaehlindex erhoehen
}
buffer[index] = 0; // wenn keine zeichen mehr vorhanden, dann puffer am letzten (schon erhoehten) index auf
client.stop();
}
Danke das Ihr euch das anschaut
Gruß
Stefan