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
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  MQTT Topic abbonieren? Steinspiel 32 877 21.01.2021 22:50
Letzter Beitrag: Tommy56
  ESP32 D1mini: Schiebeschalter für was? AnFi 2 224 16.01.2021 09:16
Letzter Beitrag: AnFi
  falsches Display oder einfach nur keine Ahnung? Steinspiel 30 1.018 11.01.2021 19:48
Letzter Beitrag: Tommy56
  ESP32 Board und LCDKeypadShield kjoussen 23 799 11.01.2021 00:04
Letzter Beitrag: kjoussen
Question ESP32 als BLE client, int to 2byte Wert reisner 3 232 07.01.2021 18:13
Letzter Beitrag: Tommy56
  433MHz-WiFi-MQTT-Sender nbk83 25 1.097 04.01.2021 16:35
Letzter Beitrag: nbk83
  ESP32 über OTA luemar 58 2.230 03.01.2021 13:50
Letzter Beitrag: luemar
  WLAN Zugangsdaten von SD-Karte lesen basementmedia 12 522 02.01.2021 11:43
Letzter Beitrag: basementmedia
  Logging nach Serial und/oder Telnet miq19 15 731 31.12.2020 12:35
Letzter Beitrag: Tommy56
  Wo MQTT LogIn Daten einfügen? Steinspiel 10 651 28.12.2020 14:32
Letzter Beitrag: Tommy56

Gehe zu:


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