<Solved> StopWatch.h geht nicht auf Wemos D1 mini

Hallo allerseits,

ich habe mit Hilfe von Euch in 2015 einen S0 geschrieben der auf auf einem UNO lieft...
Bis gestern ohne Probleme... Dann hat er den geist aufgeben. :frowning:
Lange Rede kurzer Sinn, ich wollte nun den Sketch umschreiben für einen Wemos D1 mini,
aber die Bibilothek StopWatch wird wohl nicht unterstützt auf dem Wemos.

Weiß jemand welche ich als Alternative nehmen kann ?

Oder wo ich eine passende StopWatch Bibliothek für ESP2866 finde ?

Danke für Eure Hilfe

Was macht die Lib Stopwatch? (Link darauf bitte).
Falls Du damit beim ESP8266 den Watchdog ausschalten willst, das geht nicht.

Gruß Tommy

PS: Die in Deiner Signatur angegebene URL funktioniert nicht.

Hi,

also das Zählen sieht so :

void zaehlen()                              //Unterprogramm zum Impulse Zählen
 {
    MySW.stop();
    zeit = MySW.elapsed();
    MySW.reset();
    MySW.start();
    impuls = impuls + 1;
    kwh = (impuls / 500) + ZStand_DB;    //KWh_ist;
    
    dtostrf(kwh, 1, 3, tmp1);
     
    //Serial.print("KWh = ");  
    //Serial.print(tmp1);
    
    watt = 3600 / (zeit / 2000);
   
    Serial.print("\t Watt = ");
    Serial.println(int(watt));
   zustand = 1;
 }

So genau weiß ich das gar nicht mehr, was die genau macht :drooling_face:

Der komplette Sketch speichert Impulse vom S0 Bus (Stromzähler) in einer SQL Datenbank ab.
Ich denke, man braucht die Lib damit kein Impuls verloregn geht, aber das ist schon so lange her, das ich das leider nicht mehr weiß und auch nicht Dokumentiert habe.

Ok, dann war mein Gedanke mit dem Watchdog die falsche Richtung.

Gruß Tommy

Und warum zeigst du nicht den kompletten Sketch und wie Tommy schon schrieb, einen Link zu der Library ?
Dann können wir evtl. mehr sehen.

Ja Sorry, bin noch auf der Arbeit ....
Also hier ist schon mal der Link : Arduino Playground - StopWatchClass

Sketch kommt... Wobei wie gesagt, alles darin geht, wenn ich StopWatch lösche....

Ok....alles klar.

Ich habe gerade die StopWatch-Lib aus Deinem Link mit dem dort angegebenen Beispiel getestet.
Das läuft sowohl auf dem UNO, als auch auf dem ESP8266.

An der Lib kann es also nicht liegen.

Hast Du bedacht, dass der ESP8266 ein 3,3V-Prozessor ist?
Wie hattest Du beim UNO die Anbindung an die Datenbank gelöst? Die wirst Du umbauen müssen, da sie ja jetzt über WLAN gehen soll.

Gruß Tommy

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

Wie gesagt, StopWatch funktioniert auf dem ESP8266.
Kommt eine Fehlermeldung?

Ansonsten ist mir in dem Sketch zuviel auskommentiert, um mich da rein zu vertiefen.

Wenn er ohne Stopwatch funktioniert, dann nimm ihn ohne.

Gruß Tommy

Hi Tommy,

da bei dir die LIB läuft, muss es ja an meinem System liegen.
ich habe jetzt die Arduino IDE neu installiert und die Bibiliotheken neu geladen....

Und siehe da , der Skatch wird Überprüft und Geladen... Läuft...

Ok, keine Ahnung woran es lag, aber jetzt kompeliert er durch..

Danke das es getestet hast.

Schön, dass es läuft und danke für die Rückmeldung.

Gruß Tommy