ESP8266 Werte von BME280 ausgeben

Guten Abend zusammen,

ich schalte mit einem ESP Relais und habe noch freie I/O Ports, welche ich für die Temperatur, LF, … Messungen nutzen möchte.

Die Serielle Ausgabe funktioniert ohne Probleme, nur weiß ich nicht, wie ich es auf dem Webserver ausgeben soll.
Ich habe schon gelesen, dass es mehrere “server.*” Befehle gibt, aber da blick ich irgendwie nicht ganz durch, welcher da für mich richtig wäre.

Weiß jemand welchen Befehl ich nutzen kann/muss, für dieses vorhaben?

Hier einmal der Code:

#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>

ESP8266WebServer server(80);

#define D1 5
#define D2 4
#define D3 0
#define D4 2
#define D5 14
#define D6 12
#define D7 13

#define Relai1 D1
#define Relai2 D2
#define Button D3
#define BME_MISO D4
#define BME_CS D5
#define BME_MOSI D6
#define BME_SCK D7

#define SEALEVELPRESSURE_HPA (1013.25)

Adafruit_BME280 bme(BME_CS, BME_MOSI, BME_MISO, BME_SCK);

int channelStatus = 1;
int test = 56;

const char* ssid  = "***";
const char* password = "***";

//---------------------------------------------------------------------Setup
void setup() {
  pinMode(Relai1, OUTPUT);
  pinMode(Relai2, OUTPUT);
  pinMode(Button, INPUT);
  Serial.begin(115200);
  Serial.println(F("BME280 test"));
  
  bool status;
  status = bme.begin();
  if (!status) {
    Serial.println("Es wurden kein BME280 Sensor gefunden!");
    while (1);
  }
  Serial.println("-- Standard Test --");
  Serial.println();
  
  Serial.print("Verbinde zu ");
  Serial.print(ssid);
  WiFi.begin(ssid,password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print("*");
  }
  Serial.println();
  Serial.println("WiFi verbunden");

  server.begin();
  Serial.println ("Webserver laeuft, warte auf ESP8266...");
  delay(10);
  Serial.println();
  Serial.println("Die IP-Adresse des Webservers lautet ");
  Serial.println(WiFi.localIP());
  
//---------------------------------------------------------------------Seiten
  server.onNotFound([](){
    server.send(404, "text/plain", "Link wurde nicht gefunden!");  
  });

  server.on("/", handleMain);
  
  server.on("/channelWechsel", handleWechsel);
}

//---------------------------------------------------------------------Loop
void loop() { 
  serialPrintValues();
  delay(1000);
  server.handleClient();
}


void handleMain() {
 server.send(200, "text/plain", "ESP Startseite"); 
 //----BME Ausgaben
}

void handleWechsel() {
  digitalRead(channelStatus);
    if (channelStatus == 1) {
      digitalWrite(Relai1, HIGH);
      digitalWrite(Relai2, HIGH);
      server.send(200, "text/plain", "Momentan auf Channel 2");
      channelStatus = 2;
    }
    else {
      digitalWrite(Relai1, LOW);
      digitalWrite(Relai2, LOW);
      server.send(200, "text/plain", "Momentan auf Channel 1");
      channelStatus = 1;
    }
}

void serialPrintValues() {
  Serial.print("Temperatur = ");
  Serial.print(bme.readTemperature());
  Serial.println(" *C");

  Serial.print("Luftdruck = ");

  Serial.print(bme.readPressure() / 100.0F);
  Serial.println(" hPa");

  Serial.print("Approx. Altitude = ");
  Serial.print(bme.readAltitude(SEALEVELPRESSURE_HPA));
  Serial.println(" m");

  Serial.print("Luftfeuchtigkeit = ");
  Serial.print(bme.readHumidity());
  Serial.println(" %");

  Serial.println();
}

Im Anhang noch der Schaltplan

*Der Button soll für das schalten des Relais auch ohne Web sein

Danke im vorraus! :slight_smile:

anlagen_switch_schaltplan.png

Wie wäre es mit "server.send(200, “text/html”, Variable);

Gruß Fips

Habe ich schon versucht, leider ohne Erfolg. :frowning:
Ich mache es gleich nochmal, damit ich die Fehlermeldung hier geben kann.

Derfips:
Wie wäre es mit "server.send(200, "text/html", Variable);

Das ist die Fehlermeldung:

exit status 1
converting to 'const String' from initializer list would use explicit constructor 'String::String(int, unsigned char)'

Gibt es hier keiner, der mir helfen kann? :c

Wie wäre es, wenn Du Dir ein paar Grundlagen von HTML aneignest und eine Website aufbaust, in der Deine Werte stehen. Lesetipp.

Für die Einbindung dieser Website gibt es viele Beispiele, auch in den Beispielen Deiner IDE.

Gruß Tommy

Tommy56:
Wie wäre es, wenn Du Dir ein paar Grundlagen von HTML aneignest und eine Website aufbaust, in der Deine Werte stehen. Lesetipp.

HTML kann, da ich auch selber Webseiten gemacht habe im einfachen HTML/CSS style.

Ich hab auch schon ne einfache HTML-Seite auf `nem ESP8226 gemacht.
Nur weiß ich jetzt nicht, wie ich Werte (z.B. über Variablen) anzeigen lassen kann.

EDIT: Ich habe jetzt mit Absicht keinen anderen Inhalt, damit ich erstmal in Ruhe testen kann, wie ich diese Werte anzeigen lassen kann.

Auch dazu gibt es viele Beispiele.

Entweder über Suchen/Ersetzen oder über mehrere print-Anweisungen oder meinetwegen zur Not auch über Stringverkettungen.

Es führen viele Wege nach Rom.

Gruß Tommy

Tommy56:
Auch dazu gibt es viele Beispiele.

Entweder über Suchen/Ersetzen oder über mehrere print-Anweisungen oder meinetwegen zur Not auch über Stringverkettungen.

Ich habe längere Zeit gesucht, um eine Lösung zu finden, aber nichts gefunden, was mir geholfen hat.
Ich habe es auch schon mit dem "client.print();" versucht, aber dann bekomme ich immer die Meldung, dass "client" nicht definiert wurde.

Deswegen frage ich hier im Forum, ob mir jemand helfen kann mit einem Beispiel.
Strings kamen mir auch schon in den Sinn, aber ich weiß nicht, wie ich diese so ausgeben kann.

Dann schaue Dir dsie Beispiele an, da siehst Du wo der client her kommt.

Gruß Tommy

Auch wenn es jetzt nicht zu deiner Frage passt:
Ist das obige Schaltbild dein komplettes Schaltbild ?

Wenn ja, was für Relais verwendest du ?
Und sind die tatsächlich direkt am ESP-Pin ?
Verwendest du keine Freilaufdiode ?

Alles sehr merkwürdig und wird so in Kürze deinen ESP killen !

Hallo,

schau mal unter #1 der Fips da seine Webseite angegeben da solltes Du fündig werden. In dem Beispiel aus der IDE "AdvanedWebserver" wird eine Lösung gezeigt wie man Daten in die Webseite bekommt.

basierend auf link

Wenn Du nur wenige Daten in der Webseite hast und die nicht stänig aktualisieren willst ist das sicher eine gute Lösung.

eine andere Variante findest Du hier. link und hier

Heinz

HotSystems:
Auch wenn es jetzt nicht zu deiner Frage passt:
Ist das obige Schaltbild dein komplettes Schaltbild ?

Wenn ja, was für Relais verwendest du ?
Und sind die tatsächlich direkt am ESP-Pin ?
Verwendest du keine Freilaufdiode ?

Alles sehr merkwürdig und wird so in Kürze deinen ESP killen !

Ja, ist mein kompletter Schaltplan.. Vergessen dazu zu sagen, der esp sitzt auf einem D1 Mini Board.

Und ich nutze keine Freilaufdiode.. Ich werde mich wohl nochmal über das schalten von Relais stärker informieren müssen..
Danke für den Hinweis!
EDIT: Ich nutze die RY 05W K Relais von Reichelt.

Rentner:
basierend auf link

Wenn Du nur wenige Daten in der Webseite hast und die nicht stänig aktualisieren willst ist das sicher eine gute Lösung.

eine andere Variante findest Du hier. link und hier

Ich habe zwar nur 4 verschiedene Daten, aber diese sollen schon regelmäßig aktualisiert werden. (am besten so aller spätestens alle 5 min)

Die andere Variante werde ich mir nachher mal angucken!
Danke erstmals!

Das mit deinen Relais ist Grenzwertig bis tötlich für den ESP.
Der liefert an den Pins nur max. 12mA bei 3,3 Volt. Wie soll das mit den Relais ohne Treiber funktionieren ?
Und das ohne eine Freilaufdiode.

Du solltest für deine Projekte immer vorher die Datenblätter lesen.

HotSystems:
Das mit deinen Relais ist Grenzwertig bis tötlich für den ESP.
Der liefert an den Pins nur max. 12mA bei 3,3 Volt. Wie soll das mit den Relais ohne Treiber funktionieren ?
Und das ohne eine Freilaufdiode.

Du solltest für deine Projekte immer vorher die Datenblätter lesen.

Eigentlich guck ich mir immer extra die Datenblätter an, nur dieses Mal nicht.. Ich ging davon aus, dass der ESP wie ein Arduino 5V an den I/O hat. (fragt mich nicht wieso)

Bezüglich des schalten des Relais, mir ist jetzt der Fehler wieder aufgefallen und werde es nachher ändern.
Als ich nochmal geguckt habe, viel mir wieder ein, was ich alles vergessen habe.. (habe mir extra mal die schematic von dem arduino relai Board angesehen, damit ich n relai auch richtig schämte..)
Oh man..

Na gut.....du hast ja uns. :wink:

Der ESP liefert an den Pins 3,3 Volt mit max. 12 mA.
Das bedeutet, du brauchst je Relais auch einen Transistor zur Ansteuerung des Relais mit genügend Strom und der 5V die das Relais braucht. Und die Freilaufdiode nicht vergessen

Und Achtung:
Der ESP verträgt auch nicht mehr wie 3,3V an den Pins, wenn du andere Module damit in Verbindung bringst.

HotSystems:
Na gut…du hast ja uns. :wink:

Zum Glück hehe :slight_smile:

HotSystems:
Der ESP liefert an den Pins 3,3 Volt mit max. 12 mA.
Das bedeutet, du brauchst je Relais auch einen Transistor zur Ansteuerung des Relais mit genügend Strom und der 5V die das Relais braucht. Und die Freilaufdiode nicht vergessen

Ja danke, habe ich mir eben angeguckt und verbessere gerade den Schaltplan und editiere mein PCB Layout. (zum Glück noch nichts geätzt :smiley: )

HotSystems:
Und Achtung:
Der ESP verträgt auch nicht mehr wie 3,3V an den Pins, wenn du andere Module damit in Verbindung bringst.

Hab ich mir gedacht… Deshalb setzte ich auch direkt meinen Taster um, der mit den 5V verbunden war!

Riesen großen Dank, dass du meinen ESP noch gerettet hast :wink:
Hätte zwar im Worst Case noch welche, aber wäre trotzdem schade drum!

Melde mich, falls ich, trotz den vorhin angegebenen Links nicht weiter komme.

Soltanius

Ok…und gerne.

Poste ruhig nochmal ein aktuelles Schaltbild, bevor es in die Herstellung geht.

HotSystems:
Ok…und gerne.

Poste ruhig nochmal ein aktuelles Schaltbild, bevor es in die Herstellung geht.

Hatte ich vor :wink:

Wenn ich mich nicht täusche, müsste es so richtig sein…

Soltanius:
Gibt es hier keiner, der mir helfen kann? :c

Nur Geduld, als Hobby-Programmierer hat man ja nicht immer Zeit.

Ich springe zu Deiner ursprünglichen Frage.

In den Beispielen habe ich eine Helfer-Funktion gefunden, die ich ganz nett finde und die sich lohnt, wenn man das häufiger benötigt:

void strcati(char* tx, int i) {
  char tmp[8];
  itoa(i, tmp, 10);
  strcat (tx, tmp);
}

void handleMain() {
  int temperatur = 25;  // Wert kommt eigentlich vom Sensor
  char HTML_Text[500] = "ESP Startseite\r\n";
  strcat( HTML_Text, "Temperatur = ");
  strcati(HTML_Text, temperatur);
  strcat( HTML_Text, "°C\r\n");
  server.send(200, "text/plain", HTML_Text);
}

Ausgabe:

ESP Startseite
Temperatur = 25°C

Soltanius:
Hatte ich vor :wink:

Wenn ich mich nicht täusche, müsste es so richtig sein...

Nicht ganz.
Setze die Relais in die Kollektorleitung.
Den Emitter auf GND.