DHT22 Fehler

  • Hallo,
    ich bin noch neu im Umgang mit Python und steh am Anfang.
    Habe folgendes Problem:

    Der DHT Sensor gibt wohl nicht immer korrekte Werte aus.

    Folgender Fehler:
    TypeError: 'NoneType' object has no attribute '_getitem_'

    Hier die Bilder vom Code und Fehler

    Wollt versuchen den Fehler irgendwie abzufangen oder am besten einfach wiederholen und neu auslesen.
    Kann jemand helfen?

    • Offizieller Beitrag

    [code=php]
    import time
    import dhtreader
    type =22
    pin = 2
    dhtreader.init()
    while True:
    try:
    m = dhtreader.read(type, pin)
    #hier die print befehle
    #bin grad Schreibfaul ;)
    except TypeError:
    pass[/php]

    Hilft das? Ich würde noch ein time.sleep() mit einbauen.

    Der Unterschied zwischen Genie und Wahnsinn definiert sich im Erfolg.

    Einmal editiert, zuletzt von dbv (30. Januar 2015 um 11:36)

  • Mit Python benimmt sich der DHT22 wegen des "timings" recht zickig und liefert oft keine Daten, bzw. lässt sich nicht abfragen. IMHO muss man auch ca. 2 Sekunden warten, bevor man den Sensor wieder abfragen kann.

    Tipp: Ich habe hier einen DHT22 der 24/7 mit rpi_dht22 1x die Minute abgefragt wird. Der code von "sweetpi" funktioniert hier absolut zuverlässig. Wenn es denn unbedingt Python sein muss, kann man den output immer noch mit commands.getoutput() und split() parsen bzw. die Messung wiederholen lassen, wenn keine Daten erhalten wurden.

  • Danke dbv. Funktioniert gut.
    ich denke nicht das es an den Timings liegt. ich hab es auch schon mit mehreren unterschiedlichen Zeiten bis zur halben Minute versucht. Denke das der DHT22 einfach nur mal rum zickt.

  • Der DHT22 zickt nicht einfach rum...:
    Hast du einen PullUp Widerstand von ca. 4,7kOhm* nach +3,3V gelegt?

    * R ist variable bzgl. der verwendeten Leitungslänge, min. 500 Ohm (sehr lange Leitung ... 20-30m), max. ca. 33 kOhm direkt am Pi..., 4,7KOhm ist ein guter Startwert, der fast immer sauber geht.

    Das minimale Abfrageintervall ist lt. Datenblatt ca. 1sec. empfohlen werden >= 2sec.

    Mfg, Zen

  • Ich lass mich gern eines bessern belehren.
    Ich habe einen 10 kOhm Widerstand drin.
    Wie gesagt: ich habe es mit mehreren Abfrageintervallen versucht bis hin halben Minute. Kein Erfolg, selbst wenn ich starte und den Sensor zum ersten Mal abfrage, kommt die Fehlermeldung. Wie du oben in meinem Code sehen kannst, hab ich 3 sec drin. Der wird 3, 4 mal ausgelesen und dann kommt der Fehler, oder wie gesagt sogar beim ersten Mal.

    Mfg

  • Nur zur Erklärung:

    Gemeint sind die timings bei der Datenübertragung/Auslesen des Sensors, nicht die Intervalle der Datenabfrage! Der Python-Interpreter produziert vereinfacht gesprochen "zu langsamen code". In den Adafruit Tutorials und im Forum ist das so beschrieben:

    [...] Install a DHT sensor Python library which utilizes C for high-speed GPIO polling to handle bit-banged sensor output. Many low cost sensors have unusual output formats, and in this case, a "Manchester-esque" output that is not SPI, I2C or 1-Wire compatible must be polled continuously by the Pi to decode. Luckily, the C GPIO libraries are fast enough to decode the output.[...]

    Anfang 2013 hatte Adafruit noch eine Pyhon Library "ohne C Anteil" bereitgestellt. Damit hat der Sensor nur leidlich funktioniert. Das ist inzwischen verbessert worden, aber das oben zitierte rpi_dht22 funktioniert deutlich zuverlässiger.

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!