ESP8266 mit Bosch BME280 - Messdatenfehler

  • Hallo zusammen,


    ich habe seit einiger Zeit einen BME280 von Bosch hier. Ich nutze einen ESP8266-12/-07 mit der Arduino IDE. Meine eigene Arduino Library habe ich inzwischen fertig gestellt, sie folgt 1:1 dem Datenblatt des Sensors.

    Leider sind meine Temperatur- und Luftfeuchtigkeitsmessungen meilenweit von der Realität weg, ich weiß aber nicht wieso. Die Temperatur liegt +7°C, teilweise bis zu +11°C daneben (Werte nach 2 Stunden, mit 1Hz Abtastrate). Die relative Luftfeuchtigkeit hängt von der Temperatur ab, wird aber anscheinend richtig berechnet.


    Mein momentaner Testaufbau besteht aus einer selbst gelaserten Platine, die auch vollkommen i.O. zu sein scheint. Um den BME280 herum ist im Radius von 1cm kein aktives Bauteil. Das nächste aktive Bauteil ist auf einer Seite ein ESP8266-12/-07 Modul, auf der anderen Seite ein Relay, das aber bisher unbetätigt bleibt. Auf der Rückseite der Platine befindet sich kein Bauteil.


    Bild des Aufbaus:


    Meine Serielle Ausgabe sieht folgendermaßen aus (Raum:22°C):


    Die Ausgabewerte sind vom Format her richtig und eigentlich zur weiteren Berechnung gedacht, weshalb die Dezimalstellen teilweise nicht stimmen.
    I32, I64 und DBL bezieht sich auf die Präzision bei der Berechnung der Werte. Bis auf DBL ist der Datentyp u/int32_t.


    Ich habe meine Arduino Library mal hochgeladen: GitHub Code


    Nun stellt sich mir die Frage, was ich da falsch mache?

  • So etwas ähnliches habe ich bei mir auch, nur ich verwende die "offizielle" Library in der Arduino IDE.
    Ich habe bei meiner Schaltung einen DS18S20 direkt neben dem BME280 und erhalte ca 5°C Unterschied.
    Außerdem habe ich auch schon den BME auf einer eigenen Platine eingesetzt, da ist der Unterschied dann marginal weniger.


    Ich hab mir das so erklärt, dass auch der ESP etwas wärmt und deswegen die Temperaturunterschiede entstehen.


    Eigenerwärmung durch Messungen kann ich bei mir ausschließen, da ich nur im 5 Minuten Takt messe.

    Anfragen ausserhalb des Forums (Mail o.ä.) werden ignoriert!

  • Hallo Driftmonster,


    leider kenne ich weder den BME820 von Bosch noch dessen Datenblatt.


    Ich kann mir aber vorstellen, dass eine Abtastrate von 1 Hz so groß ist, dass sich der Sensor aufgrund der Messungen erwärmt und somit das Messergebnis verfälscht.


    Welches Ergebnis erzielst Du, wenn Du die Messung z.B. im Minutenabstand durchführst?


    Beste Grüße


    Andreas

    Ich bin wirklich nicht darauf aus, Microsoft zu zerstören. Das wird nur ein völlig unbeabsichtigter Nebeneffekt sein.
    Linus Torvalds - "Vater" von Linux

    • Icon-Tutorials (IDE: Geany) - GPIO-Library - µController-Programmierung in Icon! - ser. Devices - kein Support per PM / Konversation

    Linux is like a wigwam, no windows, no gates, but with an apache inside dancing samba, very hungry eating a yacc, a gnu and a bison.

  • Hallo Andreas,


    Ich habe auch schon die Abtastrate auf 1/10 sowie 1/60Hz verringert, allerdings ergibt sich bei den Messwerten die gleiche Differenz von 7-11 °C
    Wenn ich aber z.B. meinen Finger direkt auf den Sensor lege, wird dieser ca. 35.5°C warm, was ich für durchaus richtig empfinde. Sobald ich dann meinen Finger wieder wegnehme, sinkt die Temperatur wieder auf den Wert von ca. 30°C, bei ziemlich konstanten 22 °C Raumtemperatur.


    digiart
    Die Library hab ich natürlich auch vorher mal getestet, diese nutzt aber nicht alle Funktionen des Sensors und bietet mir zu wenig Möglichkeiten. So kann man mit meiner Bibliothek z.B. ziemlich einfach die Oversampling Rate, Standby Zeit und IIR Filter Coeffizient der Messungen einstellen.


    Mit den Einstellungen habe ich natürlich auch schon rumgespielt und die vorgeschlagenen Settings aus dem Datenblatt getestet. Im Großen und Ganzen gibt es kleine Unterschiede, die generelle Abweichung ist aber immer vorhanden.


    Der BME280 läuft bei mir im momentan im "Normal Mode", also kontinuierlich eine Messung machen, dann StandBy Modus für 1s, wieder von vorne.
    Den "Forced Mode" habe ich auch schon getestet, bei diesem wird eine Messung gemacht, danach ist der Sensor im StandBy, bis der Modus erneut angefordert geschrieben wird. Läuft eigentlich auf das gleiche raus, da man diesen in der Endlosschleife immer neu anstößt.


    Ich hab HIER mal das Datenblatt verlinkt.

  • Servus,
    ohne Gegenmessung ist das schwierig ...
    Ich halte es für durchaus möglich, dass die Platine, also das Umfeld des Sensors, wärmer ist als Raumtemperatur (dass da sozusagen eine Art Mikroklima vorliegt) ...


    Wenn Deine Schaltung das physikalisch hergibt, wäre mal eine Messung in Eiswasser bzw. Wasserdampf interessant.


    cu,
    -ds-


  • Leider gibt das meine Schaltung nicht her. Ich werde aber gleich ein Thermometer suchen und mal versuchen die Temperatur des Sensors zu messen.


    Ich würde mich auch freuen, wenn andere meine Bibliothek ausprobieren könnten ( digiart). Beispiele sind auf GitHub mit dabei. "Burst Read" sollte bevorzugt genutzt werden, um den I2C Traffic gering zu halten. Beide Beipiele laufen aber out of the box.


    Ein Beispiel werde ich noch für die Sonderfunktionen erstellen, wird aber noch ein bis zwei Tage dauern. Erledigt

  • Hallo zusammen,


    ich habe leider nur ein normales Fieberthermometer hier, mit dem ich versucht habe die Temperatur des Sensors bzw. dessen Umgebung zu messen. Diese Versuche waren leider relativ erfolglos, da die Kontaktstelle wohl viel zu klein ist.
    Die Bibliothek auf GitHub habe ich auch noch aktualisiert, u.A. ist jetzt auch ein Beispiel für die erweiterten Funktionen vorhanden.


    Ich habe den Sensor allerdings mal die extrem kalte Nacht über draußen liegen gehabt, wo er auch bis zu -9°C gemessen hat. Die Abweichung ist also schonmal geringer; laut Internet waren es in meinem Ort über Nacht -12°C.


    Leider ist im finalen Aufbau ein Gehäuse um die Platine, sodass kein natürlicher Luftstrom um den Sensor fließen kann. Kennt ihr noch andere Temperatur- und Luftfeuchtigkeitssensoren, die I2C unterstützen?