adafruit hdc1008

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo,
    ich versuche meinen HDC1008 Temperatur-&Luftfeuchte Sensor (I2C) von Adafruit an meinem RPi (B+) auszulesen.
    Mit folgendem Skript funktioniert das auch so wie ich mir das vorstelle, jedoch leider nicht jedes mal.

    -------------------------------------------------------------
    import struct, array, time, io, fcntl

    I2C_SLAVE = 0x0703

    HDC1008_ADDR = 0x40

    bus = 1
    fr = io.open("/dev/i2c-"+str(bus), "rb", buffering=0)
    fw = io.open("/dev/i2c-"+str(bus), "wb", buffering=0)

    fcntl.ioctl(fr, I2C_SLAVE, HDC1008_ADDR)
    fcntl.ioctl(fw, I2C_SLAVE, HDC1008_ADDR)
    time.sleep(0.015)

    s = [0x02, 0x02, 0x00]
    s2 = bytearray( s )
    fw.write( s2 )
    time.sleep(0.015)

    s = [0x00]
    s2 = bytearray ( s )
    fw.write( s2 )
    time.sleep(0.0625)

    data = fr.read(2)
    buf = array.array('B', data)
    temp = ((buf[0]*256+buf[1])/65536.0)*165.0-40.0
    print ( "Temperatur: %.2f" % (temp))

    time.sleep(0.015)

    s = [0x01]
    s2 = bytearray( s )
    fw.write( s2 )
    time.sleep(0.0625)

    data = fr.read(2)
    buf = array.array('B', data)
    hum = ((buf[0]*256+buf[1])/65536.0)*100.0
    print ("Luftfeuchte: %.2f" % (hum))

    -------------------------------------------------------------------------

    Also das ist bestimmt nicht der beste Programmierstil und das Skript ist auch zum größten Teil nicht von mir, sondern aus dem Internet. :daumendreh2: Wenn ich es jedoch zehn mal in der Konsole ausführe, wird mir ca. sechs mal das richtige Ergebnis ausgegeben und viermal kommt folgender Fehler:

    Traceback (most recent call last):
    File "temp_hum.py", line 17, in <module>
    fw.write( s2 )
    IOError: [Errno 5] Input/output error

    Manchmal zeigt gibt es mir auch nur die Temperatur aus und ich bekomme fast den gleichen Fehler:

    Traceback (most recent call last):
    File "temp_hum.py", line 37, in <module>
    data = fr.read(2)
    IOError: [Errno 5] Input/output error

    Nun wäre es schön wenn mir einer von euch helfen könnte, den Fehler zu beheben. Noch besser wäre wenn jemand weiß, wie ich den Sensor ohne "io" und "fcntl" auslesen kann, da ich mich mit diesen Bibliotheken nicht wirklich auskenne. Ich habe auch zwei andere Sensoren (CO2-Sensor & Lichtsensor), bei denen ich mit "smbus" auskomme, was mir lieber ist. Aber leider habe ich es nicht geschafft selbst ein Skript für diesen Sensor zu schreiben, das ich dann auch verstehe. :s :shy:

    Vielen Dank schon mal im vorraus!

    Grüße Florian

Jetzt mitmachen!

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