Moin,
ich arbeite an einem Umweltmodul, welchen auch einen Gassensor beinhaltet (CCS811). Nun tritt immer einige Sekunden nach Programmstart folgender Fehler auf (beim Beispielprogramm auch):
Traceback (most recent call last):
File "mainicm.py", line 97, in <module>
TVOC = ccs811.tvoc
File "/usr/local/lib/python3.7/dist-packages/adafruit_ccs811.py", line 189, in tvoc
self._update_data()
File "/usr/local/lib/python3.7/dist-packages/adafruit_ccs811.py", line 148, in _update_data
if self.data_ready:
File "/usr/local/lib/python3.7/dist-packages/adafruit_register/i2c_bit.py", line 60, in __get__
i2c.write_then_readinto(self.buffer, self.buffer, out_end=1, in_start=1)
File "/usr/local/lib/python3.7/dist-packages/adafruit_bus_device/i2c_device.py", line 149, in write_then_readinto
in_end=in_end,
File "/usr/local/lib/python3.7/dist-packages/busio.py", line 141, in writeto_then_readfrom
stop=stop,
File "/usr/local/lib/python3.7/dist-packages/adafruit_blinka/microcontroller/generic_linux/i2c.py", line 88, in writeto_then_readfrom
address, buffer_out[out_start:out_end], in_end - in_start
File "/usr/local/lib/python3.7/dist-packages/Adafruit_PureIO/smbus.py", line 273, in read_i2c_block_data
ioctl(self._device.fileno(), I2C_RDWR, request)
OSError: [Errno 121] Remote I/O error
Die Verkabelung habe ich schon mehrmals überprüft und auch alle anderen Sensoren welche über I2C arbeiten funktionieren ohne Probleme.
Grüße,
Tim
Errno 121 kommt nach einigen Sekunden (CCS811)
Code: Alles auswählen
import time
import board
import busio
import adafruit_ccs811
i2c = busio.I2C(board.SCL, board.SDA)
ccs811 = adafruit_ccs811.CCS811(i2c)
while not ccs811.data_ready:
pass
#temp = ccs811.temperature
#ccs811.temp_offset = temp-25
while True:
print("CO2: {} PPM, TVOC: {} PPM" .format(ccs811.eco2, ccs811.tvoc))
#time.sleep(0.5)
Bleibt leider trotzdem ein Hardware-Problem, verschiedene Sensoren reagieren unterschiedlich auf zb timing Variationen auf dem Bus durch parasitäre Kapazitäten etc. Du kannst bestenfalls versuchen mit geringerer Geschwindigkeit zu arbeiten, die Topologie zu verbessern, den Sensor alleine ausprobieren oder auszutauschen. Python nutzt da nur direkt die OS APIs ohne selbst was beizutragen, und das OS nutzt nur die I2C Hardware selbst.
Was könnte man denn z.b. gegen den Hardware Fehler machen, die kabel können es nicht sein das habe ich schon mehrmals geprüft. Auch die Lötstellen sind in Ordnung. Zudem werden mir auch Werte angezeigt, was bedeutet der Sensor arbeitet.
Mit einem Oszilloskop auf die Leitungen schauen. Und nochmal: ich habe dir diverse Strategien genannt, um überhaupt mal zu einer Diagnose und potentiellen Lösung zu kommen. Die musst du erstmal durcharbeiten. Wenn das zu einem Ergebnis führt, kann man immer noch überlegen, wie man das ins Gesamtsystem integriert.
Hier sind zb einige der Strategien detaillierter ausgeführt: https://www.ti.com/lit/an/scaa106/scaa1 ... le.de%252F
Und um das nochmal ganz klar zu sagen: nur weil alles verkabelt ist, und du das mit einem Multimeter durchmessen kannst, ist das noch lange kein guter Bus! Die signalqualität kann trotzdem beeinträchtigt sein.
Und um das nochmal ganz klar zu sagen: nur weil alles verkabelt ist, und du das mit einem Multimeter durchmessen kannst, ist das noch lange kein guter Bus! Die signalqualität kann trotzdem beeinträchtigt sein.