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
Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe...
01.01.2021, 12:15 (Dieser Beitrag wurde zuletzt bearbeitet: 01.01.2021 13:08 von Arduino4Fun.)
Beitrag #9
RE: Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe...
Hallo Jan,

allen erst einmal ein gutes neues Jahr 2021.

Zu deiner Frage:
es werden immer noch beide Kerne verwendet. Jedoch werden alle WLAN und MQTT Aktivitäten auf den "System" Core 0 verschoben. Die Arduino Loop läuft weiterhin auf Core 1. Es ist auch eine eigene Task auf Core 1 eingerichtet, welche aktuell noch nicht genutzt ist, siehe Code.

Du kannst den obigen Code direkt so verwenden, ist so lauffähig.

Anpassungen:
Netzwerk Einstellungen: IP, PW, SSID und MQTT Server

Weiterhin natürlich deine MQTT Messages (Sende/Empfang) anpassen. Ich arbeite gerne mit quasi Zeitscheiben, sprich Routinen, welche zyklisch aufgerufen werden. Hier z.B. werden die MQTT Sende Botschaften alle 250ms versendet. Meist prüfe ich noch bevor ich sende, ob sich der Wert gegenüber dem letzten Zyklus geändert hat Sensoren wie Temperatur etc. werden meist in 1000ms eingelesen.
Dieses Zeitscheiben System gibt es im Code für Core 0, hier alle WLAN/MQTT Aktivitäten. Im loop() für den Rest der Anwendung. Ist dies verständlich genug? Die Systematik eignet sich eigentlich gut für eine Wetterstation, meist unterschiedlich schnelle Vorgänge, "langsame" Sensoren, zeitnahes Versenden der Netzwerkinformationen.

Gruß Arduino4Fun
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 13:45
Beitrag #10
RE: Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe...
Hallo,

ein schönes neues Jahr erstmal.
Ein Bekannter von mir hat sich da auf dem ESP32 mal ziemlich ausgetobt, Hintergrund:
64x64 HUB75-Display, untere Hälfte "Lagerfeuer" mit mit mehreren Parametern. Darüber die MorphClock und oben eine Laufschrift, die zeitweise Texte anzeigt, z.B. das aktuelle Wetter von OpenWeatherMap oder eben MQTT-Nachrichen.
Die Problematik lag hier aber darin, das zum absolut stabilen Laufen zu bekommen, weder Feuer noch MorphClock oder die Laufschricft durften irgendwo hacken o.ä.
Auch reconnects, nicht erreichbare Wetterdaten usw. mußten per event-Handlig sauber abgefangen werden, auch Zugriffe auf den Webserver des ESP32 um Parameter zu ändern usw. usw
Es läuft bei ihm bei mir und einem weiteren Bekannten jetzt seit Monaten stabil.
Ich könnte seinen Source durchuas hier anhängen, das Problem: ich steige da längst nichtmehr allzugut durch und ob ich ihn überrede, evtl. hier zu antworten, weiß ich nicht.

Zu Wetterstation: wozu sollte ich mir alle Sekunde Temparaturen bei Wetterdaten schicken lassen? Was sollte ich mit den Datenmangen anfangen wollen und können? Mein Außensensor (ESP32, BME280 und MAX44009) sendet alle 5 Minuten und ich finde das ausreichend.
Meine Innentemperaturanzeige (IN-9) bekommt per MQTT alle Minute den Wert, für mich auch das mehr als ausreichend.

Gruß aus Berlin
Michael
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 14:09
Beitrag #11
RE: Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe...
Hallo Michael,

gerne den Quelltext bereitstellen.

Zur Wetterstation: Über Konzept Datenaufnahme/-senden lässt sich trefflich streiten. Das Auslesen der Daten sollte sicher den physikalischen Zeitkonstanten angepasst sein, vielmehr ein Bereitstellen der Daten. Das bei mir den Rechner an bleibt (kein Deepsleep o.ä.) wird wie beschrieben in 1000ms gelesen (nur intern z.B. I2C Sensoren), jedoch nur bei Änderungen per MQTT Daten verteilt. Da kann es häufig für längere Zeit ruhig sein. Bei manchen Signalen erfolgt zusätzlich die Versendung auch erst nach über-/unterschreiten einer Hysterese.

Aber da gibt es viele unterschiedliche Ideen/Ansäte, je nach Anwendungszweck.

Aber nochmals, gerne den Quelltext bereitstellen. Bin interessiert, wie ihr die Robustheit erreicht habt.

Gruß Arduino4Fun
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 14:57
Beitrag #12
RE: Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe...
(01.01.2021 12:15)Arduino4Fun schrieb:  Hallo Jan,

allen erst einmal ein gutes neues Jahr 2021.
Von mir auch ein frohes Neues in Runde,
ersteinmal herzlichen Dank für Deine weiteren Erläuterungen. Schöne Idee auch mit den Zeitscheiben!
Im Zuge des Versuchs zu verstehen, was hier eigentlich passiert mit der Kernaufteilung und wie es anzuwenden ist, habe ich mal eine kleine Vorlage erstellt, mit der Bitte auf sämtliche Unverständnisse meinerseits hinzuweisen:
Code:
/*
  ESP32 Aufteilung der Kerne
*/

// Bibliotheken einbinden, Variablen definieren usw.

// ----- BEGIN FreeRTOS einrichten ------------------------------------------
TaskHandle_t  Core_0_TaskHnd;
TaskHandle_t  Core_1_TaskHnd;
// ----- END   FreeRTOS einrichten ------------------------------------------


void setup() {
  // "Hardwarenahes" Setup (Serielle Schnittstelle, Pins usw.)

  xTaskCreatePinnedToCore( CoreTask0, "CPU_0", 10000, NULL, 5, &Core_0_TaskHnd, 0 );
  xTaskCreatePinnedToCore( CoreTask1, "CPU_1", 10000, NULL, 5, &Core_1_TaskHnd, 1 );

}

void CoreTask0( void * parameter )
{
  //"Software"-Setup für Core0

  for ( ;; )
  {
    //Loop für Core0
    vTaskDelay(1);
  }
}

void CoreTask1( void * parameter )
{
  //"Software"-Setup für Core1
  for ( ;; )
  {
    //Loop für Core1
    vTaskDelay(1);
  }
}

void loop() {
  // Arduinoloop

}
Jetzt meine Frage dazu: Könnte ich nicht auch alles, was unter "//Arduinoloop" steht, auch direkt in "//Loop für Core1" schreiben und die Arduinoloop einfach leer lassen? Könnte ich "Hardware-nahes Setup" auch nur in den Kern schreiben, wo ich ihn nutze?
Sorry, wenn ich mich grad wie ein Bauer bei der Raketenentwicklung anstelle, aber ich versuche zu verstehen.
Grüße Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
01.01.2021, 15:36 (Dieser Beitrag wurde zuletzt bearbeitet: 01.01.2021 15:55 von Arduino4Fun.)
Beitrag #13
RE: Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe...
Hallo,

ich habe mir einen minimal invasiven Ansatz überlegt, bei dem halt der Core 1 arbeitslos bleibt und die komplette Applikation auf Core 0 läuft. Damit lässt sich – falls Hypothese weiterhin gültig Core 0/1 WLAN/MQTT Problem – eine bestehende SW ganz einfach portieren.

Anstatt setup() und loop() wird nun Core0_setup() und Core0_loop() verwendet.

Framework
Code:
void Core0_setup()
{
}

void Core0_loop()
{
}

// ===== Verlagerung der Aktivitäten in Core 0, Core 1 wird nicht genutzt =====
// BEGIN ----- Ab hier keine Änderung -----
void setup()
{
  xTaskCreatePinnedToCore( CoreTask0,"CPU_0",10000,NULL,1,NULL,0 );
}

void CoreTask0( void * parameter )
{
  Core0_setup();

  for (;;)
  {
    Core0_loop();
    
    vTaskDelay(1);
  }
}
void loop()
{
  delay(1);
}
// END   ----- Ab hier keine Änderung -----
// ============================================================================

Blink without delay sieht dann auf dem ESP32 mit "Core 0 only" z.B. so aus

Code:
const int ledPin    =  LED_BUILTIN; // the number of the LED pin
int       ledState  = LOW;          // ledState used to set the LED
unsigned long previousMillis = 0;   // will store last time LED was updated
const long interval = 1000;         // interval at which to blink (milliseconds)

void Core0_setup()
{
  pinMode(ledPin, OUTPUT);
}

void Core0_loop()
{
  unsigned long currentMillis = millis();

  if (currentMillis - previousMillis >= interval) {
    // save the last time you blinked the LED
    previousMillis = currentMillis;

    // if the LED is off turn it on and vice-versa:
    if (ledState == LOW) {
      ledState = HIGH;
    } else {
      ledState = LOW;
    }

    // set the LED with the ledState of the variable:
    digitalWrite(ledPin, ledState);
  }
}

// ===== Verlagerung der Aktivitäten in Core 0, Core 1 wird nicht genutzt =====
// BEGIN ----- Ab hier keine Änderung -----
void setup()
{
  xTaskCreatePinnedToCore( CoreTask0,"CPU_0",10000,NULL,1,NULL,0 );
}

void CoreTask0( void * parameter )
{
  Core0_setup();

  for (;;)
  {
    Core0_loop();
    
    vTaskDelay(1);
  }
}
void loop()
{
  delay(1);
}
// END   ----- Ab hier keine Änderung -----
// ============================================================================

Anmerkung: mit dem Ansatz läuft auch meine Applikation ohne "Hänger" bzw. "Guru"

Gruß Arduino4Fun
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.01.2021, 14:18
Beitrag #14
RE: Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe...
(01.01.2021 15:36)Arduino4Fun schrieb:  Hallo,

ich habe mir einen minimal invasiven Ansatz überlegt, bei dem halt der Core 1 arbeitslos bleibt und die komplette Applikation auf Core 0 läuft. Damit lässt sich – falls Hypothese weiterhin gültig Core 0/1 WLAN/MQTT Problem – eine bestehende SW ganz einfach portieren.

Anstatt setup() und loop() wird nun Core0_setup() und Core0_loop() verwendet.
...

Moin Arduino4Fun,
zur Info: ich habe jetzt meine Wetterstation auf Grundlage dieses Ansatzes neu gemacht (und auch endlich mein Abfrageintervall des BME280 von 2 Sekunde auf 5 Minuten geändert) und am Laufen. Ich werde berichten!
Gruß Jan
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
05.02.2021, 12:23 (Dieser Beitrag wurde zuletzt bearbeitet: 05.02.2021 12:36 von amshh.)
Beitrag #15
RE: Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe...
Hallo allerseits,

erst einmal Danke an Arduino4Fun und die anderen für ihre Hinweise .....
die bei mir leider nichts gebracht haben.
Ich habe einen Webserver mit LittleFS als Dateisystem (SPIFFS auf ESP32), AJAX-Anbindung an HTML, MQTT, Websocket und UDP.
Das Teil läuft auf einem ESP8266-12 einwandfrei.
Der gleiche Code (mit <WiFi.h>, <esp_wifi.h> statt <ESP8266WiFi.h, <WebServer.h> statt <ESP8266WebServer.h> und <ESP32httpUpdate.h> statt <ESP8266HTTPUpdateServer.h>) macht nur Ärger. Mal läuft es, mal nicht, mal kommt keine Verbindung zum Router zustande, mal doch, bricht aber nach ein paar Stunden wieder ab ohne reconnect, ganz oft kann HTML die erforderlich css, js oder Bilder nicht nachladen.... alles völlig nicht deterministisch. [Allerdings gibt es offensichtlich auch viele Anwender, die keine Probleme haben? Benutzen die alle die IDF-Toolchain?]

(In einem der letzten Beiträge kam von Tommy56 der Hinweis:
Zitat:Ich glaube, so tief ist hier noch keiner eingestiegen in den ESP32. Ich habe meine nach dem letzten instabilen Versuch erst mal wieder weg gelegt.
Da solltest Du wohl evtl. ein Issue auf Github auf machen.
Das machte mir Hoffnung darauf, dass in diesem Fall das Problem vielleicht nicht ausschließlich vor der Tastatur zu suchen ist...)

Und, wie bereits erwähnt, mit der Einschränkung auf einen Core konnte ich keinen nachhaltigen Erfolgt erzielen.

Soweit so schlecht.

Gestern erhielt ich das automatische Angebot in der platformio-Umgebung, ein Update auf den ESP32 Core 3.0.0 zu machen. Nuller-Version, nun ja, aber es gab ja nichts zu verlieren. Also installiert, Webserver übersetzt und in ESP32 geflasht.
Und es läuft alles ....?!?!
Nun, was soll ich sagen .... bisher (knapp 2 Stunden) kein Disconnect/Reconnect, auch nicht beim MQTT-Broker, was sonst (sofern es mal lief) dauernd der Fall war.
Also: Vorsichtige Hoffnung. Denn wenn es eine stabile Lösung gäbe, hätte ich schon so einiges, was ich gerne damit machen würde.

Anmerkung:
Dies ist nicht die Feststellung, dass jetzt alles gut ist, sondern höchstens die Anregung, es mit dem neuen Core 3.0.0 selbst einmal zu versuchen.

Gruß
Andree

P.S:
Der jetzige Test mit dem ESP32 fand mit der DUAL-Core Lösung statt; also ohne die weiter oben gemachten Vorschläge zur EInschränkung auf einen Core.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
06.02.2021, 12:01
Beitrag #16
RE: Erfahrungen mit ESP32 und WLAN/MQTT oder was ich beobachtet habe...
Ich geb's auf. Hat nach 20 Stunden wieder ein Disconnect vom Wifi gemacht ohne danach wieder Connect zu bekommen....
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  ESP32-Cam mit BLYNK nutzen 4711engel 2 27 Heute 20:57
Letzter Beitrag: 4711engel
  ESP32 T-Watch 2020 Lilygo AnFi 18 5.842 Gestern 19:39
Letzter Beitrag: Vapalus
  ESP32-CAM Pan Tilt 4711engel 0 97 22.07.2021 18:35
Letzter Beitrag: 4711engel
  Logging nach Serial und/oder Telnet miq19 35 4.775 22.07.2021 11:49
Letzter Beitrag: mega-hz
  Nano-nRF wie ESP für MQTT? AnFi 7 194 20.07.2021 21:09
Letzter Beitrag: hotsystems
  ESP32 und sms kpc 27 3.664 11.07.2021 10:04
Letzter Beitrag: hotsystems
  ESP32Cam und MQTT tenor 1 348 30.06.2021 21:00
Letzter Beitrag: tenor
Wink ESP32 IR Empfang auf Core0 Flarki 9 848 30.06.2021 19:00
Letzter Beitrag: Flarki
  ESP32 LED D2 blinkt schnell Harry 17 1.632 29.06.2021 19:52
Letzter Beitrag: AnFi
  2 ESP32 laufen nicht zusammen SnecxXx 5 559 24.06.2021 17:08
Letzter Beitrag: hotsystems

Gehe zu:


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