Der ESP32-Faden

Der chaotische Hauptfaden

Moderatoren: Heaterman, Finger, Sven, TDI, Marsupilami72, duese

Profipruckel
Beiträge: 1506
Registriert: Di 13. Aug 2013, 19:10
Wohnort: Niedersachsen Süd-Ost

Re: Der ESP32-Faden

Beitrag von Profipruckel »

Ich habe mal den Fehler begangen, mir von Heise das ESP32-Sonderheft zu kaufen.
Ganz nett, aber zuerst einmal fehlt eine Beschreibung, wie man das Ding dazu bringt, aus der Arduino-IDE einen Softwareupload zu akzeptieren. Das im Heft beschriebene BASIC ist nicht erreichbar, weil die Steine bereits geflasht sind.

Es passierte genau das. was ich mir ersparen wollte: Eine Internetrecherche.
Letztendlich habe ich mich mit dem Vertrieb gestritten und eine gehörige Rückerstattung bekommen. alles gut.

Hätte ich mit einem ESP vom Ali günstiger haben können, da habe ich baugleiche Boards um 4 Euro nachgekauft :-(

Falls jemand lesen mag, schadet zumindest nicht, ich habe es bei https://de.downmagaz.net/digital_magazi ... -2019.html gefunden.

Mal geholt und kopiert, da geht der Download etwas fixer und ohne CaptchaDreck:
https://1fichier.com/?cu5sai2xyhut4x2y1qpd
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

In dem Zusammenhang bin ich auf das hier gestoßen: https://github.com/me-no-dev/ESPAsyncWebServer
Unter den Beispielen ist eines, das sich asyncFSBrowser nennt, welches (scheinbar) irgendeine Webseite ausliefern soll. Dabei sind einige Dateien mit HTML, CSS und JS-Kruscht. Mir ist nur überhaupt nicht klar, wie das gehen soll. Ich habs für nen NodeMCU compiliert, aber der hat ja (nativ) kein Dateisystem. Ich finde aber auch nichts, was GENAU dieses Beispiel da macht. Kann mir da mal jemand auf die Sprünge helfen?
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Guckst du hier:
https://randomnerdtutorials.com/install ... duino-ide/

Im Prinzip erstellst einen Ordner data in deinem Sketch und das Plugin generiert daraus das Filesystem und läd es anschließend hoch. Dein Programm braucht nur noch das Dateisystem öffnen und dann kann man auf alle Dateien zugreifen.

Grüße Jan

Edit meint:
Es gibt 2 Dateisysteme und 2 Plugins einmal SPIFFS und LittleFS. Beim Esp32 ist letzteres Standard.
Viele Beispiele funktionieren auch mit dem jeweiligen anderen... wenn man die Header und die Klassenobjekte tauscht.
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

OK, soweit klar. Ich solte dazu sagen, das ich gerade mit nem NodeMCU unterwegs bin. LittleFS zickt aber tierisch rum, oder eher das Upload-Tool für die Arduino-Ide. Das glänzt hartnäckig durch die Meldung "mklittefs not found". Soweit ich da durchsteige fehlt irgendein Executable, aber wo zum ***FCK*** kriege ich das her? Gibt wohl noch mehr Leute mit dem Problem, aber ganz ehrlich: kann mir da mal jemand auf die Sprünge helfen?

Zum Beispiel hier: https://www.arduinoforum.de/arduino-Thr ... -exe-nicht. Der Mann muss das ja irgendwo hergezaubert haben... Alles sehr intransparent...
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Also das Problem. Ja dass ist Arduino IDE Version 1.8.x spezifisch.
Bei der IDE wurden die Target-Ordner umgestellt, das wurde wohl immer noch nicht in dem Plugin mitgezogen seit 2017.
Die Exe fehlt nicht, die liegt für diese Version nur am falschen Ort.
Wo die genau hin muss kann ich dir nicht mehr sagen,
dass Wissen wurde vor 2 Monaten begraben,
als ich meinen letzten PC auf Linux umgestellt habe.
Du kannst dir via sysinternals mit den ProcessMonitor angucken auf welchen Pfad die IDE versucht aufzurufen und die Exe in das Verzeichnis kopieren.
So hatte ich das damals gelöst. Dann solle das ohne Probleme laufen.

Alternativ kann man auch die Sourcen von dem Plug-in ziehen und den Pfad dort modifizierten.

Edit: Noch was
Bevor du das FS hochladen kannst musst du den SerialMonitor schließen. :mrgreen:

Grüße Jan
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

Das ist ja das bekloppte....es gibt hier keine Datei namens mklittlefs.exe oder sonstwas. Auf der lokalen Platte ist diese Datei nicht vorhanden. Woher soll die kommen?
LIegt der Kram in der Boardverwaltung? Gerade mal ein Update gemacht, auch die IDE ist auf letztem Stand *kratzamkopf*
Edit: Boardverwaltung, nach dem Update lag das Scheisserchen da drin...
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

Noch eine Verständnisfrage... Dateien hochladen und dann Sketch kompilieren und hinterherschieben? Beiben die Dateien erhalten?
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Finger hat geschrieben: So 31. Jan 2021, 22:33 Noch eine Verständnisfrage... Dateien hochladen und dann Sketch kompilieren und hinterherschieben? Beiben die Dateien erhalten?
Jo solange du keinen Mass-erase anstößt oder du das Partitions-Schema nicht änders, bleiben Programm und Filesystem erhalten.
Die können dann unabhängig von einander programmiert und ausgetauscht werden.


Grüße
Jan
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

Ich hab mal auf der Basis o.g. Zeitschrift und eigenem Gefummel mal auf nem NodeMCU was zusammengestoppelt. Liefert jetzt eine Webseite mit dem Zeug für canvas-Gauges aus (siehe o.g. Heft, da drin ist ein Beispiel, Kapitel WLAN), konkret also ein Zeigerinstrument, welches einen Wert anzeigt. Wie zum Geier krieg ich das denn jetzt hin, das das laufend aktualisiert wird, der Zeiger sich also bewegt ohne das ich die Seite neu laden muss?
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Radial Gauge und Ajax bzw. jquery sind deine Freunde.

In Prinzip eine Gauge erstellen und via jquery die Werte nachladen. Der Webserver muss dazu eine REST-API bereitstellen. Und die Fähigkeit besitzen Dateien auszuliefern. Klingt alles komplizierter als es ist. Beides kann asyncWebserver gleichzeitig.

Sieht dann so aus:
https://fingers-welt.de/phpBB/viewtopic ... ot#p334388

Hier noch ein paar links.

https://canvas-gauges.com/docs/2.0.0/cl ... Gauge.html

https://jquery.com/

Grüße Jan
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

OK, ich hab ein wenig quer gelesen zum Thema Ajax und jquery, aber ich bin noch ein gutes Stück weg davon, selber funktionierenden Code in der Hinsicht zu schreiben. Ich machs mal konkret. Das hier ist die Index.html, ausgeliefert zusammen mit dem Javascript-Schnipsel vom ESP8266:

Code: Alles auswählen

<!doctype html>
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Gewächshaus</title>
    <script src="gauge.min.js"></script>
</head>
<body style="background: #222">


<hr>
<canvas data-type="radial-gauge"
    data-width="500"
    data-height="500"
    data-units="°C"
    data-title="Gewächshaus"
    data-min-value="-50"
    data-max-value="50"
    data-major-ticks="[-50,-40,-30,-20,-10,0,10,20,30,40,50]"
    data-minor-ticks="2"
    data-stroke-ticks="true"
    data-highlights='[ {"from": -50, "to": 0, "color": "rgba(0,0, 255, .3)"},
        {"from": 0, "to": 50, "color": "rgba(255, 0, 0, .3)"} ]'
    data-ticks-angle="225"
    data-start-angle="67.5"
    data-color-major-ticks="#ddd"
    data-color-minor-ticks="#ddd"
    data-color-title="#eee"
    data-color-units="#ccc"
    data-color-numbers="#eee"
    data-color-plate="#222"
    data-border-shadow-width="0"
    data-borders="true"
    data-needle-type="arrow"
    data-needle-width="2"
    data-needle-circle-size="7"
    data-needle-circle-outer="true"
    data-needle-circle-inner="false"
    data-animation-duration="1500"
    data-animation-rule="linear"
    data-color-border-outer="#333"
    data-color-border-outer-end="#111"
    data-color-border-middle="#222"
    data-color-border-middle-end="#111"
    data-color-border-inner="#111"
    data-color-border-inner-end="#333"
    data-color-needle-shadow-down="#333"
    data-color-needle-circle-outer="#333"
    data-color-needle-circle-outer-end="#111"
    data-color-needle-circle-inner="#111"
    data-color-needle-circle-inner-end="#222"
    data-value-box-border-radius="0"
    data-color-value-box-rect="#222"
    data-color-value-box-rect-end="#333"
	data-value='%TEMPERATURE%'
></canvas>

</body>
</html>
Die Zeile data-value='%TEMPERATURE%' macht mit die Schnittstelle zu meinem Sketch, im wesentlichen ein Beispiel aus dem ESPAsyncWebServer

Code: Alles auswählen

#include <ArduinoOTA.h>
#ifdef ESP32
#include <FS.h>
#include <SPIFFS.h>
#include <ESPmDNS.h>
#include <WiFi.h>
#include <AsyncTCP.h>
#elif defined(ESP8266)
#include <ESP8266WiFi.h>
#include <ESPAsyncTCP.h>
#include <ESP8266mDNS.h>
#endif
#include <ESPAsyncWebServer.h>
#include <SPIFFSEditor.h>

float Temp = 0;
unsigned long Zeit = 0;

// SKETCH BEGIN
AsyncWebServer server(80);
AsyncWebSocket ws("/ws");
AsyncEventSource events("/events");

void onWsEvent(AsyncWebSocket * server, AsyncWebSocketClient * client, AwsEventType type, void * arg, uint8_t *data, size_t len){
  if(type == WS_EVT_CONNECT){
    Serial.printf("ws[%s][%u] connect\n", server->url(), client->id());
    client->printf("Hello Client %u :)", client->id());
    client->ping();
  } else if(type == WS_EVT_DISCONNECT){
    Serial.printf("ws[%s][%u] disconnect\n", server->url(), client->id());
  } else if(type == WS_EVT_ERROR){
    Serial.printf("ws[%s][%u] error(%u): %s\n", server->url(), client->id(), *((uint16_t*)arg), (char*)data);
  } else if(type == WS_EVT_PONG){
    Serial.printf("ws[%s][%u] pong[%u]: %s\n", server->url(), client->id(), len, (len)?(char*)data:"");
  } else if(type == WS_EVT_DATA){
    AwsFrameInfo * info = (AwsFrameInfo*)arg;
    String msg = "";
    if(info->final && info->index == 0 && info->len == len){
      //the whole message is in a single frame and we got all of it's data
      Serial.printf("ws[%s][%u] %s-message[%llu]: ", server->url(), client->id(), (info->opcode == WS_TEXT)?"text":"binary", info->len);

      if(info->opcode == WS_TEXT){
        for(size_t i=0; i < info->len; i++) {
          msg += (char) data[i];
        }
      } else {
        char buff[3];
        for(size_t i=0; i < info->len; i++) {
          sprintf(buff, "%02x ", (uint8_t) data[i]);
          msg += buff ;
        }
      }
      Serial.printf("%s\n",msg.c_str());

      if(info->opcode == WS_TEXT)
        client->text("I got your text message");
      else
        client->binary("I got your binary message");
    } else {
      //message is comprised of multiple frames or the frame is split into multiple packets
      if(info->index == 0){
        if(info->num == 0)
          Serial.printf("ws[%s][%u] %s-message start\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary");
        Serial.printf("ws[%s][%u] frame[%u] start[%llu]\n", server->url(), client->id(), info->num, info->len);
      }

      Serial.printf("ws[%s][%u] frame[%u] %s[%llu - %llu]: ", server->url(), client->id(), info->num, (info->message_opcode == WS_TEXT)?"text":"binary", info->index, info->index + len);

      if(info->opcode == WS_TEXT){
        for(size_t i=0; i < len; i++) {
          msg += (char) data[i];
        }
      } else {
        char buff[3];
        for(size_t i=0; i < len; i++) {
          sprintf(buff, "%02x ", (uint8_t) data[i]);
          msg += buff ;
        }
      }
      Serial.printf("%s\n",msg.c_str());

      if((info->index + len) == info->len){
        Serial.printf("ws[%s][%u] frame[%u] end[%llu]\n", server->url(), client->id(), info->num, info->len);
        if(info->final){
          Serial.printf("ws[%s][%u] %s-message end\n", server->url(), client->id(), (info->message_opcode == WS_TEXT)?"text":"binary");
          if(info->message_opcode == WS_TEXT)
            client->text("I got your text message");
          else
            client->binary("I got your binary message");
        }
      }
    }
  }
}


const char* ssid = "xyz";
const char* password = "Jaja";
const char * hostName = "esp-async";
const char* http_username = "admin";
const char* http_password = "admin";

void setup(){
  Serial.begin(115200);
  Serial.setDebugOutput(true);
  WiFi.mode(WIFI_AP_STA);
  WiFi.softAP(hostName);
  WiFi.begin(ssid, password);
  if (WiFi.waitForConnectResult() != WL_CONNECTED) {
    Serial.printf("STA: Failed!\n");
    WiFi.disconnect(false);
    delay(1000);
    WiFi.begin(ssid, password);
  }

  //Send OTA events to the browser
  ArduinoOTA.onStart([]() { events.send("Update Start", "ota"); });
  ArduinoOTA.onEnd([]() { events.send("Update End", "ota"); });
  ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
    char p[32];
    sprintf(p, "Progress: %u%%\n", (progress/(total/100)));
    events.send(p, "ota");
  });
  ArduinoOTA.onError([](ota_error_t error) {
    if(error == OTA_AUTH_ERROR) events.send("Auth Failed", "ota");
    else if(error == OTA_BEGIN_ERROR) events.send("Begin Failed", "ota");
    else if(error == OTA_CONNECT_ERROR) events.send("Connect Failed", "ota");
    else if(error == OTA_RECEIVE_ERROR) events.send("Recieve Failed", "ota");
    else if(error == OTA_END_ERROR) events.send("End Failed", "ota");
  });
  ArduinoOTA.setHostname(hostName);
  ArduinoOTA.begin();

  MDNS.addService("http","tcp",80);

  SPIFFS.begin();

  ws.onEvent(onWsEvent);
  server.addHandler(&ws);

  events.onConnect([](AsyncEventSourceClient *client){
    client->send("hello!",NULL,millis(),1000);
  });
  server.addHandler(&events);

#ifdef ESP32
  server.addHandler(new SPIFFSEditor(SPIFFS, http_username,http_password));
#elif defined(ESP8266)
  server.addHandler(new SPIFFSEditor(http_username,http_password));
#endif
  /*
  server.on("/heap", HTTP_GET, [](AsyncWebServerRequest *request){
    request->send(200, "text/plain", String(ESP.getFreeHeap()));
  });
*/
/*
  server.serveStatic("/", SPIFFS, "/").setDefaultFile("index.html");

  server.onNotFound([](AsyncWebServerRequest *request){
    Serial.printf("NOT_FOUND: ");
    if(request->method() == HTTP_GET)
      Serial.printf("GET");
    else if(request->method() == HTTP_POST)
      Serial.printf("POST");
    else if(request->method() == HTTP_DELETE)
      Serial.printf("DELETE");
    else if(request->method() == HTTP_PUT)
      Serial.printf("PUT");
    else if(request->method() == HTTP_PATCH)
      Serial.printf("PATCH");
    else if(request->method() == HTTP_HEAD)
      Serial.printf("HEAD");
    else if(request->method() == HTTP_OPTIONS)
      Serial.printf("OPTIONS");
    else
      Serial.printf("UNKNOWN");
    Serial.printf(" http://%s%s\n", request->host().c_str(), request->url().c_str());

    if(request->contentLength()){
      Serial.printf("_CONTENT_TYPE: %s\n", request->contentType().c_str());
      Serial.printf("_CONTENT_LENGTH: %u\n", request->contentLength());
    }

    int headers = request->headers();
    int i;
    for(i=0;i<headers;i++){
      AsyncWebHeader* h = request->getHeader(i);
      Serial.printf("_HEADER[%s]: %s\n", h->name().c_str(), h->value().c_str());
    }

    int params = request->params();
    for(i=0;i<params;i++){
      AsyncWebParameter* p = request->getParam(i);
      if(p->isFile()){
        Serial.printf("_FILE[%s]: %s, size: %u\n", p->name().c_str(), p->value().c_str(), p->size());
      } else if(p->isPost()){
        Serial.printf("_POST[%s]: %s\n", p->name().c_str(), p->value().c_str());
      } else {
        Serial.printf("_GET[%s]: %s\n", p->name().c_str(), p->value().c_str());
      }
    }

    request->send(404);
  });
  server.onFileUpload([](AsyncWebServerRequest *request, const String& filename, size_t index, uint8_t *data, size_t len, bool final){
    if(!index)
      Serial.printf("UploadStart: %s\n", filename.c_str());
    Serial.printf("%s", (const char*)data);
    if(final)
      Serial.printf("UploadEnd: %s (%u)\n", filename.c_str(), index+len);
  });
  server.onRequestBody([](AsyncWebServerRequest *request, uint8_t *data, size_t len, size_t index, size_t total){
    if(!index)
      Serial.printf("BodyStart: %u\n", total);
    Serial.printf("%s", (const char*)data);
    if(index + len == total)
      Serial.printf("BodyEnd: %u\n", total);
  });
*/
 server.on("/gauge.min.js", HTTP_GET, [](AsyncWebServerRequest* request) {
    request->send(SPIFFS, "/gauge.min.js");
  });
 
  server.on("/", HTTP_GET, [](AsyncWebServerRequest* request) {
    request->send(SPIFFS, "/index.html", String(), false, replaceVariable);
  });
  
  server.begin();

  Zeit = millis ();

}

void loop(){
  ArduinoOTA.handle();
  ws.cleanupClients();

 #define TIMEOUT  200
 
 if ((Zeit + TIMEOUT) < millis ())
  {
    Zeit = millis ();
    Temp += 1;
    if (Temp > 50) Temp = -50;
  }
 
}


String replaceVariable(const String& var) {
    if (var == "TEMPERATURE") return String(Temp, 2);
  return String(); }
Die letzten drei Zeilen übermitteln also einen Wert, der in die HTML-Datei eingebaut wird. Wenn ich das richtig verstanden habe, ist es mit Ajax möglch, nur diese Werte zur Laufzeit auszutauschen. Soweit so gut, aber mir fehlt da ein sinnvolles Beispiel, so das ich nicht bei Null anfangen muss, insbesondere bei JS, da kenn ich nix von....
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Okay ich stelle hier mein Proof-of-Concept meiner Produktiv-Firmware zur Verfügung.
Die ist nicht super schön und für den ESP8266 funktioniert aber und enthält alles was man wissen muss.
Bitte noch die Libs auf asyncWebServer tauschen.

Da kannst du dir das Dashboard an gucken, dass musste genau das tun, was du als Beispiel erwartest.
Mit jQuery ist Ajax wirklich nur noch eine Fleißaufgabe es umzusetzen. In der ersten Version vor x Jahren hatte ich das noch in nativ JS geschrieben.

Grüße Jan
Dateianhänge
TestWebServer.zip
(204.7 KiB) 38-mal heruntergeladen
Benutzeravatar
Finger
Administrator
Beiträge: 7392
Registriert: Di 12. Jun 2012, 20:16
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Finger »

Dank dir, ich werde mir das mal reindrehen!
IPv6
Beiträge: 2166
Registriert: Fr 17. Mär 2017, 22:05

Re: Der ESP32-Faden

Beitrag von IPv6 »

Gestern ist mir die ESP8266Audio Bibliothek (https://github.com/earlephilhower/ESP8266Audio) über den Weg gelaufen. Dort gibt es das Beispiel "WebRadio" (https://github.com/earlephilhower/ESP82 ... s/WebRadio), was sehr einfach MP3 Streams abspielen kann ohne einen externen Decoder zu benutzen. Stream-URL ist bequem per Webinterface einstellbar.
Das wäre eine tolle Sachen mit einem winzigen Class-D Verstärker und einem kleinen Solarpanel. Wenn Sonne auf dem Balkon, dann kostenlose Musik!

Also gut, ESP8266 liegt noch rum, ebenso ein passender I2S DAC (PCM5102). Schnell zusammengelötet, Programm drauf und läuft mal grundsätzlich. Hängt sich aber ständig auf und spielt nicht unterbrechungsfrei. Ist der ESP8266 wohl etwas überfordert.
Das nackte Beispiel ohne Webservergedöns namens "StreamMP3FromHTTP" (https://github.com/earlephilhower/ESP82 ... P3FromHTTP) läuft schon flüssiger, aber immernoch nicht brauchbar.

Da die Bibliothek auch mit dem ESP32 funktionieren soll habe ich mir heute mal in der Verwandschaft so ein Teil besorgt. Hat ja deutlich mehr Dampf als der ESP8266, wäre ein Versuch wert ob der das besser auf die Reihe bekommt.
Nur gibt es hier das Problem, dass der Webserver nichts zu machen scheint. Firefox bringt nur die Meldung, dass der Server die Verbindung abgebrochen hat. Der ESP32 gibt ein paar Statusmeldungen über die serielle Schnittstelle aus, da sieht man dann, dass bei jedem Versuch die IP Adresse im Browser anzusurfen ein paar Daten übertragen werden, sich das mehrfach wiederholt und dann Ruhe ist. Sobald Ruhe ist zeigt der Browser eben an, dass die Verbdinung abgebrochen wurde.

Mich verwundert nun, dass zumindest mal die Webservergeschichte auf dem ESP8266 problemlos lief, auf dem ESP32 aber überhaupt nicht.
Sind da jemand Stolperfallen bekannt, die dazu führen, dass der selbe Code auf einem ESP8266 läuft aber auf dem ESP32 nicht? Vermutlich unterscheiden sich da schon so einige Details im Arduinoframework der beiden Controllertypen.
Jemand eine Idee, was das Problem sein könnte? Es gibt im Netz einige Berichte über Probleme mit der Webserverimplementierung auf dem ESP32, die aber angeblich in neuer Versionen des Frameworks behoben sein sollen. Bei mir geht weder Version 2.0 noch 1.0.5.
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

AsyncWebserver ist die Lösung.
Problem Ursache siehe weiter oben.

Der Hauptunterschied ist das der ESP8266 ist Single-Core und der ESP32 ist Dualcore. Da funktioniert vieles anders.

VG Jan
IPv6
Beiträge: 2166
Registriert: Fr 17. Mär 2017, 22:05

Re: Der ESP32-Faden

Beitrag von IPv6 »

Hallo Jan!

Vielen Dank, das Problem ist nunhalbwegs klar.
Aber die Lösung noch nicht ganz, bzw. viel eher die Umsetzung der Lösung.
Kannst du mir auf die Sprünge helfen was ich genau anpassen muss, damit es funktionieren könnte?
Oder muss dafür der ganze Webseitenteil neu geschrieben werden? Das wäre dann vermutlich doch etwas über meinen Fähigkeiten.
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Ich würde die Webserver Lib einfach mal stumpf austauschen und gucken welche Fehler der Compiler rauswirft. Viele waren das bei meinen Anwendungsfall nicht.

Grüße Jan
IPv6
Beiträge: 2166
Registriert: Fr 17. Mär 2017, 22:05

Re: Der ESP32-Faden

Beitrag von IPv6 »

Da hört leider mein Verständnis schon auf. Ich sehe nicht, wo eine Webserver Lib eingebunden ist, die sich mit der asynchronen Variante austauschen lassen würde.
Sind das möglicherweise Funktionen, die in der ESP32 Bibliothek schon enthalten sind?
Vielleicht kannst du mal einen Blick in den von mir verlinkten Code werfen und noch einen Hinweis geben, in welchen Zeilen sind das genau abspielt?
Grundsätzlich ist das Programm ja nicht allzu riesig, aber wenn man gar nicht erst weiß wo man genauer hinschauen muss ist das doch ein recht aussichtsloses Unterfangen...:D

Edit:
Moment mal, da wurde sich doch extra ein eigener Webserver geschrieben und mit eingebunden, der gemäß Kommentar extra wenig RAM braucht.
Ich nehme an, dass es in dem Fall nicht so einfach ist das durch etwas Asynchrones auszutauschen?
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Ich habe mir mal deine SWLib angesehen.
Da wirkte wohl selbst Hand anlegen müssen oder alternativ hast du auch den Browser kastrieren... Parallel Conntections auf 1 stellen... geht zumindest bei FF.

Grüße Jan
Benutzeravatar
Toni
Beiträge: 2523
Registriert: Di 13. Aug 2013, 18:24

Re: Der ESP32-Faden

Beitrag von Toni »

ich habe eine ESP32-Cam Modul mit Tasmota drauf.

Wenn die Kamera aktiv ist, kackt das Ding nach ein paar Sekunden ab: dann vergisst Tasmota alle Einstellungen und meldet sich wieder jungfräulich mit Tasmota-Wlan. Wenn die Cam aus ist, läuft es stabil.

Ich habe bisher:
- C's 220uF mit 100nF parallel zwischen +5V-Gnd und +3,3V-Gnd gehängt
- alles nachgelötet
- Spannung auf 6V erhöht

keine Änderung. Habe auch keine Module zum quertauschen.

Kennt jemand das Problem?
Bildschirmfoto zu 2021-12-29 22-55-25.jpg
Benutzeravatar
Arndt
Beiträge: 2589
Registriert: Fr 28. Jun 2013, 13:42
Wohnort: einen Schritt über den Abgrund hinaus

Re: Der ESP32-Faden

Beitrag von Arndt »

Ach guck an, noch ein Leidensgenosse!
Das scheint ein generelles Problem bei dem Ding zu sein, ich habe mich zufällig heute den gnzen Tag auch damit herumgeuält...
Bei mir läuft AI-on-the-edge auf dem Ding (Wasseruhr ablesen)
Bild
Quelle: https://github.com/jomjol/AI-on-the-edge-device/wiki
Anleitung https://www.youtube.com/watch?v=mDIJEyElkAU

Aber das Webinterface ist dermaßen unzuverlässig, das ist gruselig...
Zeitweise hatte ich das Mopet dann auch am Labornetzgerät, einen brownout schließe ich daher eigentlich aus.
Ich den Foren ließt man auch immer wieder, dass sich da viele schwer tun und in den käuflich zu erwerbenden Doppelpacks scheint kategorisch auch nur eine zu funktionieren.

@Kuddel, hattest Du nicht auch schon Deine Freude damit?
Benutzeravatar
Hightech
Beiträge: 11306
Registriert: So 11. Aug 2013, 18:37

Re: Der ESP32-Faden

Beitrag von Hightech »

Hängt da mal Strom an den Eingang, das Cameramodul zieht ordentlich.
virtexultra
Beiträge: 127
Registriert: So 9. Dez 2018, 11:30

Re: Der ESP32-Faden

Beitrag von virtexultra »

Um das mit dem Brown Out auszuschließen bzw. um eine bessere Fehlermeldung zu erhalten könnte man die Ausgabe am UART0 des ESPs mithören (U0T). 8N1 115200 ist der Default Wert in dem SDK. Es kann aber sein das die Ausgabe deaktiviert oder eingeschränkt wurde, Widerstand an GPIO15 oder EFuse sind da möglich.
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der ESP32-Faden

Beitrag von Heaterman »

Hightech hat geschrieben: Fr 31. Dez 2021, 01:01 Hängt da mal Strom an den Eingang, das Cameramodul zieht ordentlich.
Das ist auch meine Erfahrung. Man sollte dem ein Netzteil spendieren, das mindestens 200 mA absolut stabil liefert. Und 5 V benutzen statt 3,3 V. Bei 3,3 V hat das Ding das Brown-Out-Problem. Ich hab ein paar dieser Dinger durch. Bei mir laufen die mit dem Standard-Webserver aus der Lib.
Ich hab so ein Ding auch in eine Modellbahn-Lok eingebaut. Ging nur über eine eigene Akkuschaltung, die wirklich stabil liefert und dann über die Fahrspannung gepuffert wird. Alle anderen Tricks mit Elko usw. haben nichts gebracht.

Einziges Problem bisher: Schaltet man den korrespondieren WLAN-AP oder das WLAN generell ab, braucht der ESP einen Neustart, wenn man das WLAN wieder zuschaltet.
Ich hab einen ESPCAM bei einem Bekannten installiert, der überwacht damit temporär sein Garagentor. WLAN des ESP reicht nicht von der Garage bis in die Wohnung, auch nicht mt externer Stabantenne. Er hat aber einen WLAN-AP 20 m daneben in der Laube (hauptsächlich für Computer und Handy im Garten), der nachts abgeschaltet wird. Beim EInschalten des AP zuckt sich der ESP erst mal nicht.
Da er sowieso einen Homematic-2-Kanal-Aktor zum Schalten des AP benutzt, haben wir den zweiten Kanal für das ESP-Netzteil genommen. Er schaltet das ESP-Netzteil ein paar Sekunden nach dem AP ein, dann handeln die Beiden aus und der ESP läuft. Alternative wäre das Schalten des ESP-Reset-Tasters per Fernsteuerung, geht auch, braucht aber einen externen, potentialfreien Relaiskontakt.


Die ESPCAMs im Doppelpack für 15 Euro sind Müll, manchmal auch die, wo der USB-Programmieradapter mitgeliefert wird. Beste Wahl bisher: das Modul von Ai-Thinker.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Fritzler »

5V statt 3,3V oder gar 6V?
Könnts sein, dass da ein LDO bzw DCDC drauf ist, der da abschmiert?
Son Kamerasensor zieht beim scannen gut Strom und WLAN auch ordentlich pulsweise beim Senden.
Kommen beide Pulse zusammen -> BÄM!

Ich hab sowas hier nicht liegen, daher müsstet ihr mal genauer erklären wie denn die Versorgung aufgebaut ist.
Dabei meine ich nicht nur euer Netzteil zu den Platinen hin, sondern wie auch die Spannungsversorgung auf den Platinen realisiert ist.
Wo bekommt das Cam Modul seinen Säft her?
Benutzeravatar
Heaterman
Beiträge: 3990
Registriert: Fr 28. Jun 2013, 10:11
Wohnort: Am Rand der Scheibe, 6 m unter NN

Re: Der ESP32-Faden

Beitrag von Heaterman »

Hier die Schaltung von Ai-Thinker:

https://docs.ai-thinker.com/_media/esp3 ... am_sch.pdf

Wenn man sie nicht braucht, ist es auch ganz nützlich, die Blitz-LED abzuhängen. Das Ding zieht gewaltig Strom und wird auch für Signalisierungen benutzt. Das kann auch Einbrüche verursachen.
Benutzeravatar
Fritzler
Beiträge: 12579
Registriert: So 11. Aug 2013, 19:42
Wohnort: D:/Berlin/Adlershof/Technologiepark
Kontaktdaten:

Re: Der ESP32-Faden

Beitrag von Fritzler »

Werft den AMS1117 raus und ersetzt den gegen einen DCDC.
WLAN kann mal eben 300mA+ beim Senden ziehen.
(5V - 3,3V) * 0,3A -> 0,5W Ptot und im SOT223 hat der 90°C/W wenn man dem ne dicke Massefläche gibt.
Dazu dann noch die restliche Schaltung.
Der kann durchaus zu heiß werden und dann abschalten.
Benutzeravatar
Toni
Beiträge: 2523
Registriert: Di 13. Aug 2013, 18:24

Re: Der ESP32-Faden

Beitrag von Toni »

Das Problem scheint tatsächlich von der 3,3V Stabilisierung zu kommen.
Es läuft lange Zeit stabil wenn 3,3V extern eingespeist wird oder wenn "5V" mit 6V versorgt wird und gleichzeitig ein C=2000uF über 3,3V gehängt wird.

Allerdings nur in der Grundkonfiguration. Sobald ich einen Ausgang konfiguriere, wird Tasmota wieder jungfräulich. Hatte es mit mehreren Ausgängen probiert, jedoch ohne die Cam Belegung zu beachten. Evtl. werden diese Pins von Cam verwendet. Muss ich bei Gelegenheit mal genauer schauen...
Dateianhänge
Screenshot_20211231-135029_Vivaldi Browser.jpg
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Das Engelshaar in den meisten USB-Kabel ist zu dünn.
0.5 mm2 dürfte das dann schon mindestens sein.

Übertreiben große Cs sind auch eher kontraproduktiv.
Besser ist hier Low-ESR.

Grüße Jan
Benutzeravatar
Toni
Beiträge: 2523
Registriert: Di 13. Aug 2013, 18:24

Re: Der ESP32-Faden

Beitrag von Toni »

Aaaalso wie es der Zufall will: vorhin lag ein Umschlag mit 2x ESP32 CAM im Briefkasten. Optisch identisch zu Altem

Gleich mal an den Komposter gehängt und gleiche Tasmota Version draufgeschoben.

Beide funktionieren stabil an 5V über USB
Beide funktionieren stabil an 3,3V direkt

Ohne weitere C's
An beiden lassen sich Ausgänge konfigurieren ohne dass es abstürzt
An beiden kann ich LED anschalten (auch bei USB 5V) ohne dass es abstürzt
Beide zeigen etwa 20° weniger ESP Temperatur an als das Alte.

=> das alte Modul hat ein Problem :evil:
Jannyboy
Beiträge: 1406
Registriert: So 11. Aug 2013, 14:49
Wohnort: Kreis Augsburg

Re: Der ESP32-Faden

Beitrag von Jannyboy »

Es gibt mehrere Versionen... je nach Hersteller.
Die alten haben meisten einen linearen Spannungsregler und die neueren einen DCDC.

Grüße Jan
Antworten