NEWS
Welchen Luftgütesensor
-
Steht bei Dir `
Ja!// BME280 initialisieren Bme280BoschWrapper bme280(true); unsigned long syncTime;
und da hatte ich gedacht es reicht den Namen auszutauschen gegen den der neuen Bibliothek.
habe gerade versucht das in github zu verstehen und dabei gemerkt, dass mein Vorhaben eine Schnapsidee war
Gruß
Rainer
-
Nochwas: In welchen Zeitabständen rufst Du
bme280.measure()
auf?
-
Wenn ich Maik richtig verstanden habe hat er das in der http://forum.iobroker.net/viewtopic.php?f=34&t=3954&start=100#p78500 von etwa 6 sec auf 60sec angehoben.
Gruß
Rainer
-
6 Sekunden wäre zu häufig, 60 Sekunden ist o. k.
Gesendet von meinem ZTE A2016 mit Tapatalk
-
Das mit den 60Sekunden hatte nur leider keine Auswirkung weil der BME280 so oft misst wie in den Settings eingestellt ist. Mit der library konnte man den BME280 aber überhaupt nicht so konfigurieren.
Ich implementiere eben die MOD-1022 library und poste das sofort. dann kannst du das testen
-
Super, vielen Dank!
Settings habe ich oben gepostet. Falls Du noch was brauchst, einfach melden, dann schaue ich gschwind bei mir nach.
-
So hier mal die geänderte Version. Wieder oben die Variablen für IP-Adresse usw. anpassen.
! ```
`//#include <bme280boschwrapper.h>
#include <ethernet.h>
#include <stdlib.h>
#include <avr pgmspace.h="">
#include <pubsubclient.h>
#include "Wire.h"
! #include <bme280_mod-1022.h>
! // Modultexte für MQTT Adapter
char modul_name[] = "Raumsensor_Wohnzimmer";
char humidity_str[] = "/Wohnzimmer/Luftfeuchtigkeit";
char temperature_str[] = "/Wohnzimmer/Raumtemperatur";
char pressure_str[] = "/Wohnzimmer/Luftdruck";
char co2_str[] = "/Wohnzimmer/CO2";
char status_str[] = "/Wohnzimmer/iAQ_Status";
char resistance_str[] = "/Wohnzimmer/iAQ_Widerstand";
char tvoc_str[] = "/Wohnzimmer/TVOC";
! //Setup Ethernet Library
byte mac[] = { 0xAB, 0xAD, 0xBE, 0xEF, 0xEF, 0xDE }; //MAC Adresse des Ethernet Moduls
IPAddress arduino_ip(192, 168, 178, 102); //IP des Teensy
IPAddress server_ip(192, 168, 178, 100); //MQTT Broker (= Raspberry Pi)
EthernetClient client;
! // BME280 initialisieren
//Bme280BoschWrapper bme280(true);
unsigned long syncTime;
! //IAQ Core C Setup
#define iaqaddress 0x5A
! uint16_t predict;
uint8_t statu;
int32_t resistance;
uint16_t tvoc;
! // ===========================================================
// Callback Funktion von MQTT. Die Funktion wird aufgerufen
// wenn ein Wert empfangen wurde.
// ===========================================================
void callback(char* topic, byte* payload, unsigned int length)
{
//char message_buff[100];
! //Serial.print("Nachricht erhalten mit Topic: ");
//Serial.println(topic);
! //// Kopieren der Nachricht und erstellen eines Bytes mit abschließender \0
//unsigned int i = 0;
//for (i = 0; i<length; 8/16/1883/i++)/{/message_buff[i]="payload[i];" }/;/serial.print("nachricht:/");/serial.println(message_buff);/mqtt/client/zur/kommunikation/mit/dem/server/server_ip/-/variable/des/types/byte/serveradresse/ist/der/standard/tcp/port/callback/function/wird/aufgerufen/wen/nachrichten/eintreffen/angabe/ethernet/clients/pubsubclient/mqttclient(server_ip,/1883,/callback,/client);/messdaten/vom/iaq/core/lesen/void/readallbytes()/wire.requestfrom(iaqaddress,/9);/predict="(Wire.read()" <</|/wire.read());/statu="Wire.read();" resistance="(Wire.read()" &/0x00)/(wire.read()/16)/tvoc="(Wire.read()" status/ermitteln/checkstatus()/if/(statu="=" 0x10)/serial.println("aufwärmphase...");/else/serial.println("bereit");/0x01)/serial.println("belegt");/0x80)/serial.println("fehler");/serial.println("kein/empfangen,/modul/prüfen");/setup()/ethernet.begin(mac,/arduino_ip);/delay(1000);/shield/zeit/geben/zum/initialisieren/serial.begin(115200);/wire.begin();/while/(!bme280.begini2c(0x76))/serial.println("sensor/nicht/gefunden.");/synctime="millis();" loop()/aufbau/verbindung/mqtt-broker/falls/diese/offen/ist./(!mqttclient.connected())/mqttclient.connect(modul_name);/abonieren/von/angegebenen/topic/mqttclient.subscribe("/wohnzimmer/settings/#");/schleife/für/(mqttclient.loop())/serial.println("verbunden");/need/to/read/the/nvm/compensation/parameters/bme280.readcompensationparams();/example/for/"indoor/navigation"/we'll/switch/into/normal/mode/regular/automatic/samples/bme280.writestandbytime(tsb_0p5ms);/tsb="0.5ms" bme280.writefiltercoefficient(fc_16);/iir/filter/coefficient/bme280.writeoversamplingpressure(os16x);/pressure/x16/bme280.writeoversamplingtemperature(os2x);/temperature/x2/bme280.writeoversamplinghumidity(os1x);/humidity/x1/bme280.writemode(smnormal);/(bme280.ismeasuring())/out/data/must/do/this/before/calling/getxxxxx/routines/bme280.readmeasurements();/char/tempbuffer[10];/dtostrf(bme280.gettemperaturemostaccurate(),/2,/tempbuffer);/mqttclient.publish(temperature_str,/delay(500);/dtostrf(bme280.gethumiditymostaccurate(),/3,/mqttclient.publish(humidity_str,/dtostrf(bme280.getpressuremostaccurate(),/4,/mqttclient.publish(pressure_str,/*unsigned/long/currentmillis="millis();" ((unsigned/long)(currentmillis/synctime)="">= 60000) //Alle 15sec ausf�hren
{
// Bosch BME280 Messwerte sendenif (bme280.measure()) { char tempBuffer[10];
! dtostrf((bme280.getTemperature() / 100.0), 2, 2, tempBuffer);
mqttClient.publish(temperature_str, tempBuffer);
! delay(1000);
! dtostrf((bme280.getHumidity() / 1024.0), 3, 2, tempBuffer);
mqttClient.publish(humidity_str, tempBuffer);
! delay(1000);
! dtostrf((bme280.getPressureDouble() / 100.0), 4, 2, tempBuffer);
mqttClient.publish(pressure_str, tempBuffer);
! delay(1000);
}
else
{
Serial.println("Messung mit BME280 fehlgeschlagen.");
}
! syncTime = currentMillis;
}*/
! delay(1000);
! readAllBytes();
checkStatus();
//char tempBuffer[10];
! //CO2 Wert
snprintf(tempBuffer, sizeof(tempBuffer), "%u", (predict));
mqttClient.publish(co2_str, tempBuffer);
! //Status
snprintf(tempBuffer, sizeof(tempBuffer), "%u", (statu));
mqttClient.publish(status_str, tempBuffer);
! //Widerstandswert
snprintf(tempBuffer, sizeof(tempBuffer), "%lu", (resistance));
mqttClient.publish(resistance_str, tempBuffer);
! //TVOC Wert
snprintf(tempBuffer, sizeof(tempBuffer), "%u", (tvoc));
mqttClient.publish(tvoc_str, tempBuffer);
! delay(5000);
}</length;></bme280_mod-1022.h></pubsubclient.h></avr></stdlib.h></ethernet.h></bme280boschwrapper.h>`
! Gruß Maik[/i][/i][/i] -
Vielen Dank!
erste schnelle RM:
BME280.writeMode(normal);
ist das böse Teil-
BME280.writeMode(smForced); ````ist brav. example for indoor navigation liest den Drucksensor sehr genau aus und macht den Sensor warm. Ich arbeite mit
// Need to turn on 1x oversampling, default is os_skipped, which means it doesn't measure anything
BME280.writeOversamplingPressure(os1x); // 1x over sampling (ie, just one sample)
BME280.writeOversamplingTemperature(os1x); // 1x over sampling (ie, just one sample)
BME280.writeOversamplingHumidity(os1x); // 1x over sampling (ie, just one sample)
measuringTime = (int) (0.5 + (1.25 + (2.3 * 1) + (2.3 * 1 + 0.575) + (2.3 * 1 + 0.575))); // measuringTime is unsigned long
/* in forced mode with oversampling=1 in all 3 values the max measuring time should be < 22.8ms
in forced mode with all oversamplings to x16 (max value) the measring time should be <112,8
for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
measuringTime = 1.25+(2.3temp_os) + (2.3humid_os + 0.575) + (2.3*press_os + 0.575) */// init a forced sample. After taking the measurement the chip goes back to sleep
BME280.writeMode(smForced);
delay(measuringTime + 25); // wait until measurement is done. With oversampling=1 in all 3 values the max measuring time should be < 22.8ms
// for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
BME280.readMeasurements();
if (BME280.isMeasuring()) { // this should not happen becaus wait time is long enough
BME280ReadError = 1; -
okay ich hatte jetzt einfach die settings für Innenraum Messung empfohlen von Bosch
Wie hast du dann die settings für oversampling usw. ?
-
habs oben nachgetragen
Oder um es hier komplett zu machen:
! ````
void initSensorBME280()
{
/*********** BME280 setup *********** /
! / excerpt from Bosch datasheet chapter 3.5.1 Weather monitoring
Table 7: Settings and performance for weather monitoring
Suggested settings for weather monitoring
Sensor mode forced mode, 1 sample / minute
Oversampling settings pressure *1, temperature *1, humidity *1
IIR filter settings filter off
Performance for suggested settings
Current consumption 0.16 μA
RMS Noise 3.3 Pa / 30 cm, 0.07 %RH
Data output rate 1/60 Hz- ** End excerpt from Bosch datasheet chapter 3.5.1 Weather monitoring **/
! byte chipID = 0; // for BME280 Cip IF
chipID = BME280.readChipId();
#ifdef FSDEBUG
DBG_OUTPUT_PORT.print (F("BME280 Chip Id (0x): "));
DBG_OUTPUT_PORT.println (chipID, HEX);
#endif // FSDEBUG
// need to read the NVM compensation parameters
BME280.readCompensationParams();
! // Need to turn on 1x oversampling, default is os_skipped, which means it doesn't measure anything
BME280.writeOversamplingPressure(os1x); // 1x over sampling (ie, just one sample)
BME280.writeOversamplingTemperature(os1x); // 1x over sampling (ie, just one sample)
BME280.writeOversamplingHumidity(os1x); // 1x over sampling (ie, just one sample)
measuringTime = (int) (0.5 + (1.25 + (2.3 * 1) + (2.3 * 1 + 0.575) + (2.3 * 1 + 0.575))); // measuringTime is unsigned long
/* in forced mode with oversampling=1 in all 3 values the max measuring time should be < 22.8ms
in forced mode with all oversamplings to x16 (max value) the measring time should be <112,8
for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
measuringTime = 1.25+(2.3temp_os) + (2.3humid_os + 0.575) + (2.3*press_os + 0.575) /
! // init a forced sample. After taking the measurement the chip goes back to sleep
BME280.writeMode(smForced);
delay(measuringTime + 25); // wait until measurement is done. With oversampling=1 in all 3 values the max measuring time should be < 22.8ms
// for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
BME280.readMeasurements();
if (BME280.isMeasuring()) { // this should not happen becaus wait time is long enough
BME280ReadError = 1;
#ifdef FSDEBUG
DBG_OUTPUT_PORT.println(F("Mode has been written down to BME280"));
DBG_OUTPUT_PORT.println(F("BME280 Measuring or busy..."));
#endif // FSDEBUG
delay(measuringTime + 300);
if (BME280.isMeasuring()) { // another try failed
BME280ReadError = 1;
#ifdef FSDEBUG
DBG_OUTPUT_PORT.print (F(" Contact to sensor has been lost no further transmission to CCU "));
#endif //FSDEBUG
} // end if 2n try failed
else {
BME280ReadError = 0;
}
! } // end if 1st trial to measure failed
else {
BME280ReadError = 0;
#ifdef FSDEBUG
DBG_OUTPUT_PORT.println(F("BME280 init Done!"));
#endif // FSDEBUG
! } // end else => no sensorReadoutError
! /******************* END Setup BME280 **************************/
} // end void initSensorBME280
! ```` -
Danke!
ist jetzt bei einem geflasht, der andere hat noch die alte library
In der Zwischenzeit ist mir noch etwas aufgefallen.
ich hatte schon vorher den Verdacht, jetzt war es wieder.
In der Phase wo der/die IAQ kalibrieren haben anscheinend die Werte ein höheres Rauschen und die BME-Werte scheinen dann auch stärker voneionander abzuweichen.
ist die Kalibrierung erst einmal abgeschlossen (=Fenster zu) werden die Kurven wieder ruhiger und die BME-Werte passen sich wieder aneinender an.
Gruß
Rainer
-
achso gut. dann muss ich aber wieder die zeitliche geschichte mit rein nehmen alle 60sek. weil bei forced macht er ja nur eine Messung
-
Ja, genau. Bei forced mißt er nur auf Befehl. Bei normal immer.
Habe hier mal meine etwas überkandidelte weil fehlerabfangende Init:
! ````
void initSensorBME280()
{
/*********** BME280 setup *********** /
! / excerpt from Bosch datasheet chapter 3.5.1 Weather monitoring
Table 7: Settings and performance for weather monitoring
Suggested settings for weather monitoring
Sensor mode forced mode, 1 sample / minute
Oversampling settings pressure *1, temperature *1, humidity *1
IIR filter settings filter off
Performance for suggested settings
Current consumption 0.16 μA
RMS Noise 3.3 Pa / 30 cm, 0.07 %RH
Data output rate 1/60 Hz- ** End excerpt from Bosch datasheet chapter 3.5.1 Weather monitoring **/
! byte chipID = 0; // for BME280 Cip IF
chipID = BME280.readChipId();
#ifdef FSDEBUG
DBG_OUTPUT_PORT.print (F("BME280 Chip Id (0x): "));
DBG_OUTPUT_PORT.println (chipID, HEX);
#endif // FSDEBUG
// need to read the NVM compensation parameters
BME280.readCompensationParams();
! // Need to turn on 1x oversampling, default is os_skipped, which means it doesn't measure anything
BME280.writeOversamplingPressure(os1x); // 1x over sampling (ie, just one sample)
BME280.writeOversamplingTemperature(os1x); // 1x over sampling (ie, just one sample)
BME280.writeOversamplingHumidity(os1x); // 1x over sampling (ie, just one sample)
measuringTime = (int) (0.5 + (1.25 + (2.3 * 1) + (2.3 * 1 + 0.575) + (2.3 * 1 + 0.575))); // measuringTime is unsigned long
/* in forced mode with oversampling=1 in all 3 values the max measuring time should be < 22.8ms
in forced mode with all oversamplings to x16 (max value) the measring time should be <112,8
for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
measuringTime = 1.25+(2.3temp_os) + (2.3humid_os + 0.575) + (2.3*press_os + 0.575) /
! // init a forced sample. After taking the measurement the chip goes back to sleep
BME280.writeMode(smForced);
delay(measuringTime + 25); // wait until measurement is done. With oversampling=1 in all 3 values the max measuring time should be < 22.8ms
// for other oversampling settings refer Bosch datasheet chapter 9.1 Measurement time
BME280.readMeasurements();
if (BME280.isMeasuring()) { // this should not happen becaus wait time is long enough
BME280ReadError = 1;
#ifdef FSDEBUG
DBG_OUTPUT_PORT.println(F("Mode has been written down to BME280"));
DBG_OUTPUT_PORT.println(F("BME280 Measuring or busy..."));
#endif // FSDEBUG
delay(measuringTime + 300);
if (BME280.isMeasuring()) { // another try failed
BME280ReadError = 1;
#ifdef FSDEBUG
DBG_OUTPUT_PORT.print (F(" Contact to sensor has been lost no further transmission to CCU "));
#endif //FSDEBUG
} // end if 2n try failed
else {
BME280ReadError = 0;
}
! } // end if 1st trial to measure failed
else {
BME280ReadError = 0;
#ifdef FSDEBUG
DBG_OUTPUT_PORT.println(F("BME280 init Done!"));
#endif // FSDEBUG
! } // end else => no sensorReadoutError
! /******************* END Setup BME280 **************************/
} // end void initSensorBME280
! ```` -
Okay so dann:
! ```
`//#include <bme280boschwrapper.h>
#include <ethernet.h>
#include <stdlib.h>
#include <avr pgmspace.h="">
#include <pubsubclient.h>
#include "Wire.h"
! #include <bme280_mod-1022.h>
! // Modultexte für MQTT Adapter
char modul_name[] = "Raumsensor_Wohnzimmer";
char humidity_str[] = "/Wohnzimmer/Luftfeuchtigkeit";
char temperature_str[] = "/Wohnzimmer/Raumtemperatur";
char pressure_str[] = "/Wohnzimmer/Luftdruck";
char co2_str[] = "/Wohnzimmer/CO2";
char status_str[] = "/Wohnzimmer/iAQ_Status";
char resistance_str[] = "/Wohnzimmer/iAQ_Widerstand";
char tvoc_str[] = "/Wohnzimmer/TVOC";
! //Setup Ethernet Library
byte mac[] = { 0xAB, 0xAD, 0xBE, 0xEF, 0xEF, 0xDE }; //MAC Adresse des Ethernet Moduls
IPAddress arduino_ip(192, 168, 178, 102); //IP des Teensy
IPAddress server_ip(192, 168, 178, 100); //MQTT Broker (= Raspberry Pi)
EthernetClient client;
! // BME280 initialisieren
//Bme280BoschWrapper bme280(true);
unsigned long syncTime;
! //IAQ Core C Setup
#define iaqaddress 0x5A
! uint16_t predict;
uint8_t statu;
int32_t resistance;
uint16_t tvoc;
! // ===========================================================
// Callback Funktion von MQTT. Die Funktion wird aufgerufen
// wenn ein Wert empfangen wurde.
// ===========================================================
void callback(char* topic, byte* payload, unsigned int length)
{
//char message_buff[100];
! //Serial.print("Nachricht erhalten mit Topic: ");
//Serial.println(topic);
! //// Kopieren der Nachricht und erstellen eines Bytes mit abschließender \0
//unsigned int i = 0;
//for (i = 0; i<length; 8/1883/i++)/{/message_buff[i]="payload[i];" }/;/serial.print("nachricht:/");/serial.println(message_buff);/mqtt/client/zur/kommunikation/mit/dem/server/server_ip/-/variable/des/types/byte/serveradresse/ist/der/standard/tcp/port/callback/function/wird/aufgerufen/wen/nachrichten/eintreffen/angabe/ethernet/clients/pubsubclient/mqttclient(server_ip,/1883,/callback,/client);/messdaten/vom/iaq/core/lesen/void/readallbytes()/wire.requestfrom(iaqaddress,/9);/predict="(Wire.read()" <</|/wire.read());/statu="Wire.read();" resistance="(Wire.read()" &/0x00)/(wire.read()/16)/tvoc="(Wire.read()" status/ermitteln/checkstatus()/if/(statu="=" 0x10)/serial.println("aufwärmphase...");/else/serial.println("bereit");/0x01)/serial.println("belegt");/0x80)/serial.println("fehler");/serial.println("kein/empfangen,/modul/prüfen");/setup()/ethernet.begin(mac,/arduino_ip);/delay(1000);/shield/zeit/geben/zum/initialisieren/serial.begin(115200);/wire.begin();/while/(!bme280.begini2c(0x76))/serial.println("sensor/nicht/gefunden.");/synctime="millis();" loop()/aufbau/verbindung/mqtt-broker/falls/diese/offen/ist./(!mqttclient.connected())/mqttclient.connect(modul_name);/abonieren/von/angegebenen/topic/mqttclient.subscribe("/wohnzimmer/settings/#");/schleife/für/(mqttclient.loop())/serial.println("verbunden");/unsigned/long/currentmillis="millis();" ((unsigned/long)(currentmillis/synctime)="">= 60000) //Alle 60sec ausf�hren
{
// need to read the NVM compensation parameters
BME280.readCompensationParams();
! // Example for "indoor navigation"
// We'll switch into normal mode for regular automatic samples
! /*
BME280.writeStandbyTime(tsb_0p5ms); // tsb = 0.5ms
BME280.writeFilterCoefficient(fc_16); // IIR Filter coefficient 16
BME280.writeOversamplingPressure(os16x); // pressure x16
BME280.writeOversamplingTemperature(os2x); // temperature x2
BME280.writeOversamplingHumidity(os1x); // humidity x1BME280.writeMode(smNormal);
*/
! // Need to turn on 1x oversampling, default is os_skipped, which means it doesn't measure anything
BME280.writeOversamplingPressure(os1x); // 1x over sampling (ie, just one sample)
BME280.writeOversamplingTemperature(os1x);
BME280.writeOversamplingHumidity(os1x);// example of a forced sample. After taking the measurement the chip goes back to sleep BME280.writeMode(smForced); while (BME280.isMeasuring()) { // } // read out the data - must do this before calling the getxxxxx routines BME280.readMeasurements();
! char tempBuffer[10];
! dtostrf(BME280.getTemperatureMostAccurate(), 2, 2, tempBuffer);
mqttClient.publish(temperature_str, tempBuffer);
! delay(500);dtostrf(BME280.getHumidityMostAccurate(), 3, 2, tempBuffer); mqttClient.publish(humidity_str, tempBuffer);
! delay(500);
! dtostrf(BME280.getPressureMostAccurate(), 4, 2, tempBuffer);
mqttClient.publish(pressure_str, tempBuffer);
! delay(500);
! syncTime = currentMillis;
}! /*unsigned long currentMillis = millis();
if ((unsigned long)(currentMillis - syncTime) >= 60000) //Alle 15sec ausf�hren
{
// Bosch BME280 Messwerte sendenif (bme280.measure()) { char tempBuffer[10];
! dtostrf((bme280.getTemperature() / 100.0), 2, 2, tempBuffer);
mqttClient.publish(temperature_str, tempBuffer);
! delay(1000);
! dtostrf((bme280.getHumidity() / 1024.0), 3, 2, tempBuffer);
mqttClient.publish(humidity_str, tempBuffer);
! delay(1000);
! dtostrf((bme280.getPressureDouble() / 100.0), 4, 2, tempBuffer);
mqttClient.publish(pressure_str, tempBuffer);
! delay(1000);
}
else
{
Serial.println("Messung mit BME280 fehlgeschlagen.");
}
! syncTime = currentMillis;
}*/
! delay(1000);
! readAllBytes();
checkStatus();
char tempBuffer[10];
! //CO2 Wert
snprintf(tempBuffer, sizeof(tempBuffer), "%u", (predict));
mqttClient.publish(co2_str, tempBuffer);
! //Status
snprintf(tempBuffer, sizeof(tempBuffer), "%u", (statu));
mqttClient.publish(status_str, tempBuffer);
! //Widerstandswert
snprintf(tempBuffer, sizeof(tempBuffer), "%lu", (resistance));
mqttClient.publish(resistance_str, tempBuffer);
! //TVOC Wert
snprintf(tempBuffer, sizeof(tempBuffer), "%u", (tvoc));
mqttClient.publish(tvoc_str, tempBuffer);
! delay(5000);
}</length;></bme280_mod-1022.h></pubsubclient.h></avr></stdlib.h></ethernet.h></bme280boschwrapper.h>`
! Aber letztendlich bringt das alles nix... Werte sind immer noch so.
! Rainer das macht ja auch Sinn wenn du das Fenster öffnet oder nicht? Wenn da erstmal andere Luft ankommt.
! Ich bin jetzt erstmal gespannt auf den neuen Sensor was der dann anzeigt. Ist auf jeden Fall schon mal als verschickt markiert...[/i][/i][/i] -
das macht ja auch Sinn wenn du das Fenster öffnet oder nicht? Wenn da erstmal andere Luft ankommt. `
Aber die Sensoren stehen etwa eine Platinenbreite auseinander. die sollten schon den gleichen Wert haben (?)Oder meinst du selbst die geringste Luftbewegung könnte das auslösen?
Gruß
Rainer
-
das macht ja auch Sinn wenn du das Fenster öffnet oder nicht? Wenn da erstmal andere Luft ankommt. `
Aber die Sensoren stehen etwa eine Platinenbreite auseinander. die sollten schon den gleichen Wert haben (?)Oder meinst du selbst die geringste Luftbewegung könnte das auslösen?
Gruß
Rainer `
ja weiß ich nicht vielleicht… dann haben beide vielleicht noch unterschiedliche Genauigkeiten gegeneinander. Weiß ja nicht wie weit das schwankt bei dir
Aber ich finde das ja schon faszinierend, dass wir beide in etwa die gleiche Abweichung der Temperatur haben. Wo der Chinese die wohl her hatte...
[EDIT] Um nochmal auf das Thema Luftfeuchte zurück zu kommen hier:https://www.mikrocontroller.net/topic/398067 wird auch beschrieben mal den Abgleich mit einer gesättigten Kochsalzlösung zu machen. Soll wohl eine relativ genaue Referenz sein.
-
Oh man ich hab eine Lösung gefunden…(Nachdem auf microcontroller.net jemand etwas von störungen geschrieben hat)
Habe ein 20cm Kabel zwischen BME280 und Platine und siehe da Temperatur passt. Irgendwas stört den Sensor...
Habe jetzt knapp 24°C. vorher über 28°C...
Der Fehler ist eindeutig und reproduzierbar. sobald ich mit dem Sensor wieder nahe an die Platine gehe steigt die Temperatur. Hmm wie löst man das jetzt
-
Gerade wollte ich fragen wie Eure Aufbauten aussehen. Also Abstand zu anderen Wärmequellen.
Ich habe bis ca. 50cm Kabel zwischen BME und WMos. Vorwiegend aus thermischen Gründen wie oben schon geschrieben.
Ich verwende 4-pol Telefonleitung.
Und zur Feuchtekalibrierung: Siehe
http://kandrsmith.org/RJS/Misc/hygrometers.html
Hat mich schwer beeindruckt…
-
Gerade wollte ich fragen wie Eure Aufbauten aussehen. Also Abstand zu anderen Wärmequellen.
Ich habe bis ca. 50cm Kabel zwischen BME und WMos. Vorwiegend aus thermischen Gründen wie oben schon geschrieben.
Ich verwende 4-pol Telefonleitung.
Und zur Feuchtekalibrierung: Siehe
http://kandrsmith.org/RJS/Misc/hygrometers.html
Hat mich schwer beeindruckt… `
Wobei ich mir jetzt nicht unbedingt sicher bin ob es an der Platine "wärmer" ist. Vielleicht sind das auch Störfrequenzen. Werde da die Tage nochmal ein paar Sachen testen.
Sensor wohl umsonst bestellt…
-
Jedenfalls Glückwunsch zum gelungenen Troubleshooting!
@MaikB85:Sensor wohl umsonst bestellt… ` Nie! Noch ein WeMos dran, AP-Gehäuse Billignetzteil und fertig ist der Temperatursensor.
Der BME280 ist schon ein ordentlicher Sensor.
Meine erste Spekulation geht in Richtung thermischer Beeinflussung.
Kann aber da wenig dazu sagen, weil ich von Anfang an die Teile an eine 20cm bis 50cm lange Kabelpeitsche angeschlossen habe. Sieht man auch auch auf den Bildern im HM-Thread. Die WeMos ziehen 350 bis 400mW und das heizt schon auf. Insofern gab es bei mir da nie etwas nachzudenken, die Teile mußten einfach raus.
Ein I2C sollte nicht zu lang sein. Also muß man auf die Leitung achten. Also habe ich eine Stern-Vierer-Verseilung gewählt - zumal die als Telefonleitung auch billig erhältlich ist. Bei Pollin als Restposten https://www.pollin.de/p/telefon-install … 3-m-541988
Und wenn man schon eine lange Leitung hat, dann sollte auch ein Kondensator über der Versorgung sein. Also einen Tantal oder einen Kerko 10µF http://www.aliexpress.com/item/100pcs-lot-Multilayer-ceramic-capacitor-10uF-106-50V-106k/32455168081.html, wobe meine noch 0,4 EUR teurer waren. Egal waren schon sehr hilfreich, genauso wie die SMD Pendants.
Insofern hatte ich noch nie so ein Störproblem und kann damit auch nicht sagen woher es kommt. Wenn ich mch recht erinnere habe ich irgendwann mal routinemäßig die Versorgung und den I2C oszilloskopiert und das sah i.O. aus. Da bei den WeMos eh alles auf 3.3V läuft, gab es auch damit keine Probleme.