SHT21 begin() gibt false, Daten kommen aber!?

OP #7505330
Lesenswert?

Hallo, ich wollte einen Sensor testen und wunderte mich, dass er nicht funktioniert. SHT21.begin() gibt mir immer false zurück. Wenn ich aber trotzdem Sensordaten abrufe funktioniert er jedoch tadellos. Was läuft denn da schief? Einer ne Idee? Den Testquelltext habe ich übrigens früher schon einmal mit einem anderen Sensor diesen Typs anstandslos benutzt...

1
#include <Adafruit_Si7021.h>
2

3
Adafruit_Si7021 SHT21 = Adafruit_Si7021();
4

5
bool SHT_Online =false;
6

7
void setup() {
8
  // put your setup code here, to run once:
9
   Wire.setClock(100);
10
   Serial.begin(9600);
11
  //I2C Sensoren initialisieren------------------------------------
12
   Wire.begin();
13
   //SHT21.begin());
14

15
  if(SHT21.begin())
16
    {
17
      Serial.println("SHT21 init success!");
18
      SHT_Online = true;  
19
    }
20
  else
21
    {
22
      Serial.println("SHT21 init failed!");
23
      SHT_Online = false;
24
    } 
25
 }
26

27
void loop() {
28
  // put your main code here, to run repeatedly:
29
 if (SHT_Online) 
30
    {
31

32

33
          Serial.println(F("--SHT21--------------------------------"));      
34
          double SHT_temperature = SHT21.readTemperature();
35
           SHT_temperature = round(SHT_temperature * 10.0) / 10.0;
36
    
37
          double SHT_humidity    = SHT21.readHumidity();  
38
          SHT_humidity    = round(SHT_humidity * 10.0) / 10.0;
39
          SHT_humidity    = SHT_humidity ;
40

41

42
          Serial.print("SHT-Temperature = ");Serial.print(SHT_temperature,2); Serial.println(" °C\t");
43
          Serial.print("SHT-Humidity = ");Serial.print(SHT_humidity,2); Serial.println(" %\t");            
44
       delay(1000);    
45
    }  
46
}
#7505391
Lesenswert?

Rainer W. schrieb:

Dietmar schrieb:

Tja, auf'm Sensormodul steht alles mögliche drauf. SI7021, SHT21, HTU21.

Das Modul kann nicht wissen, welche Bestückungsvariante du gekauft hast, d.h. welcher Sensor dort bestückt ist. Vielleicht guckst du einfach einmal, welcher Sensor bei dir auf dem Modul bestückt ist.

Wenn man sein Gehirn gegen Arduino getauscht hat, sind einem solche Kleinigkeiten auch schon egal.

OP #7505408
Lesenswert?

@ Cyblord Genauso ist das! Lebe in Frieden...

@ helfende Ich besitze schon zwei drei dieser Module. .begin() hat immer funktioniert. Habe noch nie darauf geachtet, was da genau drauf steht. Auf diesem Sensormodul steht HTU21. Aber ok. ich frage einfach die Daten ab und wenn ein NAN kommt weiß ich ob Sensor da oder nicht / kaputt.

Grüße!

#7505454
Lesenswert?

Da muss es doch ein Datenblatt geben, wo genau dargestellt wird, in welchem Register die Werte von Interesse (Fuftfeuchte, Temperatur usw.) hinterlegt sind und wie man die über I2C (oder SPI) Zugriff erlangt. Was hat das mit diesen LIBs aufsich? Liest man immerwieder.. Selbst wenn man nicht in der Lage ist, das Datenblatt vom Sensor zu interpretieren, so kann man doch sicher den Quellcode dieser "LIB" inspizieren und findet ganz schnell heraus, ob das mit dem Sensordatenblatt einhergeht, oder ist das aus rechltichen Gründen vorcompiliert? ... Ist es nicht. Hab eben nachgesehen. es gibt immer ne*.cpp-datei und eine *.h. Ist ja hilfreich, für alle, die nicht vom Fach sind, wirft aber genau jene Fragen auf, über die mich eben noch wunderte. Läuft das wirklich so? Man kauft sich solch ein blaues Platinchen und klemmt es an VCC, GND, SCA und SCL, installiert die "Lib" (hier wohl von Frau Fried (Adafruit)), ruft eines der mitglieferten Beispiele auf, lädt das hoch und: fertig?

Dann ist ja klar, dass niemand mehr Ahnung vom Fach hat und wir mit dererlei Fragen quasi täglich überannt werden. Pff

#7505462
Lesenswert?

Sebastian W. schrieb:

Dietmar schrieb:

SHT21.begin() gibt mir immer false zurück.

Mach mal print-Befehle in den Quellcode der Bibliothek, um zu sehen warum false zurückkommt.

Oder, vielleicht einfacher, ruf einfach die entsprechenden Methoden der Klasse auf, die Auskunft über den Grund der Fehlfunktion geben.

Das wäre eigentlich der normale Weg gewesen. Wenn eine Methode fehlschlägt (und nicht gleich den Grund dafür liefert) dann verwendet man die vorgesehenen Methoden dafür. OK. Sofern es sie gibt. Aber auch wenn es Arduino ist, muß deswegen ja nicht jede Library Kacke sein.

(Firma: Gast) #7505484
Lesenswert?

Axel S. schrieb:

Aber auch wenn es Arduino ist, muß deswegen ja nicht jede Library Kacke sein.

Sind sie nicht.

Allerdings sollte man schon die auswählen, welche zu dem betreffenden Sensor passt. Zumindest könnte das schon mal ein Grund dafür sein, dass begin() false liefert. Und das die Daten "richtig" kommen, könnte daran liegen, dass sich die Sensoren sehr ähnlich sind.

Alles ohne Gewähr.

OP #7505929
Lesenswert?

Hallo...

Daniel B. schrieb:

Bei HTU21 vielleicht mal die entsprechende Lib probieren ? https://github.com/adafruit/Adafruit_HTU21DF_Library

Danke, das ist die richtige Lib. Ich ging bis jetzt einfach davon aus, dass alle meine Sensormodule den gleichen Sensor Chip hätten, funktionierte ja auch bis auf meinen jetzt erworbenen.

Axel R. schrieb:

Ist ja hilfreich, für alle, die nicht vom Fach sind, wirft aber genau jene Fragen auf, über die mich eben noch wunderte. Läuft das wirklich so? Man kauft sich solch ein blaues Platinchen und klemmt es an VCC, GND, SCA und SCL, installiert die "Lib" (hier wohl von Frau Fried (Adafruit)), ruft eines der mitglieferten Beispiele auf, lädt das hoch und: fertig?

Dann ist ja klar, dass niemand mehr Ahnung vom Fach hat und wir mit dererlei Fragen quasi täglich überannt werden. Pff

Ja so ist das nun einmal heute! Jetzt können auch Leute die nicht so fundiertes Wissen in Elektronik haben brauchbare Schaltungen aufbauen. Und das ist auch gut so. Ich verstehe allerdings dass es nervt wenn mit "cut & paste" code auf den Mikrocontroller geladen wird. Und hier dann gefragt wird warum das nicht geht.

In meinem Fall handelt es sich um eine Wetterstation die ich selbst gebaut und programmiert habe. Diese funktioniert auch seit Jahren sehr gut. Nur eben dieses Sensormodul das ich immer mal tauschen muss da es "absäuft". Ohne das Benutzen solcher "blauen Platinchen" wäre mir das wohl nicht möglich gewesen. Wie meine ganze Hausautomation, die ich selbst gebaut habe. Es wäre schade wenn es diese Möglichkeit heute nicht gäbe! Und wenn die Fragen dieser "Ahnungslosen" zu sehr nerven... Einfach nicht Antworten.

Grüße..

OP #7506210
Lesenswert?

Sebastian W. schrieb:

Wegkorrodiert? Oder wird bei dir der Sensor fehlerhaft. Welche hast du bisher gehabt? Ich musste gerade einen SHT21 tauschen dessen Werte nicht mehr stimmten. Der hat allerdings 8 Jahre ohne Teflonkappe durchgehalten

Wie gesagt für mich waren diese "blauen Platinchen" alles SHT21 :-) Problem ist, dass die Feuchte irgendwann zu hoch angezeigt wird. Temperatur kommt mir auch etwas zu hoch vor. Meiner hat eine PTE Membran aber ich glaube die bringt wenig bis nichts, da die Feuchtigkeit trotzdem zu hoch angezeigt wird. Das ist aber gar nicht so wichtig. Es bildet sich oft Kondenswasser auf der Platine, und das legt den gesamten I2C lahm an dem ich noch andere Sensoren habe. Ich tausche dann das Sensormodul gegen ein trockenes, und alles läuft.

Daniel B. schrieb:

Bis auf den Sensor selber mit Heissleim eingegossen in einer Wetterstation draussen seit 8 Jahren ohne Probleme.

Diese Idee hatte ich neulich auch schon. Ich trockne den ausgebauten Sensor aber im Backofen bei 60°. Dann stimmt die Luftfeuchte auch wieder. Ich muss erst mal probieren ob mir da der Heißleim nicht weich wird..

Grüße..

#7506611
Lesenswert?

Dietmar schrieb:

Das ist aber gar nicht so wichtig. Es bildet sich oft Kondenswasser auf der Platine, und das legt den gesamten I2C lahm an dem ich noch andere Sensoren habe. Ich tausche dann das Sensormodul gegen ein trockenes, und alles läuft.

Da sollte sich kein Kondenswasser bilden, denn durch die Abwärme der Elektronik sollte es da immer etwas wärmer sein als die Umgebung. Und wenn du das nicht magst, greife zum SHT31, der hat eine eingebaute Heizung, die man ein- und ausschalten kann!

OP #7506665
Lesenswert?

Helmut -. schrieb:

greife zum SHT31, der hat eine eingebaute Heizung, die man ein- und ausschalten kann!

Hallo, also mein Chip HTU21 müsste diese Heizung auch haben. Denn wenn ich mit der Lib Adafruit_Si7021 compiliere (bei der .begin() nicht funktioniert) kann ich die Heizung zuschalten. Temperatur steigt und Feuchte sinkt.

In der Lib Adafruit_HTU21DF gibt es gar keine .heater() Methode. Obwohl der Sensor diese Funktion wohl doch mitbringt.

Mein

Grüße

#7506690
Lesenswert?

Helmut -. schrieb:

Da sollte sich kein Kondenswasser bilden, denn durch die Abwärme der Elektronik sollte es da immer etwas wärmer sein als die Umgebung.

Wenn ein SHT21 mit seinen typisch 0.15µA Sleep Strom zu einer Eigenerwärmung führt, die die natürliche Konvektion dominiert, läuft da irgendetwas falsch. Wenn so ein Außensensor ein Jahr lang mit einem kleinen Satz Batterie betrieben wird, steht da nichts für nennenswerte elektrische Heizung zur Verfügung. Rechne mal nach, wie groß der Temperaturgradient ist, den du damit aufrecht erhalten könntest. Und außerdem: Wer will schon einen Außentemperatursensor dauerhaft elektrisch aufheizen.

#7506716
Lesenswert?

Rainer W. schrieb:

Wenn so ein Außensensor ein Jahr lang mit einem kleinen Satz Batterie betrieben wird, steht da nichts für nennenswerte elektrische Heizung zur Verfügung.

Doch. Die Batterieenergie entfleucht ja nicht direkt in den Äther. Also heizt sie die Umgebung auf. Und deswegen kann keine Betauung stattfinden, da die ja nur passiert, wenn der Sensor kälter als der Taupunkt ist. Also meine Sensoren mit anständigem Strahlungsschutz, der direkt einwirkenden Regen verhindert, halten eigentlich Jahre, ohne Meßprobleme. Man darf halt keinen Billigkrempel aus China verwenden, wo man nicht weiß, was da drin steckt.

#7506786
Lesenswert?

Helmut -. schrieb:

Die Batterieenergie entfleucht ja nicht direkt in den Äther. Also heizt sie die Umgebung auf. Und deswegen kann keine Betauung stattfinden, da die ja nur passiert, wenn der Sensor kälter als der Taupunkt ist.

Bei einem Sensor der ein Jahr aus zwei AA-Batterien lebt, hast du eine mittlere Leistung von vielleicht 0.0009W oder 0.9mW zur Verfügung. Welchen Temperaturgradienten zur Umgebung wirst du damit wohl erzielen?

#7506794
Lesenswert?

Rainer W. schrieb:

Helmut -. schrieb:

Die Batterieenergie entfleucht ja nicht direkt in den Äther. Also heizt sie die Umgebung auf. Und deswegen kann keine Betauung stattfinden, da die ja nur passiert, wenn der Sensor kälter als der Taupunkt ist.

Bei einem Sensor der ein Jahr aus zwei AA-Batterien lebt, hast du eine mittlere Leistung von vielleicht 0.0009W oder 0.9mW zur Verfügung. Welchen Temperaturgradienten zur Umgebung wirst du damit wohl erzielen?

Na immerhin paar µK ...

#7506815
Lesenswert?

Jens G. schrieb:

Rainer W. schrieb:

Helmut -. schrieb:

Die Batterieenergie entfleucht ja nicht direkt in den Äther. Also heizt sie die Umgebung auf. Und deswegen kann keine Betauung stattfinden, da die ja nur passiert, wenn der Sensor kälter als der Taupunkt ist.

Bei einem Sensor der ein Jahr aus zwei AA-Batterien lebt, hast du eine mittlere Leistung von vielleicht 0.0009W oder 0.9mW zur Verfügung. Welchen Temperaturgradienten zur Umgebung wirst du damit wohl erzielen?

Na immerhin paar µK ...

... TemperaturERHÖHUNG. Und da der Taupunkt selten höher als die Außentemperatur ist, ist eigentlich keine Betauung möglich.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren