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

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+PubSubClient und MQTT/ioBroker Arduino4Fun 10 5.336 08.09.2020 10:22
Letzter Beitrag: biologist
Lightbulb SPIFFS DOWNLOAD UPLOAD & DELETE Esp8266 NodeMCU Fips 31 24.148 05.09.2020 19:59
Letzter Beitrag: guenni71
  ESP8266 Datenlogger für Google Sheets xuino 3 257 31.08.2020 14:43
Letzter Beitrag: hotsystems
  Esp8266 GPIO default In- oder Out-put? N1d45 0 233 29.08.2020 06:58
Letzter Beitrag: N1d45
  WeMos D1 mini ESP8266 error: <bits/c++config.h> AnFi 17 4.366 27.08.2020 13:47
Letzter Beitrag: dna
  Esp32 FIFO-Problem miq19 7 532 22.08.2020 14:33
Letzter Beitrag: miq19
  ESP8266 AP-Modus Android N1d45 2 349 20.08.2020 07:58
Letzter Beitrag: N1d45
  ESP8266 über AT-Befehle Jens Jung 2 372 19.08.2020 15:08
Letzter Beitrag: Jens Jung
  ESP8266 core for Arduino 2.7.0 Fips 15 2.918 09.07.2020 07:01
Letzter Beitrag: Fips
  Erster Versuch mit "ESP8266 NodeMCU V3" Mathias 6 1.017 03.07.2020 18:14
Letzter Beitrag: Mathias

Gehe zu:


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