INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
ESP32 WebServerModular
05.03.2020, 16:38 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2020 16:43 von db91595.)
Beitrag #1
ESP32 WebServerModular
Hi Fips,

ich habe deinen WebServerModular etwas erweitert.
(Modul: SqlConnect)
Ich möchte 1x/min einen stamp in meiner MySql-DB (WS lebt: letzter Eintrag).

Dabei ist mir aufgefallen
- ab SqlUpdate() dauert es ca. 2 sec, davon ca. 0,1 sec für das eigentliche schreiben in SqlServer.

Kannst du da mal einen Blick drauf werfen?
Braucht er die Zeit für "if (conn.connect(sql_server_ip, 3306, sqlUser, sqlPassword))"?
Lässt sich da noch etwas optimieren um Zeit zu sparen?

WebServermodular
Code:
// ****************************************************************
// Sketch Esp32 Webserver Modular(Tab)
// created: Jens Fleischer, 2018-07-06
// last mod: Jens Fleischer, 2018-12-28
// For more information visit: https://fipsok.de
// ****************************************************************
// Hardware: Esp32
// Software: Esp32 Arduino Core 1.0.0 - 1.0.2
// Getestet auf: ESP32 NodeMCU-32s
/******************************************************************
  Copyright (c) 2018 Jens Fleischer. All rights reserved.

  This file is free software; you can redistribute it and/or
  modify it under the terms of the GNU Lesser General Public
  License as published by the Free Software Foundation; either
  version 2.1 of the License, or (at your option) any later version.
  This file is distributed in the hope that it will be useful,
  but WITHOUT ANY WARRANTY; without even the implied warranty of
  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  Lesser General Public License for more details.
*******************************************************************/
// Der WebServermodular stellt den Haupt Tab dar.
// #include "SPIFFS.h" #include <WebServer.h> müssen im Haupttab aufgerufen werden
// Die Funktionalität des ESP32 Webservers ist erforderlich.
// "server.onNotFound()" darf nicht im Setup des ESP32 Webserver stehen.
// Inklusive Arduino OTA-Updates
/********************************************************************************​******/

#include <WebServer.h>
#include <ArduinoOTA.h>
#include <SPIFFS.h>

#define DEBUGGING             // Auskommentieren wenn keine Serielle Ausgabe erforderlich ist

#ifdef DEBUGGING
#define DEBUG(...) Serial.println(__VA_ARGS__)
#define DEBUG_F(...) Serial.printf("Funktion: %s meldet in Zeile: %d -> ", __PRETTY_FUNCTION__, __LINE__); Serial.println(__VA_ARGS__)
#else
#define DEBUG(...)
#define DEBUG_F(...)
#endif
WebServer server(80);

// https://arduinodiy.wordpress.com/2019/08/03/turning-led-off-and-on-on-the-esp32-camera-module-using-bluetooth/
// for use LED_BUILDIN with BT for ESP32-CAM
#define LED_BUILTIN 4 //esp32-cam licht !!! (gross & hell !!!)

String stamp = "";
struct tm timeinfo;
char timeStrBuff[20];
char secStrBuff[3];
String s1;

void setup() {
  Serial.begin(115200);
  DEBUG((String)"\nSketchname: " + (__FILE__) + "\nBuild: " + (__TIMESTAMP__) + "\n" );
  spiffs();
  admin();
  Connect();
  setupTime();      // Die Tabs die du nutzen möchtest, musst du Einkommentieren
  onboardLed();
  //  bme280();
  schaltuhr();

  pinMode(LED_BUILTIN, OUTPUT);
  
  ArduinoOTA.onStart([]() {
    //save();       //Einkommentieren wenn Werte vor dem Update gesichert werden sollen
  });
  ArduinoOTA.begin();
  server.begin();
  DEBUG("HTTP Server gestartet\n\n");
}

void loop() {
  getLocalTime(&timeinfo);
  strftime(secStrBuff, sizeof(secStrBuff), "%S", &timeinfo);
  s1 = String(secStrBuff);
  //Serial.println("s1 : '" + s1 + "'"); // abgrenzen mit ' ' um Stringlänge zu "sehen"
  
  ArduinoOTA.handle();
  server.handleClient();
  if (millis() < 0x2FFF || millis() > 0xFFFFF0FF) runtime();
  //  emailResponse();
  zeitschaltuhr();    // Die Tabs die du nutzen möchtest, musst du Einkommentieren

  // 1x/Minute: MySql-Update Messwert
  if (s1=="54")
  {
    SqlUpdate();
  }
}

SqlConnect
Code:
//SqlConnect.ino
#include <WiFi.h>

#include <MySQL_Connection.h>
#include <MySQL_Cursor.h>

WiFiClient client;

MySQL_Connection conn((Client *)&client);
char sqlUser[]       = "xxx";               // MySql connect
char sqlPassword[]   = "xxx";            // MySql connect
IPAddress sql_server_ip(x,x,x,x);    // MySql Server

void SqlUpdate()
{
  getLocalTime(&timeinfo);
  strftime(timeStrBuff, sizeof(timeStrBuff), "%Y-%m-%d %H:%M:%S", &timeinfo);
  stamp = String(timeStrBuff)
  if(WiFi.status()== WL_CONNECTED)
  {
    if (conn.connect(sql_server_ip, 3306, sqlUser, sqlPassword))
    {
      Serial.println("Running SQL-UPDATE:");
      MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
      char sqlQueryChar[256];                //WS74 = WebServer mit IP...74
      String sqlQueryStr = "UPDATE solar.Steuerung SET stampWS74='" + stamp + "' WHERE ID=1;";
      Serial.println(sqlQueryStr);
      sqlQueryStr.toCharArray (sqlQueryChar, sqlQueryStr.length()); // <-- Tommy hat recht! SQL wird mit "char" angesprochen
      cur_mem->execute(sqlQueryChar);
      Serial.println("Query executed? Please check!");
      Serial.print("SQL-Server: ");  Serial.print(sql_server_ip); Serial.print(" ");
      conn.close();
    }
  }
}

SerialMonitor
Code:
16:24:56.250 -> SQL-Server: 192.168.101.2 Disconnected.
16:25:56.126 -> Connected to server version 5.7.29-0ubuntu0.18.04.1
16:25:56.126 -> Running SQL-UPDATE:
16:25:56.126 -> UPDATE solar.Steuerung SET stampWS74='2020-03-05 16:25:54' WHERE ID=1;
16:25:56.247 -> Query executed? Please check!     //<-- gecheckt funktioniert!
16:25:56.247 -> SQL-Server: 192.168.101.2 Disconnected.
16:26:56.131 -> Connected to server version 5.7.29-0ubuntu0.18.04.1

Frage am Rande: funktioniert hier im Forum @Fips
(User "anpingen") ?

ESP32 Anfänger mit Migrations-Hintergrund (komme von RasPi & Python) Cool
Gruß aus Franken
Dietmar
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2020, 16:54
Beitrag #2
RE: ESP32 WebServerModular
Hänge mal vor if (conn.connect(sql_server_ip, 3306, sqlUser, sqlPassword)) noch eine Ausgabe rein, damit Du die reine SQL-Verbindungszeit hast.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2020, 16:55
Beitrag #3
RE: ESP32 WebServerModular
(05.03.2020 16:54)Tommy56 schrieb:  Hänge mal vor if (conn.connect(sql_server_ip, 3306, sqlUser, sqlPassword)) noch eine Ausgabe rein, damit Du die reine SQL-Verbindungszeit hast.

Gruß Tommy

mach ich, DANKE

ESP32 Anfänger mit Migrations-Hintergrund (komme von RasPi & Python) Cool
Gruß aus Franken
Dietmar
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2020, 17:06
Beitrag #4
RE: ESP32 WebServerModular
Code:
void SqlUpdate()
{
  Serial.println("Begin void SqlUpdate");
  getLocalTime(&timeinfo);
  strftime(timeStrBuff, sizeof(timeStrBuff), "%Y-%m-%d %H:%M:%S", &timeinfo);
  stamp = String(timeStrBuff);
  Serial.println("Begin if WL_CONNCTED");
  if(WiFi.status()== WL_CONNECTED)
  {
    Serial.println("Begin if conn.connect");
    if (conn.connect(sql_server_ip, 3306, sqlUser, sqlPassword))
    {
      Serial.println("Running SQL-UPDATE:");
      MySQL_Cursor *cur_mem = new MySQL_Cursor(&conn);
      char sqlQueryChar[256];                //WS74 = WebServer mit IP...74
      String sqlQueryStr = "UPDATE solar.Steuerung SET stampWS74='" + stamp + "' WHERE ID=1;";
      Serial.println(sqlQueryStr);
      sqlQueryStr.toCharArray (sqlQueryChar, sqlQueryStr.length());
      cur_mem->execute(sqlQueryChar);
      Serial.println("Query executed? Please check!");
      Serial.print("SQL-Server: ");  Serial.print(sql_server_ip); Serial.print(" ");
      conn.close();
    }
  }
}

SerialMonitor
Code:
17:00:54.023 -> Begin void SqlUpdate
17:00:54.023 -> Begin if WL_CONNCTED
17:00:54.023 -> Begin if conn.connect
17:00:56.179 -> Connected to server version 5.7.29-0ubuntu0.18.04.1
17:00:56.179 -> Running SQL-UPDATE:
17:00:56.179 -> UPDATE solar.Steuerung SET stampWS74='2020-03-05 17:00:54' WHERE ID=1;
17:00:56.312 -> Query executed? Please check!
17:00:56.312 -> SQL-Server: 192.168.101.2 Disconnected.
17:01:54.026 -> Begin void SqlUpdate

Ups!
Sehe ich das richtig
- von 17:00:54.023 -> Begin if conn.connect
- bis 17:00:56.179 -> Connected to server version 5.7.29-0ubuntu0.18.04.1
= ca. 2sec?
Dann geht die Zeit wohl für das Palaver ESP <-> SQL drauf.

ESP32 Anfänger mit Migrations-Hintergrund (komme von RasPi & Python) Cool
Gruß aus Franken
Dietmar
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2020, 17:14 (Dieser Beitrag wurde zuletzt bearbeitet: 05.03.2020 17:16 von Tommy56.)
Beitrag #5
RE: ESP32 WebServerModular
Da ist wohl Dein SQL-Server nicht der schnellste, das Connect dauert ja immer am längsten. Deshalb läßt man in der Praxis auch die Connections offen und testet sie nur. z.B. mit SELECT 1 FROM dual;

Dual ist eine Systemtabelle mit genau 1 Satz.

Also auf conn den Select absetzen, wenn keine Antwort kommt oder ein Fehlercode, dann neu connecten, sonst das Update hinterher.
Da musst Du natürlich den Returncode von execute auswerten.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2020, 17:36
Beitrag #6
RE: ESP32 WebServerModular
Danke Tommy.

Wieder a weng Hirnfutter. Mal schauen wie ich das umsetze.

Das "conn.close();" hatte in einem anderen Sketch seine Berechtigung.
Ich schau mal ob ich ohne auskomme.
Es "geht doch nicht" das da alle Minute eine 2sec-Lücke ist Big Grin

ESP32 Anfänger mit Migrations-Hintergrund (komme von RasPi & Python) Cool
Gruß aus Franken
Dietmar
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2020, 17:43
Beitrag #7
RE: ESP32 WebServerModular
Wieso ist eine Lücke, wenn Du aller Minuten sendest? Da hast Du doch genug Zeit.
Da würde ich die bestehende Version beibehalten. Selbst ein Heartbeat von 2-5 Minuten ist für einen normalen Server ausreichend.

In der Version mit neuem Connect ist das conn.close() richtig.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.03.2020, 18:21
Beitrag #8
RE: ESP32 WebServerModular
ach Tommy (seufz)

das war doch Ironie.

"Connected to server version 5.7.29-0ubuntu0.18.04.1"
Der SQL läuft seit ca. 1..2 Jahren (PC mit Ubuntu 18 neu installiert)
Da ich ziemlich regelmäßig "apt update && apt upgrade" mache sollte der MySql mit upgedatet werden (Theorie). Da werde ich mich mal "schlau" machen.

Zumindest habe ich durch dich die Ursache heraus gefunden!
Ich kann mit der aktuellen Version leben.
Vlt. mache ich auch nur alle 2min einen Eintrag.
Auf meinem "Sensor-Moni" läuft die SqlAbfrage "wert = stampWS74"
Dann ein Vergleich "if wert älter 120sec"
if true Darstellung ist rot
if false Darstellung ist normal

Wenn der WebServer mit 2sec Pause keinen Schluckauf bekommt ...
Trotzdem werde ich mich mit deiner Anregung auseinander setzen.
(Man kann nicht "zuviel" lernen) Big GrinBig GrinBig Grin

ESP32 Anfänger mit Migrations-Hintergrund (komme von RasPi & Python) Cool
Gruß aus Franken
Dietmar
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  Fehler beim Kompilieren für das Board ESP32 Dev Module. FoxFactoy 17 653 Gestern 21:56
Letzter Beitrag: bm-magic
Question esp32 Cam Blynk Busterflex 2 310 04.03.2021 19:23
Letzter Beitrag: Tommy56
  ESP32 Lora Wetterdaten 4711engel 27 1.465 01.03.2021 20:14
Letzter Beitrag: Bitklopfer
  ESP32 / DeepSleep / Akkulaufzeit ? Steinspiel 23 932 27.02.2021 20:20
Letzter Beitrag: Steinspiel
  ESP32 über OTA luemar 67 3.778 23.02.2021 22:55
Letzter Beitrag: hotsystems
  ESP32 und HC05 gk_1 5 803 22.02.2021 10:53
Letzter Beitrag: gk_1
  ESP32: Sensor via GPIO deaktivieren DivingJoe 21 1.254 18.02.2021 22:15
Letzter Beitrag: hotsystems
  Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe... Arduino4Fun 22 2.530 08.02.2021 15:34
Letzter Beitrag: ardu_arne
  ESP32 BT Master MarcelN 1 1.092 08.02.2021 01:34
Letzter Beitrag: Corvus
  ESP32 Mail Client stefan.hild@t-online.de 20 1.362 06.02.2021 22:16
Letzter Beitrag: Corvus

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste