HTML-Ausgabe von ESP8266 D1 Mini + DHT 11 Temperatursensor auf Webseite

Jawohl. Gefunden und geändert.

Was soll ich sagen. Ich fasse es nicht, aber es funktioniert.

Man, was habe ich genervt. Sorry dafür. Aber ich habe wirklich bei Null angefangen. Mit fast 60 Jahren ist das nicht mehr so einfach. Dauert alles was länger und manche Sachen habe ich immer noch nicht verstanden. Aber irgendwie hat mich das jetzt gepackt.

Kann sein, dass ich nochmal kurz wegen des Tiefschlafes des ESP nerve. Der wird ja an eine Batterie angeklemmt und soll eine Stunde in den Tiefschlaf. Dann hochfahren, die Daten einmal übermitteln und dann wieder in den Tiefschlaf gehen. Ach, ich trau mich einfach. Gibt es dafür was Gutes, was ich umsetzen kann. Also irgendwo nee passende Anleitung dazu?

Und wenn du keine historischen Werte brauchst sondern nur den letzten, dann ändere noch den öffnungs-Modus zum schreiben von append auf write.

Wegen Tiefschlaf:
Google nach esp8266 deepsleep und vergiss die Brücke zwischen Reset und D0/GPIO16 nicht bzw. auf einigen NodeMCU kannst du auch einen Lötpunkt/Lötbrücke setzen.

Google werde ich morgen mal danach durchsuchen.

Wo stelle ich dass von append auf write um? Habe alle php Dateien durchsucht und auch den Sketch. Stolpere aber nicht darüber. Wahrscheinlich überlesen.

beim schreiben der Datei ... also in den entry dateien.
welche? ... na vermutlich im Model
wo? beim File öffnen

also etwas mehr kannst dich schon mit den ganzen Zusammenhängen befassen.
Fast jede zweite Zeile ist kommentiert. Lesen musst du das schon selber.

https://www.php.net/manual/de/function.fopen.php

Nun, auch das ist keine böse Absicht. Ich habe alle Beispiel-php-Dateien nach dem Begriff append durchsucht. Da in der entry_m.php aber in der Auskommentierung ein

open file for appending.

steht, habe ich es einfach überlesen. Mit a+ konnte ich zu dem Zeitpunkt gar nichts anfangen.

Aber, dank Deines letzten Hinweises und dem Link zum Thema fopen, habe ich es jetzt verstanden. a+ ist ein mode Parameter. a steht wohl für appending (was ja wohl übersetzt anhängen heißt). Zudem werden beim Thema fopen alle mode Parameter erklärt, so dass ich mir ziemlich sicher bin, das ich a+ auf w+ ändern muss.

Hätte ich vielleicht auch drauf kommen können, wenn ich mir die Anleitung auf der rothschopf-Seite nochmal aufgerufen hätte. Da steht es eigentlich sehr gut bei „Die Business Logik entry_m.php (Model) erklärt.

Hallo,

ich brauche nochmal eure Hilfe.

Mittlerweile bin ich auf einen ESP8266 NodeMCU umgestiegen und verwende da das GY-BME280 Modul um Temperatur, Luftfeuchtigkeit und Luftdruck zu empfangen. Zudem ein 1,3 '' OLED IIC Display.

Das läuft auch soweit. Nur der Einbau des Sketchs WiFiClientSecure.h klappt nicht. Aber genau den brauche ich ja, um die Werte von Temperatur, Luftfeuchtigkeit und nun auch Luftdruck zu meinem Webserver zu übermitteln.

Ich habe den Sketch so eingebaut wie bei dem ESP8266 D1 Mini. Dort funktioniert er ja. Aber hier kommt es bei der Überprüfung zu Fehlermeldungen.

Ich habe die mal als gezippte Textdatei angehängt. Und natürlich den kompletten Sketch ebenfalls gezippt.

Was mache ich da falsch?

Ergänzung: Können das wieder Klammerfehler sein? Werde ich auf jeden Fall mal überprüfen.

fehler.txt (102 KB)

Sketch Stand 2.4.2021.txt (14.8 KB)

zum dritten mal:

drück STRG-T

dann siehst du dass die Zeilen rund um 234 auf einer falschen Ebene außerhalb von Setup - außerhalb von loop sind...

Sorry, ich war einfach zu langsam.

Als ich das gepostet hatte, viel mir sofort das mit den Klammern ein. Hatte das Posting dann noch schnell ergänzt, aber da hast Du mich korrekt noch einmal an STRG-T gedrückt.

Zu schnell von mir gepostet. Der Fehler ist behoben. Tut mir Leid und trotzdem noch einmal vielen, vielen Dank.

Jetzt habe ich aber tatsächlich ein Problem, wo ich schon seit gut einer Stunde die Suche benutze und nichts finde.

Wie kriege ich die Werte von:

bme.readTemperature();

und

bme.readHumidity()

auf eine Stelle nach dem Komma,

und wie den Wert von

bme.readPressure()/100.0F

ohne eine Kommazahl angezeigt?

Suche mal nach sprintf oder besser snprintf. Auf den ESP wird da ja auch float unterstützt.

Gruß Tommy

OK, also sprintf. erscheint nirgendwo, aber sprintf und zwar hier:

void drawDateTime(OLEDDisplay *display, OLEDDisplayUiState* state, int16_t x, int16_t y) {
  now = time(nullptr);
  struct tm* timeInfo;
  timeInfo = localtime(&now);
  char buff[16];


  display->setTextAlignment(TEXT_ALIGN_CENTER);
  display->setFont(ArialMT_Plain_10);
  String date = WDAY_NAMES[timeInfo->tm_wday];

  sprintf_P(buff, PSTR("%s, %02d/%02d/%04d"), WDAY_NAMES[timeInfo->tm_wday].c_str(), timeInfo->tm_mday, timeInfo->tm_mon + 1, timeInfo->tm_year + 1900);
  display->drawString(64 + x, 5 + y, String(buff));
  display->setFont(ArialMT_Plain_24);

  sprintf_P(buff, PSTR("%02d:%02d:%02d"), timeInfo->tm_hour, timeInfo->tm_min, timeInfo->tm_sec);
  display->drawString(64 + x, 15 + y, String(buff));
  display->setTextAlignment(TEXT_ALIGN_LEFT);
}

und hier:

void drawHeaderOverlay(OLEDDisplay *display, OLEDDisplayUiState* state) {
  now = time(nullptr);
  struct tm* timeInfo;
  timeInfo = localtime(&now);
  char buff[14];
  sprintf_P(buff, PSTR("%02d:%02d"), timeInfo->tm_hour, timeInfo->tm_min);

  display->setColor(WHITE);
  display->setFont(ArialMT_Plain_10);
  display->setTextAlignment(TEXT_ALIGN_LEFT);
  display->drawString(0, 54, String(buff));
  display->setTextAlignment(TEXT_ALIGN_RIGHT);
  String temp = String(currentWeather.temp, 1) + (IS_METRIC ? "°„C" : "°„F");
  display->drawString(128, 54, temp);
  display->drawHorizontalLine(0, 52, 128);
}

Und was mach ich jetzt? :-*

Also die Werte auf dem OLED werden bei Temperatur, Luftfeuchtigkeit und Luftdruck werden mit einer Stelle nach dem Komma ausgegeben. Mir geht es um die Weitergabe über WiFiClientSecure.h an meinen Webserver. Da kommen bei der Temperatur, Feuchtigkeit und Luftdruck zwei Stellen nach dem Komma an. Aber bei Temperatur und Feuchtigkeit sollen da nur eine Stelle ankommen und bei Luftdruck gar keine.

siegbert:
Und was mach ich jetzt? :-*

Eine Magie analog zu der beim Datum anwenden (der "buff" ist dann ja wieder frei):

  display->setTextAlignment(TEXT_ALIGN_RIGHT);
  //sprintf(buff, "%f.1%s", currentWeather.temp, (IS_METRIC ? "°„C" : "°„F"));
  snprintf(buff, 15, "%f.1%s", currentWeather.temp, (IS_METRIC ? "°„C" : "°„F"));
  display->drawString(128, 54, buff);

siegbert:
Und was mach ich jetzt? :-*

Evtl. mal ein paar Grundlagen lernen und nicht warten, bis Dir alles vorgekaut wird.
sprintf, snprintf, Formatspezifikationen.
Einfach mal eine Suchmaschine benutzen.

Gruß Tommy

@siegbert: Ich habe nochmal ein klein wenig gegrübelt.
Die "sprintf"-Magie würde zwar funktionieren, mein Beispiel war aber auf das Display gemünzt und Du brauchst es ja am Webserver. Außerdem geht es wohl auch einfacher.
Du hast doch die Anregung von Werner aus Post #77 umgesetzt, Bestätigung in #78. Das ging so:

String url = "/iot/entry.php?board=0&uptime=42&adc=1&pin1=1"; // lass mal pin2 weg
url +="&pin2=";
url +=dhtTemperaturVariableWieSieAuchImmerHeissenMag;

Da wird beim Anhängen an 'url' eine implizite Konvertierung der float-Variable mit dem langen Namen nach String vorgenommen, vermutlich mit zwei Nachkommastellen als Default. Das lässt sich auch explizit mit Angabe der Nachkommastellen erledigen:

String url = "/iot/entry.php?board=0&uptime=42&adc=1&pin1=1"; // lass mal pin2 weg
url +="&pin2=";
url +=String(dhtTemperaturVariableWieSieAuchImmerHeissenMag, 1);

Der Wert selbst könnte natürlich auch aus einem Funktionsaufruf von einer Sensor-Library oder so kommen.

@wno158: Vielen Dank für die tolle Hilfe. Das funktioniert echt super.

Ich hoffe, dass die ganzen Tipps hier in der Zukunft denen helfen wird, die die gleichen Probleme wie ich haben und eine möglichst schnelle Hilfe brauchen, ohne tage- oder wochenlang Basiswissen zu erlernen.

Natürlich sollte es ein "muss" sein, Basisgrundwissen zu haben. Das werde ich sicherlich in der nächsten Zeit gerne intensiv vertiefen. Den wie heißt es so schön. Übung macht den Meister.

In diesem Sinne noch einmal vielen Dank für alle tollen Tipps.

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