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
  ESP8266-12E & Pullup I2C rev.antun 32 863 Heute 12:47
Letzter Beitrag: rev.antun
  Abgespeckter Sketch für ESP8266 -WLAN Anbindung / Anfänger mizieg 7 289 26.02.2021 17:45
Letzter Beitrag: N1d45
  ESP8266 OTA und Verwendung von TXD0/RXD0 rev.antun 27 849 22.02.2021 19:43
Letzter Beitrag: hotsystems
  GPS-Synchronisierung mit NodeMCU-ESP8266 Floke4 3 203 22.02.2021 19:33
Letzter Beitrag: rev.antun
  Thingspeak Problem Timeofsand 10 451 22.02.2021 16:38
Letzter Beitrag: Tommy56
  esp8266 zu html gk_1 9 402 19.02.2021 19:41
Letzter Beitrag: Tommy56
  ESP8266 SD CSV Datei Zeilen rückwärtz RobertHQ 7 408 14.02.2021 19:29
Letzter Beitrag: Corvus
  Heaxadezimal Char Arrays als Webpage senden basementmedia 4 302 09.02.2021 19:51
Letzter Beitrag: basementmedia
  ESP8266 Webserver nach Zeit nicht mehr verfügbar. ESPWolf 21 1.945 02.02.2021 17:54
Letzter Beitrag: Tommy56
  wie viele Char-Arrays sind mit dem ESP32/Arduino möglich Pertho 0 312 28.01.2021 19:53
Letzter Beitrag: Pertho

Gehe zu:


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