Wo instanziieren? Global? Funktion?

Hallo, ich habe eine Funktion, welche alle 20sek aufgerufen wird:

void tempJson() {
  http.useHTTP10(true);
  http.begin(wifiClient, "http://192.168.178.197/weather.json");
  int httpCode {0};
  float tempAussen {0.0};
  byte versuche {1};
  while (httpCode != 200 && versuche <= 3) {
    httpCode = http.GET();
    if (httpCode == 200) {
      StaticJsonDocument<1024> doc;
      deserializeJson(doc, http.getStream());
      tempAussen = doc["channel7"]["temperature"];
    }
    else {
      delay(500);
      versuche++;
    }
  }
  http.end();
}

Im Sketch am Anfang steht

#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>

WiFiClient wifiClient;
HTTPClient http;

Jetzt frage ich mich, ob es schlau ist, diese Instanziierungen(richtiges Wort?)

WiFiClient wifiClient;
HTTPClient http;

auch in die Funktion zu legen? Ja? Nein? Vielleicht?

Was ist der beste Weg und warum?

Danke euch :slight_smile:

a) ja - weil am Ende der Funktion der belegte Speicher wieder freigegeben wird.
b) aus "Prinzip" - so wenig Global wie notwendig.
c) ob es eine Funktion die bis zu 1500ms blockieren kann braucht sei dahingestellt.
da wäre vernünftiger nach jedem Versuch die Kontrolle wieder an loop zu übergeben (und halt in 500ms wieder zu probieren).

Aua...
Ja, sollte so sein!
Ist aber nur der Fall, wenn sich an das RAII Pattern gehalten wird.

Leider ist die Luft da im Arduino Umfeld relativ dünn.

In deiner Funktion tempJson im andern Thread scheint manches dafür zu sprechen das Objekt http temporär zu erzeugen, den wificlient aber eventuell global offen zu halten.
Wenn es allerdings Sinn macht, auch den httpClient permanent offen zu halten, ist "global" im Arduino-Umfeld nicht verkehrt.

Wenn bei Problemen ein "ewig" laufender Sketch auch im laufenden Betrieb das wifi-Gedöns neu initialisieren können muss, und wenn das nicht zu aufwendig ist, kann der Sketch das der Einfachheit halber auch gleich jedesmal machen.

Danke für eure Antworten :slight_smile:

Ich habe (leider mal wieder, Sorry, ich gelobe Besserung) vergessen zu erwähnen, dass es ein
ESP8266-12F ist und ich mit Core 3.1.2 kompiliere.

Falls das noch einen Unterschied macht :face_with_monocle:

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.