Forum: Mikrocontroller und Digitale Elektronik SHT21 begin() gibt false, Daten kommen aber!?


von Dietmar (daphne)


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
}

von Achim M. (minifloat)


Lesenswert?

Dietmar schrieb:
> Adafruit_Si7021 SHT21

Troll: Well played, Sir.

~Troll: Ist es jetzt ein Si7021 oder ein SHT21?

mfg mf

von Dietmar (daphne)


Lesenswert?

Tja, auf'm Sensormodul steht alles mögliche drauf. SI7021, SHT21, HTU21. 
Ich dachte immer der Sensorchip ist SI7021...

von Achim M. (minifloat)


Lesenswert?

Mach mal ein Foto vom Platinchen und vom gesamten Aufbau.

mfg mf

von Rainer W. (rawi)


Angehängte Dateien:

Lesenswert?

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.

: Bearbeitet durch User
von Cyblord -. (cyblord)


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.

von Dietmar (daphne)


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!

von Daniel B. (dbuergin)


Lesenswert?

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

von Sebastian W. (wangnick)


Lesenswert?

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.

LG, Sebastian

von Axel R. (axlr)


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

von Axel S. (a-za-z0-9)


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.

von Arduino F. (Firma: Gast) (arduinof)


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.

von Wilhelm M. (wimalopaan)


Lesenswert?

Dietmar schrieb:
> Den Testquelltext habe ich übrigens
> früher schon einmal mit einem anderen Sensor diesen Typs anstandslos
> benutzt...

Der gezeigte Quelltext würde aber in dem geschilderten Fall gar nichts 
ausgeben.

von Dietmar (daphne)


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..

von Cyblord -. (cyblord)


Lesenswert?

Dietmar schrieb:
> 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.

Ist halt nur solange gut wie es funktioniert. Funktioniert es mal nicht, 
geht das Geheule los, weil man eben keine Ahnung hat und nicht mal 
selbst auf Fehlersuche gehen kann.

von Sebastian W. (wangnick)


Lesenswert?

Dietmar schrieb:
> Nur eben dieses Sensormodul das ich immer mal tauschen muss da es
> "absäuft".

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 
...

LG, Sebastian

von Daniel B. (dbuergin)


Lesenswert?

Ich habe diesen Sensor 
https://www.tindie.com/products/closedcube/sht35-d-digital-humidity-temperature-sensor/ 
mit Kappe.

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

von Dietmar (daphne)


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..

von Rainer W. (rawi)


Lesenswert?

Dietmar schrieb:
> Es bildet sich oft Kondenswasser auf der Platine, und das legt den
> gesamten I2C lahm an dem ich noch andere Sensoren habe.

Das passiert nur, wenn die Platine der kälteste Punkt ist und die 
Temperatur unter dem Taupunkt liegt. Du solltest nicht die Platine als 
Kühlfalle verwenden.

von Helmut -. (dc3yc)


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!

von Dietmar (daphne)


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

von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Dietmar schrieb:
> In der Lib Adafruit_HTU21DF gibt es gar keine .heater() Methode. Obwohl
> der Sensor diese Funktion wohl doch mitbringt.
Oh Gott, oh Gott, oh Gott ....

Was kann man jetzt nur tun?

Da gibts wohl nur 2 Möglichkeiten:
1. Die Flinte in den Sand stecken.
2. Den Kopf ins Korn werfen.

von S. L. (sldt)


Lesenswert?

'And now he complains because the pool is not heated'

Snoopy, nachdem Woodstock in den Wassernapf gefallen war.

von Rainer W. (rawi)


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.

: Bearbeitet durch User
von Arduino F. (Firma: Gast) (arduinof)


Lesenswert?

Für Außenbereiche empfehle ich das Esel-Barometer
Das ist so modern, das kommt sogar ganz ohne Strom aus.

: Bearbeitet durch User
von Helmut -. (dc3yc)


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.

von Dietmar (daphne)


Lesenswert?

Arduino F. schrieb:
> Was kann man jetzt nur tun?
>
> Da gibts wohl nur 2 Möglichkeiten:
> 1. Die Flinte in den Sand stecken.
> 2. Den Kopf ins Korn werfen.

Du hast 3. vergessen. - Weiterwurschteln wie bisher! Auch mit Billig 
China Krempel. Hat ja bis jetzt über Jahre funktioniert. Ich passe 
meinen code etwas an, und Laube brennt...

von Rainer W. (rawi)


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?

: Bearbeitet durch User
von Jens G. (jensig)


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 ...

von Helmut -. (dc3yc)


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.

von Rainer W. (rawi)


Lesenswert?

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

Dann handelt es sich wohl um Phantombetauung, falls die Platine nicht 
ungeschützt und ohne Strahlungsschutz im Freien hängt ;-)

Dietmar schrieb:
> Es bildet sich oft Kondenswasser auf der Platine, ...

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.