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. 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
Vielen Dank schon mal im vorraus!
Grüße Florian