INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Thema geschlossen 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
float -> char Umwandlung Problem ESP8266 und BME 280
24.02.2020, 19:55
Beitrag #1
float -> char Umwandlung Problem ESP8266 und BME 280
Hallo,

ich verzweifle an einem Problem bei der Umwandlung einer floatvariablen in einen String. Der Code stammt aus dem Netz, ich habe ihn modifiziert.

U.a. werden aus einem BME 280 an einem ESP 8266 die Temperatur, Luftfeuchtigkeit und der Luftdruck asugelesen. Dazu sind vorher ensprechende float Variable definiert worden.
Dieser werden auch korrekt eingelesen, was ich über den Serial Monitor nachvollziehen kann. Dann werden die Werte in Strings umgewandelt, was prinzipiell auch funktioniert, wird auch über den Serial Monitor richtig ausgegeben bis auf einen Wert:

Die Floatvariable hu wird in den humidityString[7] umgewandelt:

dtostrf (hu, 5, 2, humidityString);

und sollte dann mit Serial.println(humidityString); im Monitor erscheinen.

Das klappt bei der Temperatur und beim Luftdruck problemlos, bei der Luftfeuchtigkeit wird stattdessen nur eine einstellige Ganzzahl ausgegeben, während der Originalstring korrekt angezeigt wird:

Das sieht im Monitor so aus (jeweils Parameter: Floatzahl / String):

15:18:36.116 -> BME280 /BH1750 /Bodenfeuchtesensor - test
15:18:46.266 -> Temperatur = 11.92 / 11.9
15:18:46.266 -> Luftfeuchtigkeit = 78.35 / 6
15:18:46.266 -> Luftdruck mBar = 998.06 / 998.06
15:18:46.266 -> Luftdruck mmHg = 748.65 / 749
15:18:46.266 -> Taupunkt = 7.59 / 8
15:18:46.266 -> Bodenfeuchte = 6.06 / 6
15:18:46.266 -> Helligkeit = 0.00 / 0

Die floatvariable hu wird also korrekt mit 78.35 ausgegeben, der dazugehörige String humidityString fälschlich mit 6

Was mache ich falsch? Oder habe ich da etwas grundlegendes nicht verstanden?
(Hoffe, ich habe das alles richtig geschildert, bin Anfänger; evt. Fehler bitte ich nachzusehen... :-)

Stephan

------------------------------------------------------------------------------
Hier der Code:
Code:
#include <Wire.h>
#include <ESP8266WiFi.h>
#include <Adafruit_Sensor.h>
#include <Adafruit_BME280.h>
#include <BH1750.h>

//#define BMP_SCK 13
//#define BMP_MISO 12
//#define BMP_MOSI 11
//#define BMP_CS 10

//Definitionen für BME 280
float hu, t, p, pin, dp;
char temperatureFString[6];
char dpString[6];
char humidityString[7];
char pressureString[7];
char pressuremmHgString[6];

//Definitionen für Lichtsensor BH1750
float lux;
char luxString[6];

//Definitionen für kapazit. Bodenfeuchtesensor
float bor, bo;
char bohumString[3];


Adafruit_BME280 bme; // I2C
BH1750 lightMeter; //I2C
// replace with your "ESP8266-NodeMCU-12E-BME280" (The first channel you created) channel’s thingspeak API write key,
String apiKey = "Hier steht der API Key";
// replace with your routers SSID
const char* ssid = "Hier steht meine SSID";
// replace with your routers password
const char* password = "Hier das Routerpasswort";

const char* server = "api.thingspeak.com";
WiFiClient client;


/**************************
* S E T U P
**************************/
// only runs once on boot
void setup() {
// Initializing serial port for debugging purposes
Serial.begin(115200);
delay(10);
Wire.begin(D3, D4); // Make sure you have D3 & D4 hooked up to the BME280
Wire.setClock(100000);
// 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");

// Printing the ESP IP address
Serial.println(WiFi.localIP());
Serial.println(F("BME280 /BH1750 /Bodenfeuchtesensor - test"));

lightMeter.begin();
if (!bme.begin()) {
Serial.println("Could not find a valid BME280 sensor, check wiring!");
while (1);
}
}

/**************************
* L O O P
**************************/
void loop() {

//BME 280 auslesen
hu = bme.readHumidity();
t = bme.readTemperature();

dp = t-((100.0-hu)/5);

p = bme.readPressure()/100.0F;
pin = 0.7501*p;

dtostrf(t, 5, 1, temperatureFString);
dtostrf (hu, 5, 2, humidityString);
dtostrf(p, 8, 2, pressureString);
dtostrf(pin, 5, 0, pressuremmHgString);
dtostrf(dp, 5, 0, dpString);

//Bodenfeuchte auslesen
bor = analogRead(A0);
bo = ((bor * -1 + 657)/330)*100;
dtostrf(bo, 3, 0, bohumString);

//Licht auslesen
lux = lightMeter.readLightLevel();
dtostrf(lux, 5, 0, luxString);

delay(10000);

Serial.print("Temperatur = ");
Serial.print(t);
Serial.print(" / ");
Serial.println(temperatureFString);
Serial.print("Luftfeuchtigkeit = ");
Serial.print(hu);
Serial.print(" / ");
Serial.println(humidityString);
Serial.print("Luftdruck mBar = ");
Serial.print(p);
Serial.print(" / ");
Serial.println(pressureString);
Serial.print("Luftdruck mmHg = ");
Serial.print(pin);
Serial.print(" / ");
Serial.println(pressuremmHgString);
Serial.print("Taupunkt = ");
Serial.print(dp);
Serial.print(" / ");
Serial.println(dpString);
Serial.print("Bodenfeuchte = ");
Serial.print(bo);
Serial.print(" / ");
Serial.println(bohumString);
Serial.print("Helligkeit = ");
Serial.print(lux);
Serial.print(" / ");
Serial.println(luxString);

if (client.connect(server,80)) // "184.106.153.149" or api.thingspeak.com
{
String postStr = apiKey;
postStr +="&field1=";
postStr += String(temperatureFString);
postStr +="&field2=";
postStr += String(humidityString);
postStr +="&field3=";
postStr += String(pressuremmHgString);
postStr +="&field4=";
postStr +=String(dpString);
postStr +="&field5=";
postStr +=String (bohumString);
postStr +="&field6=";
postStr +=String (luxString);
postStr += "\r\n\r\n";

client.print("POST /update HTTP/1.1\n");
client.print("Host: api.thingspeak.com\n");
client.print("Connection: close\n");
client.print("X-THINGSPEAKAPIKEY: "+apiKey+"\n");
client.print("Content-Type: application/x-www-form-urlencoded\n");
client.print("Content-Length: ");
client.print(postStr.length());
client.print("\n\n");
client.print(postStr);
}
client.stop();
//every 5 Min
delay(300000);
}
Alle Beiträge dieses Benutzers finden
24.02.2020, 19:57
Beitrag #2
RE: float -> char Umwandlung Problem ESP8266 und BME 280
Warum fängst Du da nochmal ein neues Thema an? Das hätte ein Moderator schon verschoben. Außerdem hast Du schon eine Antwort bekommen.

Gruß Tommy

"Wer den schnellen Erfolg sucht, sollte nicht programmieren, sondern Holz hacken." (Quelle unbekannt)
Alle Beiträge dieses Benutzers finden
24.02.2020, 23:08
Beitrag #3
RE: float -> char Umwandlung Problem ESP8266 und BME 280
Hier geht es weiter.
lgbk Moderator


An alle Neuankömmlinge hier, wenn ihr Code(Sketch) hier posten wollte dann liest euch bitte diese Anleitung durch.

1+1 = 10 Angel ...und ich bin hier nicht der Suchmaschinen-Ersatz Dodgy...nur mal so als genereller Tipp..
Alle Beiträge dieses Benutzers finden
Thema geschlossen 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
Sad blynk PRoblem relis Busterflex 3 26 Heute 17:26
Letzter Beitrag: hotsystems
  ESP8266 SPIFF Daten schreiben und zeilenweise lesen? foto2004 10 138 Gestern 14:26
Letzter Beitrag: hotsystems
  Problem Upload einer html Datei per littleFS mat-sche 5 191 09.04.2021 13:17
Letzter Beitrag: Tommy56
  ESP8266 OTA - ich bin am Ende meiner Ideen miq19 11 642 02.04.2021 10:13
Letzter Beitrag: Tommy56
  Libraries für ESP8266 wonk 9 776 24.03.2021 20:18
Letzter Beitrag: wonk
  vom MEGA zum ESP8266 uk1408 24 1.873 19.03.2021 13:56
Letzter Beitrag: hotsystems
  ESP8266 Zeit vom NTP Server verändert sich Kupferwurm 18 1.808 11.03.2021 11:03
Letzter Beitrag: Tommy56
  ESP8266 NTP fadeValue bob 2 478 10.03.2021 18:29
Letzter Beitrag: Tommy56
  HTML-Ausgabe von ESP8266 D1 Mini + DHT 11 Temperatursensor auf Webseite Bobo83600 3 676 10.03.2021 09:42
Letzter Beitrag: Bobo83600
  [Gelöst] ESP8266 OTA bleibt ohne Wirkung miq19 5 759 07.03.2021 18:35
Letzter Beitrag: Tommy56

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste