Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

SCD30 am Pi meldet Remote-I/O-Fehler, sollte ich I2C in Python per Bit-Banging schreiben?

SCD30 am Pi meldet Remote-I/O-Fehler, sollte ich I2C in Python per Bit-Banging schreiben?

Gelöst 5 3

Von Türkçe mit KI übersetzt ·

Wir messen CO2 für Besprechungsräume, Pi 3B+ und Sensirion SCD30. Der Pi liest alle 30 Sekunden und sendet co2, temp, rh an Hermetry. Ein Teil der Messwerte schlägt mit diesem Fehler fehl:

OSError: [Errno 121] Remote I/O error
  File "scd30.py", line 58, in read_measurement
    data = bus.read_i2c_block_data(0x61, 0x03, 18)

20-30 Mal pro Stunde. Im Diagramm entstehen Lücken. Soweit ich gelesen habe, nutzt der SCD30 Clock Stretching, und die Hardware-I2C des Pi unterstützt das nicht richtig. Ich überlege, den I2C-Master in Python mit RPi.GPIO per Bit-Banging zu schreiben. Ist das sinnvoll, hat das schon jemand gemacht? Ich bin mir nicht sicher, ob das Timing in Python hält.

Ağ geçidi yine bağlanıyor…
♥ 2

Von Türkçe mit KI übersetzt ·

Haben Sie versucht, die Geschwindigkeit zu reduzieren? Mit i2c_arm_baudrate in config.txt.

♥ 0

Von Türkçe mit KI übersetzt ·

Ich habe es auf 10000 gesenkt, der Fehler ist auf 5-6 pro Stunde gesunken, aber nicht verschwunden.

Ağ geçidi yine bağlanıyor…
♥ 0

Von Türkçe mit KI übersetzt ·

Schreib das nicht selbst in Python, der Kernel hat bereits ein fertiges Software-I2C, das das Bit-Banging übernimmt und Clock Stretching korrekt überwacht. Genau deshalb habe ich den SCD30 darauf umgestellt. /boot/config.txt (bei Bookworm /boot/firmware/config.txt):

dtoverlay=i2c-gpio,bus=3,i2c_gpio_sda=23,i2c_gpio_scl=24,i2c_gpio_delay_us=2

Neu starten und mit i2cdetect -y 3 prüfen, ob 0x61 erscheint. Im Code SMBus(3) statt SMBus(1) verwenden. Den Sensor an GPIO 23/24 anschließen und einen 4,7k-Pull-up nach 3,3V setzen (die internen Pull-ups der Hardware-I2C-Pins sind hier nicht vorhanden). Falls du andere Sensoren hast, können diese auf Bus 1 bleiben.
Lies außerdem gemäß dem „Data Ready“-Befehl des Sensors (0x0202) aus; liest du, während die Messung nicht bereit ist, kommt auch hier Unsinn heraus. Tritt zwischendurch wieder ein Fehler auf, wiederhole die Leseoperation einmal und überspringe diese Ablesung; für eine übersprungene Ablesung sende nichts, in Hermetry bleibt der letzte Wert erhalten.

Akzeptierte Lösung♥ 2

Von Türkçe mit KI übersetzt ·

Mit Overlay auf Bus 3 umgestellt, seit 2 Tagen kein einziger Errno 121 mehr. Die Pull-ups hatte ich vergessen, beim ersten Start kam i2cdetect leer zurück, nachdem ich die 4.7k eingesetzt habe, wurde er angezeigt. Gut, dass ich mich nicht an das Bit-Banging gewagt habe.

Ağ geçidi yine bağlanıyor…
♥ 0

Von Türkçe mit KI übersetzt ·

Warum hat die Reduzierung der Geschwindigkeit das Problem dann nicht vollständig gelöst? Ich bin neugierig.

♥ 1
Ansicht von 6 Beiträgen – 1 bis 6 (von insgesamt 6)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.

Mitdiskutieren

Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

Teilen