HTML - Variable als Farbcode

Hallo,

ich baue eine Wetterstation mit einem ESP8266 und einem BMP280 Sensor für Druck und Temperatur.
Ich nutze den ESP dabei um die Sensordaten auszulesen und als Webserver, um die Sensordaten in meinem Handybrowser abzurufen. Es funktioniert soweit auch alles. Die einzige Sache die nicht klappt - Ich möchte dass sich die Hintergrundfarbe im Browser entsprechend der Sensordaten verändert. Ich weiß aber nicht was an der Stelle "Farbe" stehen muss.

client.println("html {background-color: Farbe;}");

Wäre eine große hilfe wenn mir jemand sagen kann was da stehen muss, kann dazu nirgends was finden.

hier noch der ganze Sketch

```cpp
#include <ESP8266WiFi.h>
#include <Adafruit_AHTX0.h>
#include <Adafruit_BMP280.h>

Adafruit_BMP280 bme;

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

String Kopf;
String Torso;
String Beine;
String Fueße;
String Regenjacke;
String Farbe;

WiFiServer server(80);

void setup() {
  Serial.begin(115200);
  delay(10);

  bme.begin();

  // Connecting to WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  // Starting the web server
  server.begin();
  Serial.println("Web server running. Waiting for the ESP IP...");
  delay(10000);

  // Printing the ESP IP address
  Serial.println(WiFi.localIP());
}

void loop() {

  WiFiClient client = server.available();

  if (client) {
    Serial.println("New client");
    // bolean to locate when the http request ends
    boolean blank_line = true;
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();

        if (c == '\n' && blank_line) {

          if (bme.readTemperature() <= 0) {
            Kopf = "Wintermuetze";
            Torso = "Winterjacke";
            Beine = "lange Hose";
            Fueße = "Winterschuhe";
            Farbe = "#2E64FE";
          }

          if (bme.readTemperature() > 0 && bme.readTemperature() <= 5) {
            Torso = "Winterjacke";
            Beine = "lange Hose";
            Fueße = "Winterschuhe";
            Farbe = "#00BFFF";
          }

          if (bme.readTemperature() > 5 && bme.readTemperature() <= 10) {
            Torso = "Winterjacke";
            Beine = "lange Hose";
            Fueße = "Sneaker";
            Farbe = "#FFFFFF";
          }

          if (bme.readTemperature() > 10 && bme.readTemperature() <= 20) {
            Torso = "Uebergangsjacke";
            Beine = "lange Hose";
            Fueße = "Sneaker";
            Farbe = "#F4FA58";
          }

          if (bme.readTemperature() > 20 && bme.readTemperature() <= 25) {
            Torso = "T-shirt";
            Beine = "lange Hose";
            Fueße = "Sneaker";
            Farbe = "#FACC2E";
          }

          if (bme.readTemperature() > 25) {
            Torso = "T-shirt";
            Beine = "kurze Hose";
            Fueße = "Flipflops";
            Farbe = "#FE642E";
          }

          if (bme.readTemperature() > 20 && bme.readPressure() < 99500) {
            Regenjacke = "Regenjacke";
          }

          Serial.println(bme.readTemperature());
          Serial.println(bme.readPressure());

          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println("Connection: close");
          client.println();
          // your actual web page
          client.println("<!DOCTYPE HTML>");
          client.println("<html>");
          client.println("<style>html {background-color: Farbe;}</style>");
          client.println("<br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>");
          client.println("<head></head><body><h1><u><font size=7><center>Bekleidungsempfehlung</font></center></u></h1>");
          client.println("<h2><center><font size=7>");
          client.println(Kopf);
          client.println("<br><br>");
          client.println(Torso);
          client.println("<br><br>");
          client.println(Beine);
          client.println("<br><br>");
          client.println(Fueße);
          client.println("<br><br>");
          client.println("Regenjacke</center></font></h2>");

          break;
        }
        if (c == '\n') {
          // when starts reading a new line
          blank_line = true;
        } else if (c != '\r') {
          // when finds a character on the current line
          blank_line = false;
        }
      }
    }
    // closing the client connection
    delay(1);
    client.stop();
    Serial.println("Client disconnected.");
  }
}

"HTML-Farbcodes" in die Suchmaschine Deiner Wahl gekippt ergibt z.B. das hier

Gruß Tommy

Ich nehme mal an, Du meinst sowas:

 client.print("<style>html {background-color: "); client.print(Farbe); client.println(" }</style>");

Du musst die Variable Farbe so verwenden wie z.B Kopf , Da machst Du das ja auch in zwei Zeilen . Versuch mal das, ist aber nicht getestet.

client.print("<style>html {background-color:");
client.print(Farbe);
client.println("}</style>");

@Kai-R war schneller :wink:

Nach dem das mit den Farben geklärt ist:
Nimm am ESP8266 den Webserver so wie er im Beispiel:
ESP8266Webserver | HelloServer
vorgeschlagen wird.
Dann generiert der ESP auch den HTTP Header korrekt und du brauchst den nicht extra manuell angeben.

Vielen Dank für die schnellen Antworten, funktioniert perfekt :slight_smile:

Kann man in einfachen Worten erklären, warum es dafür eine neue Zeile braucht, und die Variable in Klammern in "meiner Version" nicht ausreicht?

Mit freundlichen Grüßen

das eine ist Fixtext - du möchtest aber dynamisch den Variableninhalt rausschreiben.

Weil die sogenannte Variable in Deiner Zeile ein einfacher Text ist, der nicht mit dem Wert ersetzt wird.

Gruß Tommy

Ich würde mir das - Hello Server Beispiel - gern anschauen, aber ich finde es nicht.

Gibt es da einen Link?

mfg

Hier oder in Deiner IDE unter Beispiele.

Gruß Tommy

Bei solchen Konstrukten ist es sinnvoll else zu verwenden

if (bme.readTemperature() <= 0) {
            Kopf = "Wintermuetze";
            Torso = "Winterjacke";
            Beine = "lange Hose";
            Fueße = "Winterschuhe";
            Farbe = "#2E64FE";
          } else if (bme.readTemperature() > 0 && bme.readTemperature() <= 5) {
            Torso = "Winterjacke";
            Beine = "lange Hose";
            Fueße = "Winterschuhe";
            Farbe = "#00BFFF";
          } else if......

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