DS18B20 - Temperaturwert Ausgabe mit 1 Nachkommastelle

Hallo ich bin neu hier im Forum und für mich ist alles neu.
Ich programmiere aktuell den ESP8266 mit mehreren Temperaturfühler DS18B20. Deren Werte lasse ich auf einer Webseite ausgeben. Das Skript hierzu habe ich im Internet gefunden und angepasst.
Hier das Scetch:

#include <ESP8266WebServer.h>
#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into port D2 on the ESP8266
#define ONE_WIRE_BUS D2

// Setup a oneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass our oneWire reference to Dallas Temperature.
DallasTemperature sensors(&oneWire);

float tempSensor1, tempSensor2, tempSensor3, tempSensor4, tempSensor5;

uint8_t sensor1[8] = { 0x28, 0xFF, 0x64, 0x1E, 0x5E, 0x54, 0x7E, 0x4F  };
uint8_t sensor2[8] = { 0x28, 0xFF, 0x64, 0x1E, 0x5E, 0x6C, 0x30, 0x4D  };
uint8_t sensor3[8] = { 0x28, 0xFF, 0x64, 0x1E, 0x5F, 0x98, 0x69, 0x03  };
uint8_t sensor4[8] = { 0x28, 0xFF, 0x64, 0x1E, 0x5F, 0x95, 0x95, 0x5D  };
uint8_t sensor5[8] = { 0x28, 0xFF, 0x64, 0x1E, 0x5E, 0x6D, 0x5A, 0x92  };




/*Put your SSID & Password*/
const char* ssid = **************;
const char* password = "******************";

ESP8266WebServer server(80);             
 
void setup() {
  Serial.begin(115200);
  delay(100);
  
  sensors.begin();              

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
}

void handle_OnConnect() {
  sensors.requestTemperatures();
  tempSensor1 = sensors.getTempC(sensor1); // Gets the values of the temperature
  tempSensor2 = sensors.getTempC(sensor2); // Gets the values of the temperature
  tempSensor3 = sensors.getTempC(sensor3); // Gets the values of the temperature
  tempSensor4 = sensors.getTempC(sensor4); // Gets the values of the temperature
  tempSensor5 = sensors.getTempC(sensor5); // Gets the values of the temperature


  server.send(200, "text/html", SendHTML(tempSensor1,tempSensor2,tempSensor3,tempSensor4,tempSensor5)); 
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(float tempSensor1,float tempSensor2,float tempSensor3,float tempSensor4,float tempSensor5){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<meta http-equiv=\"refresh\" content=\"2\"\n";
  ptr +="<title></title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>Temperaturen Heizung</h1>\n";
  ptr +="<p>Sensor 1: ";
  ptr +=tempSensor1;
  ptr +="&deg;C</p>";
  ptr +="<p>Sensor 2: ";
  ptr +=tempSensor2;
  ptr +="&deg;C</p>";
  ptr +="<p>Sensor 3: ";
  ptr +=tempSensor3;
  ptr +="&deg;C</p>";
  ptr +="<p>Sensor 4: ";
  ptr +=tempSensor4;
  ptr +="&deg;C</p>";
  ptr +="<p>Sensor 5: ";
  ptr +=tempSensor5;
  ptr +="&deg;C</p>";
  ptr +="</div>\n";
  ptr +="</body>\n";

  ptr +="</html>\n";
  return ptr;
}

Wie muss ich mein Script anpassen, dass bei der Temperaturausgabe nur eine Stelle hinter dem Komma ausgegeben wird?
Der letzte Wert soll abgeschnitten werden, nicht gerundet.
Also anstelle 25,48°C den Wert 25,4°C

void setup() {
  Serial.begin(115200);
  String test = "Test ";
  float  value = 47.11;
  test += String(value, 1 );
  Serial.println(test);
}

void loop() {
}

Test 47.1

Hallo, danke für die schnelle Antwort.
Nur wie setze ich dies jetzt direkt um:
Exemplarisch für Sensor 1 habe ich folgendes ergänzt:

void setup() {
  
String test1 = "Test ";
 void handle_OnConnect() {
  sensors.requestTemperatures();
  tempSensor1 = sensors.getTempC(sensor1); // Gets the values of the 
... 
test1 += String(tempSensor1, 1 );

String SendHTML(float tempSensor1,float tempSensor2,float tempSensor3,float tempSensor4,float tempSensor5){
  String ptr = "<!DOCTYPE html> <html>\n";
  ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
  ptr +="<meta http-equiv=\"refresh\" content=\"2\"\n";
  ptr +="<title></title>\n";
  ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
  ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;}\n";
  ptr +="p {font-size: 24px;color: #444444;margin-bottom: 10px;}\n";
  ptr +="</style>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<div id=\"webpage\">\n";
  ptr +="<h1>Temperaturen Heizung</h1>\n";
  ptr +="<p>Sensor 1: ";
  ptr +=test1;
  ptr +="&deg;C</p>";
  ptr +="</div>\n";
  ptr +="</body>\n";

  ptr +="</html>\n";
  return ptr;

Leider funktioniert es nicht. Was mache ich falsch?

du hast keine globale test1.

du brauchst doch nur die Variable die du eh schon übergibst verwenden.

ptr += String (tempSensor1, 1);

Ja, ich habe es gesehen. Super Tipp.
Durch Änderung von
ptr +=tempSensor1;
nach
ptr +=String (tempSensor1, 1);
wird genau nach einer Stelle hinter der Komma abgeschnitten.
Danke, du hast mir geholfen.

... du könntest Beitrag #2 als Lösung markieren...

Mit style="color:#hex-Nr." im HTML-Element.

Gruß Tommy

Sorry, war zu schnell mit dem Löschen des Posts.
So wird mir die ganze Zeile rot dargestellt.

  ptr +="<p style='color: red;'>Sensor 1: ";
  ptr +=String (tempSensor1, digit);
  ptr +="&deg;C</p>";

Ich möchte aber, dass nur der Wert und °C rot dargestellt werden. Wie kann man innerhalb von <p> die Farben ändern?

Indem Du ein anderes HTML-Element im p anlegst, z.B. div oder spn und dessen Style änderst.

Gruß Tommy

  ptr +="<p>Sensor 1: <span style='color:red;'>";
  ptr +=String (tempSensor1, digit);
  ptr +="</span>&deg;C</p>";

langfristig ist vermutlich besser du machst dir ein ganzes css file und legst dir Klassen an.
Und dann halt so was

  ptr +="<p>Sensor 1: <span class='value'>";
  ptr +=String (tempSensor1, digit);
  ptr +="</span>&deg;C</p>";

Danke, das hat mir sehr geholfen

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