Errno 121 kommt nach einigen Sekunden (CCS811)

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
timax1998
User
Beiträge: 12
Registriert: Freitag 6. März 2020, 11:53

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
Benutzeravatar
sparrow
User
Beiträge: 4195
Registriert: Freitag 17. April 2009, 10:28

Dann zeig doch mal Code, bei dem das Problem auftritt.
timax1998
User
Beiträge: 12
Registriert: Freitag 6. März 2020, 11:53

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)
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
timax1998
User
Beiträge: 12
Registriert: Freitag 6. März 2020, 11:53

Das Problem mit geringerer Geschwindigkeit ist, dass das Modul mehrere Stunden laufen soll und Live Daten liefert was für den Gyro und den Accel Sensor wichtig ist.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

Du kannst für verschiedene Sensoren verschiedene Geschwindigkeiten benutzen.

Und erstmal musst du rausfinden was geht, bevor du einschränkst, was du tun kannst.
timax1998
User
Beiträge: 12
Registriert: Freitag 6. März 2020, 11:53

Ich lasse das Programm mal mit einem delay von 500ms laufen um zu schauen wie lange es dauert bis der Fehler wieder auftaucht, wenn er das überhaupt tut.
timax1998
User
Beiträge: 12
Registriert: Freitag 6. März 2020, 11:53

Das Programm leif eine 3/4 Stunde und ist dann wie schon erwähnt abgebrochen und hat den oben genannten Fehler in der Konsole ausgegeben.
Sirius3
User
Beiträge: 17754
Registriert: Sonntag 21. Oktober 2012, 17:20

Du solltest Dich von der Illusion verabschieden, ein Programm zu schreiben, das ohne Fehler durchläuft. Du mußt auf den Hardwarefehler reagieren und entsprechend dafür sorgen, dass Du weiter arbeiten kannst.
timax1998
User
Beiträge: 12
Registriert: Freitag 6. März 2020, 11:53

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.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
__deets__
User
Beiträge: 14542
Registriert: Mittwoch 14. Oktober 2015, 14:29

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.
Antworten