Ich verwende einen DHT21
(https://www.amazon.de/dp/B0D82X8H3R?ref=ppx_yo2ov_dt_b_fed_asin_title)
auf einem D1 Mini V3 NodeMCU ESP8266EX um alle 30 Sekunden die
Temperatur und Feuchtigkeit auszulesen.
Verbunden ist der DHT sowohl mit 3,3 als auch mit 5 V, Ground und dem
GPIO2 (D4) Pin. Daten und VCC sind mit 10kOhm verbunden.
Das Programm funktioniert fast ohne Probleme.
Meine beiden Probleme sind:
Direkt nach dem Falschen muss ich die Spannungsversorgung vom D1
abziehen oder ich bekomme keine Messergebnisse. Was nicht besonders
schlimm ist.
Aber das große Problem ist, dass ich keine Messergebnisse mehr erhalte,
sobald ein andere Verbraucher (z.B. der Lötkolben) in der Nähe vom
Datenkabel ausgeschaltet wird. Beim Einschalten passiert nichts, aber
sobald abgeschaltet wird, kommen keine Messergebnisse mehr an.
Das Problem wird erst durch Abstecken und einstecken vom Sensor oder mit
abstecken und einstecken vom D1 behoben. Nur ein Reset über den
Reset-Knopf behebt das Problem nicht.
Ich habe schon mehrere DHTs und verschiedene D1 und auch einen ESP266-01
getestet. Immer das gleiche Problem.
Woran liegt das und wie kann ich das beheben? (Anderer oder weiterer
Widerstand, anderer Pin, Kondensator,.... )
Vielen Dank für eure Hilfe.
Gruß Mathias
Möglicherweise hat dein Programm ein Problem damit, wenn der Sensor
durch einen elektromagnetischen Störimpuls unerwartet zum Senden seiner
Messwerte angeregt wird.
Man könnte jetzt versuchen, die Störimpulse fern zu halten. Ich würde
aber erst versuchen, das Programm stabiler zu machen.
Oder hängt sich der ESP komplett auf, so dass er nicht mal mehr per WLAN
anpingbar ist?
GPIO2 ist ungünstig, denn dieser Pin ist beim Booten ein serieller
Ausgang, der dabei nicht auf LOW gezogen werden darf. Sonst bootet der
ESP nicht zuverlässig.
Der ESP hängt sich nicht auf. Er sendet per MQT und Seriell weiterhin
Nachrichten, jetzt aber dass keine Messerwerte mehr zurückkommen.
Wenn NUR der Sensor abgesteckt wird und wieder eingesteckt wird im
laufenden Betrieb funktioniert auch wieder alles.
So machst du dir den ESP8266 kaputt, weil du damit 5V Pegel auf GPIO2
legst. Es sind maximal 3,6 Volt erlaubt. Betreibe den Pull-Up Widerstand
mit 3,3V.
Mathias H. schrieb:> Program.txt (8,3 KB)
Schau mal, was da in deinem eigenen Programm als Kommentar steht:
> If using a board with 3.3V logic like an Arduino Due> connect pin 1 to 3.3V instead of 5V!
Ja. Und wenn du kannst, nimm einen Widerstand, der weniger empfindlich
auf Störungen reagiert. Ich tendiere zu 2,2 kΩ.
Gibt dein Programm die Meldung "Failed to read from DHT sensor!" aus?
Wenn ja, kann man an der Stelle vielleicht eine Neu-Initialisierung der
DHT Klasse einbauen: dht.begin(...)
Mathias H. schrieb:> Ich hoffe, das passt so.
ich sehe mehrere Problemchen (oder die halt auftreten können)
1. versorgt wird der DHT mit 5V und als Pegel wird 3,3V erwartet, besser
wäre den DHT mit 3,3V zu versorgen, 2 Spannungsversorgungen zu nutzen
ist selten gut und da das Datenblatt als Versorgung 3,3V erlaubt.....
2. Wenn der DHT abstürzt weil Störungen den außer Tritt bringen könnte
er genauso gut aus einem ESP Port versorgt werden,winwin, es sind keine
2 gemischten Versorgungsspannungen im Spiel, er kann durch den ESP neu
gestartet werden.
3. Der R kann sollte für bessere Störunempfindlichkeit reduziert werden,
ich nehme öfter min. 1mA bei low, das wären bei 3.3V eben 3,3kOhm.
4. Ein DHT22 ist genauer.
5. Schaltbilder gehen anders, auch Fritzing kann Schaltbilder.
Ich ändere den Widerstand. Vorrätig hätte ich noch 5,1K oder 1K. Was
empfiehlst du mir?
Das Program gibt keine Fehlermeldung aus. Es läuft lediglich in diese
Schleife rein:
// Check if any reads failed and exit early (to try again).
total_counter = total_counter + 1;
if (isnan(h) || isnan(t)) {
Aber da kann ich gerne wie im Setup "dht.begin();" reinsetzten.
Noch andere Vorschläge?
Joachim B. schrieb:> Mathias H. schrieb:>> Ich hoffe, das passt so.>> ich sehe mehrere Problemchen (oder die halt auftreten können)>> 1. versorgt wird der DHT mit 5V und als Pegel wird 3,3V erwartet, besser> wäre den DHT mit 3,3V zu versorgen, 2 Spannungsversorgungen zu nutzen> ist selten gut und da das Datenblatt als Versorgung 3,3V erlaubt.....
Wird geändert, Spannungsversorgung auf die andere Seite legen und mit
3,3V versorgen. Kein Problem.
> 2. Wenn der DHT abstürzt weil Störungen den außer Tritt bringen könnte> er genauso gut aus einem ESP Port versorgt werden,winwin, es sind keine> 2 gemischten Versorgungsspannungen im Spiel, er kann durch den ESP neu> gestartet werden.
Verstehe ich nicht. Ich habe keine 2. Spannungsversorgung. Der ESP hat
sowohl einen 5V als auch einen 3,3V Ausgang. Mir kam es so vor dass der
5V etwas stabiler war, aber da kann ich mich auch täuschen weil richtig
stabil ist es leider gar nicht.
>> 3. Der R kann sollte für bessere Störunempfindlichkeit reduziert werden,> ich nehme öfter min. 1mA bei low, das wären bei 3.3V eben 3,3kOhm.
Ich habe einen 1k und einen 5,1K zur Hand. Passen die oder muss ich 3,3k
organisieren?
> 4. Ein DHT22 ist genauer.
Der DHT22 sollte meiner Meinung nach von der Messung identisch sein, nur
halt nicht mit Kabel und Schutzgehäuse. Oder irre ich mich da??
> 5. Schaltbilder gehen anders, auch Fritzing kann Schaltbilder.
Das war am einfachsten und schnellsten mit Word gemacht. Ist ja auch
keine große Schaltung. Ich hoffe, man erkennt wie es angeschlossen ist.
Vielen Dank.
Mathias H. schrieb:> Verstehe ich nicht. Ich habe keine 2. Spannungsversorgung.
doch, aus USB 5V und aus dem Spannungsregler auf dem Board 3,3V.
Sowas kann ins Auge gehen! wenn die beiden auch mal zusammenstoßen.
Ein DHT brauch so wenig Strom das er auch aus einem ESP Port gespeist
werden kann.
Mathias H. schrieb:> Ich habe einen 1k und einen 5,1K zur Hand. Passen die oder muss ich 3,3k> organisieren?
war eine Empfehlung wenn Störungen reinspucken.
2x 5,1k parallel oder auch 1k wären OK, so hoch wie möglich, so niedrig
wie nötig.
Joachim B. schrieb:> Mathias H. schrieb:>> Verstehe ich nicht. Ich habe keine 2. Spannungsversorgung.>> doch, aus USB 5V und aus dem Spannungsregler auf dem Board 3,3V.
Die USB 5V Spannungsversorgung speist den D1 Mini per USB-Anschluss.
Am D1 Mini hängt dann der DHT.
> Sowas kann ins Auge gehen! wenn die beiden auch mal zusammenstoßen.>> Ein DHT brauch so wenig Strom das er auch aus einem ESP Port gespeist> werden kann.>> Mathias H. schrieb:>> Ich habe einen 1k und einen 5,1K zur Hand. Passen die oder muss ich 3,3k>> organisieren?>> war eine Empfehlung wenn Störungen reinspucken.> 2x 5,1k parallel oder auch 1k wären OK, so hoch wie möglich, so niedrig> wie nötig.
Dann also den 1K. Wird so angeschlossen. Danke.
Kann ich noch etwas an der SW machen? Ich glaube leider, dass das
Problem wird mit dieser Änderung noch nicht behoben sein wird.
Mathias H. schrieb:> Ich hoffe, das passt so.
Nein, das ist ein Wimmelbild, aber kein Schaltplan! Schaltpläne sind bei
Fritzing einen Tab weiter rechts! Aber kan kann schon erkennen, was du
meinst. Es wäre nur schön, wenn die GPIO-Namen auch dabei stehen würden!
Mathias H. schrieb:> Ich glaube leider
ich nicht, bin aus der Kirche mit 12 und 16 ausgetreten.
Mathias H. schrieb:> Die USB 5V Spannungsversorgung speist den D1 Mini per USB-Anschluss.> Am D1 Mini hängt dann der DHT.
was soll der Widerspruch, dein Plan zeigt daß beide
Spannungsversorgungen genutzt werden, 5V aus USB und 3.3V von der
Boardversorgung vom dortigen Spannungsregler und das kann mal schief
gehen, durch Lötspritzer, defekten Bauteilen o.ä. warum also ohne Not 2
Spannungsregler nutzen wenn es mit einer Spannung auch geht.
Für längere Leitungen gibt es Pegelwandler in beide Richtungen.
Helmut -. schrieb:> Mathias H. schrieb:>> Ich hoffe, das passt so.>> Nein, das ist ein Wimmelbild, aber kein Schaltplan! Schaltpläne sind bei> Fritzing einen Tab weiter rechts! Aber kan kann schon erkennen, was du> meinst. Es wäre nur schön, wenn die GPIO-Namen auch dabei stehen würden!
Wo finde ich dieses Fritzing? Ich sehe es leider nicht. Habe wohl
Tomaten auf den Augen, Sorry.
Jemand mit nen Hinweis, wo ich schauen muss?
Danke,
Gruß Mathias
Mathias H. schrieb:> Kann ich noch etwas an der SW machen?
Die wichtigste Frage ist: Hängt es und wenn ja, dann wo?
Wenn das Programm nicht hängt, finde heraus, woran es den Fehler
erkennen kann. Dann kannst du versuchen, nach der Erkennung des Fehlers
eine großzügige Pause delay(1s) gefolgt von begin() einzubauen.
Damit der Arduino läuft, benötigt er ja Strom. Dieser bekommt er bei mir
aus einem USB Netzteil mit USB-C Stecker der direkt im D1 Mini
eingesteckt ist.
Der D1 Mini hat dann einen interne Spannungswandler und bietet 3,3V und
5V über seine Pins zur Verfügung.
An dieser (3,3V) Spannungsversorgung habe ich den DHT angeschlossen.
So gut erklärt? Es gibt also nur eine Spannungsversorgung.
Monk schrieb:> Mathias H. schrieb:>> Kann ich noch etwas an der SW machen?>> Die wichtigste Frage ist: Hängt es und wenn ja, dann wo?
Das Programm läuft ganz normal weiter, erhält aber, selbst nach vielen
Stunden, keine Messwerte mehr.
> Wenn das Programm nicht hängt, finde heraus, woran es den Fehler> erkennen kann. Dann kannst du versuchen, nach der Erkennung des Fehlers> eine großzügige Pause delay(1s) gefolgt von begin() einzubauen.
Das versuche ich jetzt einfach mal. Pause und dann Begin und nochmals
Pause und dann schauen, ob es sich fängt.
Ansonsten kannst du noch versuchen, einen Kondensator mit ca. 100µF an
die 3,3V und GND Anschlüsse des ES Moduls zu löten. Manchmal hilft das
zur Stabilisierung der Stromversorgung.
Monk schrieb:> Ansonsten kannst du noch versuchen, einen Kondensator mit ca. 100µF an> die 3,3V und GND Anschlüsse des ES Moduls zu löten. Manchmal hilft das> zur Stabilisierung der Stromversorgung.
Kondensator habe ich bestellt. Sollten morgen kommen.
Mal schauen, ob das etwas bringt. Danke.
Gibt es sonst noch Ideen??
Warum passiert das beim Ausschalten von anderen Geräten in der Nähe???
Ich hab das Ganze jetzt einmal kurz überflogen. Bist Du Dir sicher, dass
der DHT auch noch funktioniert?
Ich hatte vor kurzem einen ähnlichen Sachverhalt und habe gesucht wie
blöd, bis mir aufgefallen, dass mein SHT30 kaputt war.
Probiere doch Mal, mit dem simpelsten Sketch, nur den DHT auszulesen,
sollte das mit den aktuellen Anschlüssen möglich sein, kann der Fehler
wahrscheinlich nur im Code liegen oder dein Sensor läuft einfach nicht
mit 3.3 V.
Beim SHT-30 beispielsweise, gibt es Boards die für 3.3V und 5V ausgelegt
sind.
Mathias H. schrieb:> Warum passiert das beim Ausschalten von anderen Geräten in der Nähe???
Weil im Schaltkontakt ein Funke entsteht, der eine Radiowelle erzeugt.
Jede Leitung ist eine Antenne. Mit der Entdeckung begannt die
Entwicklung von drahtlosen Funkstrecken.
https://de.wikipedia.org/wiki/Knallfunkensender
Ach und eine Sach fällt mir auch noch ein:
Bei Betrieb von externen Modulen auf 5V sind Level-Shifter (5V auf 3,3V
und umgekehrt) notwendig, um die GPIOs des ESP nicht zu grillen. Das
könnte hier unter Umständen durchaus passiert sein, da die PINs des ESP
wohl doch recht empfindlich sind.
Probiere als Datenbusleitung, doch auch nochmal einen anderen PIN des
ESP.
Paul schrieb:> Ich hab das Ganze jetzt einmal kurz überflogen. Bist Du Dir sicher, dass> der DHT auch noch funktioniert?> Ich hatte vor kurzem einen ähnlichen Sachverhalt und habe gesucht wie> blöd, bis mir aufgefallen, dass mein SHT30 kaputt war.>> Probiere doch Mal, mit dem simpelsten Sketch, nur den DHT auszulesen,> sollte das mit den aktuellen Anschlüssen möglich sein, kann der Fehler> wahrscheinlich nur im Code liegen oder dein Sensor läuft einfach nicht> mit 3.3 V.
Also der DHT funktioniert für Stunden ohne Probleme, solange kein 230V
Verbraucher in der Nähe geschaltet wird. Da ich aber mit dieser Messung
etwas steuern möchte und es aktuell noch per Zeitschaltuhr geschaltet
wird, funktioniert es in der echten Umgebung nur ein paar Minuten, bis
der Verbraucher geschaltet wird und dann nichts mehr funktioniert. :-(
> Beim SHT-30 beispielsweise, gibt es Boards die für 3.3V und 5V ausgelegt> sind.
Ich habe den DHT an 3,3V angeschlossen.
Paul schrieb:> Ach und eine Sach fällt mir auch noch ein:>> Bei Betrieb von externen Modulen auf 5V sind Level-Shifter (5V auf 3,3V> und umgekehrt) notwendig, um die GPIOs des ESP nicht zu grillen. Das> könnte hier unter Umständen durchaus passiert sein, da die PINs des ESP> wohl doch recht empfindlich sind.>> Probiere als Datenbusleitung, doch auch nochmal einen anderen PIN des> ESP.
Ich habe es mit verschiedenen ESPs versucht und hatte immer das gleiche
Problem. Außerdem läuft ja alles ohne Probleme, bis ein Verbraucher
abgeschaltet wird.
Monk schrieb:> Mathias H. schrieb:>> Kann ich noch etwas an der SW machen?>> Die wichtigste Frage ist: Hängt es und wenn ja, dann wo?>> Wenn das Programm nicht hängt, finde heraus, woran es den Fehler> erkennen kann. Dann kannst du versuchen, nach der Erkennung des Fehlers> eine großzügige Pause delay(1s) gefolgt von begin() einzubauen.
Hat das Problem leider nicht gelöst.
Der Fehler wird nicht behoben durch die erneute Initialisierung.
Schade.
Mathias H. schrieb:> Ich habe den DHT an 3,3V angeschlossen.
Ich habe auch gerade nochmal im Datenblatt zum DHT21 geguckt. Der sollte
mit 3.3V klarkommen, da es in den Spezifikationen auch so angegeben ist.
Aber wie der gute "Monk" aka "roehrmond" bereits ein zwei Beiträge
weiter oben bereits schrieb, ist wahrscheinlich der Kontaktfunke der
Zeitschaltuhr schuld.
Also nach Möglichkeit die olle Zeitschaltuhr verbannen.
Mathias H. schrieb:> Ich habe es mit verschiedenen ESPs versucht und hatte immer das gleiche> Problem. Außerdem läuft ja alles ohne Probleme, bis ein Verbraucher> abgeschaltet wird.
Spaßenshalber könntest Du mal probieren, ein elektrischen Feuerzeug in
der Nähe zu zünden. Verursacht es das selbe Problembild, hast du mit
großer Wahrscheinlichkeit den/die Störer gefunden.
Paul schrieb:> Mathias H. schrieb:>> Ich habe den DHT an 3,3V angeschlossen.>> Ich habe auch gerade nochmal im Datenblatt zum DHT21 geguckt. Der sollte> mit 3.3V klarkommen, da es in den Spezifikationen auch so angegeben ist.> Aber wie der gute "Monk" aka "roehrmond" bereits ein zwei Beiträge> weiter oben bereits schrieb, ist wahrscheinlich der Kontaktfunke der> Zeitschaltuhr schuld.>> Also nach Möglichkeit die olle Zeitschaltuhr verbannen.
Leider ist es fast jedes Gerät in der Nähe.
Der Ventilator, der Lötkolben, die Lampe,... Und die Zeitschaltuhr sind
zwei recht neue Shellys.
Mathias H. schrieb:
> Leider ist es fast jedes Gerät in der Nähe.>> Der Ventilator, der Lötkolben, die Lampe,... Und die Zeitschaltuhr sind> zwei recht neue Shellys.
Das ist natürlich bitter :( .
Ggf. hilft hier eine Entstörung mit Filtern? Da ich davon aber nicht so
viel Ahnung habe, möchte ich keine Falschaussagen geben und keine
Filtermöglichkeit empfehlen. Ggf. kann hier Jemand versiertes, einmal
kurz einen Spruch zu machen?!
Mathias H. schrieb:> Der Fehler wird nicht behoben durch die erneute Initialisierung.>> Schade.
dann eben power off/on aus einem GPIO Port wenn der DHT zickt
Wie weit ist der DHT vom ESP weg?
Joachim B. schrieb:> Mathias H. schrieb:>> Der Fehler wird nicht behoben durch die erneute Initialisierung.>>>> Schade.>> dann eben power off/on aus einem GPIO Port wenn der DHT zickt
Das hört sich gut an. Also den GPIO verwenden als 3,3V Ausgang? Wie wäre
dafür das Programm? Oder wie müsste ich das beschalten?
>> Wie weit ist der DHT vom ESP weg?
Ca. 2 Meter. Aber ich habe das gleiche Problem mit dem 10cm Sensor
Kabel, das direkt verbaut ist, und das auch leider nicht geschirmt ist.
Mathias H. schrieb:
>> Das hört sich gut an. Also den GPIO verwenden als 3,3V Ausgang? Wie wäre> dafür das Programm? Oder wie müsste ich das beschalten?
Wenn ich mich nicht komplett irre, kann der Sketch gleich bleiben und
such mal nach "ds18b20 parasite power". Der DS18b20 ist nur ein anderer
Tempsensor, der aber mit der gleichen Signalübertragung arbeitet.
Ersetze den DS18B20 in den Schaltbildern durch deinen DHT, und dann
sollte die parasitäre Speisung funktionieren.
Dadurch braucht der Sensor aber etwas zum "Anlaufen" und bietet dir
nicht gleich unbedingt plausible Werte an oder kann direkt angesprochen
werden. Ich meine mich zu erinnern, dass er so um die 2s benötigt.
Ggf. müsstest Du diesbezüglich den Code noch anpassen, ansonsten dürfte
der Code aber gleich bleiben können.
Mathias H. schrieb:> Also den GPIO verwenden als 3,3V Ausgang?
Ja
> Wie wäre dafür das Programm?
Schau mal in die Arduino Doku wie man einen GPIO als Ausgang
programmiert. Das erste Beispielprogramm (Led Blinker) macht das.
> Oder wie müsste ich das beschalten?
Na du benutzt einen zweiten GPIO anstelle vom 3,3V Ausgang, um damit den
Sensor zu versorgen.
Mathias H. schrieb:> Das hört sich gut an. Also den GPIO verwenden als 3,3V Ausgang? Wie wäre> dafür das Programm? Oder wie müsste ich das beschalten?
einfach nur einen GPIO an VCC vom DHT natürlich der pullup vom Data
auch.
1
#define GPIO_NR 13 // dein genutzer Port natürlich wenn nicht 13
2
3
voidsetup()
4
{
5
pinMode(GPIO_NR,OUTPUT);// sets the digital pin GPIO_NR as output
6
digitalWrite(GPIO_NR,HIGH);// sets the digital pin GPIO_NR on
7
}
8
9
voidswitch_power_off_on
10
{
11
digitalWrite(GPIO_NR,LOW);// sets the digital pin GPIO_NR off
12
delay(500);// waits for a halfsecond
13
digitalWrite(GPIO_NR,HIGH);// sets the digital pin GPIO_NR on
Mathias H. schrieb:> Das Program gibt keine Fehlermeldung aus. Es läuft lediglich in diese> Schleife rein:>> // Check if any reads failed and exit early (to try again).> total_counter = total_counter + 1;> if (isnan(h) || isnan(t)) {
"if" ist keine Schleife!
Wenn die Bedingung erfüllt ist sollte er auch eine Meldung ausgeben.
Mathias H. schrieb:> Leider ist es fast jedes Gerät in der Nähe.>> Der Ventilator, der Lötkolben, die Lampe,... Und die Zeitschaltuhr sind> zwei recht neue Shellys.
Was gibt der Serial Monitor aus?
Joachim B. schrieb:> Mathias H. schrieb:>> Das hört sich gut an. Also den GPIO verwenden als 3,3V Ausgang? Wie wäre>> dafür das Programm? Oder wie müsste ich das beschalten?>> einfach nur einen GPIO an VCC vom DHT natürlich der pullup vom Data> auch.>>
1
>#defineGPIO_NR13// dein genutzer Port natürlich wenn nicht 13
2
>
3
>voidsetup()
4
>{
5
>pinMode(GPIO_NR,OUTPUT);// sets the digital pin GPIO_NR as output
6
>digitalWrite(GPIO_NR,HIGH);// sets the digital pin GPIO_NR on
7
>}
8
>
9
>voidswitch_power_off_on
10
>{
11
>digitalWrite(GPIO_NR,LOW);// sets the digital pin GPIO_NR off
12
>delay(500);// waits for a halfsecond
13
>digitalWrite(GPIO_NR,HIGH);// sets the digital pin GPIO_NR on
14
>delay(500);// waits for a halfsecond
15
>}
16
>
Vielen Dank!
Kann ich den GPIO 2, den ich für meine Daten verwende, auch "aus und
ein" schalten?
Obelix X. schrieb:> Mathias H. schrieb:>> Das Program gibt keine Fehlermeldung aus. Es läuft lediglich in diese>> Schleife rein:>>>> // Check if any reads failed and exit early (to try again).>> total_counter = total_counter + 1;>> if (isnan(h) || isnan(t)) {>> "if" ist keine Schleife!
Ist mir klar, dachte so versteht es jeder. Sorry.
> Wenn die Bedingung erfüllt ist sollte er auch eine Meldung ausgeben.
Natürlich, es passiert genau das, was in der Bedingung angegeben ist:
Serial.print(F("Failed to read from DHT sensor!"));
> Mathias H. schrieb:>> Leider ist es fast jedes Gerät in der Nähe.>>>> Der Ventilator, der Lötkolben, die Lampe,... Und die Zeitschaltuhr sind>> zwei recht neue Shellys.>> Was gibt der Serial Monitor aus?
Failed to read from DHT sensor!
Ich weiß nicht ob das ein Fehler ist, das sieht aber für mich komisch
aus :
1
time_tnow=time(nullptr);
2
now=now+3600+3600;
3
Stringtime=String(ctime(&now));
Es wird die Variable "now" deklariert aber in "time.h" gibt es die
Funktion "now(); // Returns the current time as seconds".
Das gleiche mit "time". Erste ein Funktionsaufruf, dann eine
Variablendeklaration.
Auch wenn es funktioniert finde ich das kein schönen Programmierstiel.
Mathias H. schrieb:> Kann ich den GPIO 2, den ich für meine Daten verwende, auch "aus und> ein" schalten?
im Prinzip ja, nur warum willst du das tun?
Was verstehst du unter aus und ein?
In der Computerprogrammierei gibt es kein AUS und kein EIN, es gibt
Logikpegel, die können high und low sein, welches davon EIN und AUS
bedeutet liegt im Auge des Betrachters und der Hardware, ist wie der
Wippschalter der Licht ein- und aus-schaltet, je nach dem wierum er
eingebaut ist.
Joachim B. schrieb:> Mathias H. schrieb:>> Das hört sich gut an. Also den GPIO verwenden als 3,3V Ausgang? Wie wäre>> dafür das Programm? Oder wie müsste ich das beschalten?>> einfach nur einen GPIO an VCC vom DHT natürlich der pullup vom Data> auch.>>
1
>#defineGPIO_NR13// dein genutzer Port natürlich wenn nicht 13
2
>
3
>voidsetup()
4
>{
5
>pinMode(GPIO_NR,OUTPUT);// sets the digital pin GPIO_NR as output
6
>digitalWrite(GPIO_NR,HIGH);// sets the digital pin GPIO_NR on
7
>}
8
>
9
>voidswitch_power_off_on
10
>{
11
>digitalWrite(GPIO_NR,LOW);// sets the digital pin GPIO_NR off
12
>delay(500);// waits for a halfsecond
13
>digitalWrite(GPIO_NR,HIGH);// sets the digital pin GPIO_NR on
14
>delay(500);// waits for a halfsecond
15
>}
16
>
Vielen Dank!!! Damit funktioniert es perfekt. Eine Messung fällt aus,
und danach geht es wieder weiter.
Perfekt!!
Immer im Fehlerfall wird jetzt dieses Skript ausgeführt:
Obelix X. schrieb:> "if" ist keine Schleife!
Aber der Block dahinter steht doch in geschleiften Klammern! :-)
Mathias H. schrieb:> Kann ich den GPIO 2, den ich für meine Daten verwende, auch "aus und> ein" schalten?
Der Pin ist im Ruhezustand "aus", da als Eingang konfiguriert.
Obelix X. schrieb:> Auch wenn es funktioniert finde ich das kein schönen Programmierstiel.
Stimmt. Wenn man zu now() etwas addiert, ist es nicht mehr now. Also ein
irreführender Name. Man sollte die Variable nach dem benennen, was sie
darstellt soll.
Monk schrieb:> Obelix X. schrieb:>> "if" ist keine Schleife!>> Aber der Block dahinter steht doch in geschleiften Klammern! :-)
Natürlich, also der Block hinter der IF ist in einer geschweiften
Klammer und wird zusammen ausgeführt.
1
if(isnan(h)||isnan(t)){
2
fail_counter=fail_counter+1;
3
Serial.print(F("Failed to read from DHT sensor! ("));
4
Serial.print(String(total_counter));
5
Serial.print("/");
6
Serial.print(String(fail_counter));
7
Serial.println(")");
8
delay(100);
9
switch_power_off_on();
10
delay(1000);
11
dht.begin();
12
delay(500);
13
// Publish an MQTT error message on topic MQTT_PUB_Error
>> Mathias H. schrieb:>> Kann ich den GPIO 2, den ich für meine Daten verwende, auch "aus und>> ein" schalten?>> Der Pin ist im Ruhezustand "aus", da als Eingang konfiguriert.>> Obelix X. schrieb:>> Auch wenn es funktioniert finde ich das kein schönen Programmierstiel.>> Stimmt. Wenn man zu now() etwas addiert, ist es nicht mehr now. Also ein> irreführender Name. Man sollte die Variable nach dem benennen, was sie> darstellt soll.>
1
>in2hours=time(nullptr)+3600+3600
2
>
Das Problem ist die Zeitzone. Wenn ich ohne +3600+3600 verwende dann ist
Jetzt leider nicht bei uns jetzt. Aus diesem Grund ist Now schon
richtig.
Aber es ist mir auch klar dass ich kein Profi bin. Keine
Coding-Guidelines einhalte, und durch das zusammenwerfen vom Code vieles
nicht so schön ist.
Das mit der Time und so kommt aber auch nicht von mir sondern kommt aus
nem Beispiel für "Sleepmode" den ich aber nicht umgesetzt habe.
> Mathias H. schrieb:>> Vielen Dank!!! Damit funktioniert es perfekt.>> Eine Messung fällt aus, und danach geht es wieder weiter.>> Dann ist nicht der Mikrocontroller oder sein Software schlecht, sondern> der Sensor hängt sich auf. Stichwort: EMV> https://de.wikipedia.org/wiki/Elektromagnetische_Vertr%C3%A4glichkeit
Ja, ich habe ja immer gesagt dass die SW normal weiter läuft aber keine
Werte mehr vom Sensor bekommt. Ich habe gehofft dass man das mit der HW
oder mehr Spannung,... weg bekommt. Ist schon schade dass dieser Sensor
so empfindlich ist.
Disen Sensor lieber nicht bestellen. Ich hoffe da gibt es bessere.
Obelix X. schrieb:> Ich weiß nicht ob das ein Fehler ist, das sieht aber für mich komisch> aus :>>
1
>time_tnow=time(nullptr);
2
>now=now+3600+3600;
3
>Stringtime=String(ctime(&now));
4
>
>> Es wird die Variable "now" deklariert aber in "time.h" gibt es die> Funktion "now(); // Returns the current time as seconds".>> Das gleiche mit "time". Erste ein Funktionsaufruf, dann eine> Variablendeklaration.>> Auch wenn es funktioniert finde ich das kein schönen Programmierstiel.
Da hast du recht. Ist so direkt aus einem "Example" oder so entnommen
für Zeit oder Sleep-Mode.
Da mir dann die "falsche" Zeit übertragen wurde, habe ich die +3600 +
3600 hinzugefügt. Das kommt aus der Zeitzone. Sonst ist alles direkt
übernommen. Muss ehrlich sagen, dass ich den Variablen Type "time_t"
nicht verstehe und auch nicht, was da mit "time(nullptr)" gemacht wird.
Deshalb einfach so genommen.
Aber vielen Dank für das Feedback.
Mathias H. schrieb:> Disen Sensor lieber nicht bestellen. Ich hoffe da gibt es bessere.Joachim B. schrieb:> 4. Ein DHT22 ist genauer.
lesen hilft, zwar nicht bei diesem Problem, das bleibt auch beim DHT22,
aber man kann die on/off Zeit optimieren und sofort unmögliche Werte
rauswerfen.
Joachim B. schrieb:> Mathias H. schrieb:>> Disen Sensor lieber nicht bestellen. Ich hoffe da gibt es bessere.>> Joachim B. schrieb:>> 4. Ein DHT22 ist genauer.>> lesen hilft, zwar nicht bei diesem Problem, das bleibt auch beim DHT22,> aber man kann die on/off Zeit optimieren und sofort unmögliche Werte> rauswerfen.
Ich dachte, das ist der gleiche Sensor nur mit einer anderen Bauform.
Die Messwerte sollten dann identisch sein.
Der eine ist ohne Gehäuse und mit Pins, der andere mit Gehäuse und
Kabel. Die Auflösung und der Messbereich sollte meiner Meinung nach der
gleiche sein.
Der schlechtere ist der DHT11.
>> Disen Sensor lieber nicht bestellen. Ich hoffe da gibt es bessere.
Es geht mir auch weniger um das Model, sondern der Hersteller. Ich
glaube da ist einfach an der Qualität gespart worden im Inneren.
Mathias H. schrieb:> Es geht mir auch weniger um das Model, sondern der Hersteller.
es gibt bessere Feuchtesensoren aber natürlich viel teurer, das Problem
mit längeren Leitungen ist aber immer vorhanden es sei denn du wertest
mit kurzer Leitung aus, externer Controller und überträgst auf längere
Leitungen mit geringerer Datenrate & Fehlerprotokoll und bei Störungen,
warum auch immer, verwirfst du die Fehlmessung.