TCA9548A mit 3x BME280 - OSError: [Errno 121] Remote I/O error

  • Hallo


    Ich bin noch relativ neu in der Raspberry Pi Welt, habe bis jetzt haupsächlich mit Arduino gearbeitet...ich hab hier ein Problem und ich stehe irgendwie am Schlauch....

    Ich hab einen Pi4 nach dieser Anleitung (https://gallaugher.com/makersn…python-on-a-raspberry-pi/) gebaut. Bulseye mit Circuitpython...


    Mein Problem ist folgendes. Ich kann die BME280 am TCA9548A zwar die I2C Adresse abfragen aber sonst nichts.

    Programm zu m abfragen der belegten Ports mit i2c Adresse:

    Ausgabe:


    Channel 0:['0x76']

    Channel 1:['0x76']

    Channel 2:['0x76']

    Channel 3:[]

    Channel 4:[]

    Channel 5:[]

    Channel 6:[]

    Channel 7:[]



    Mein Code zum BME280 Abfragen von https://cdn-learn.adafruit.com…-multiple-i2c-devices.pdf

    Fehlermeldung:

    Was ich schon probiert habe, die Baudrate am i2c verringert; anderes Steckbrett; andere BME280; andere TCA9548A; andere Ports am TCA;


    Laut Google ist der Error "OSError: [Errno 121] Remote I/O error" meistens ein Verdrahtungsfehler....glaub ich aber nicht, da ich alles schon irgendwie durchgetauscht habe.


    Was kann es da haben?


    Danke

  • Hallo,


    also in deinem Fehler steht No I2C device at adress: 0x77 Der Fehler wird durch bme1 = adafruit_bme280.Adafruit_BME280_I2C(tca[0]) ausgelöst.

    Hast du I2C aktiviert? (Im raspi-config - Menü)


    Grüße

    Dennis

    “Ich benötige Informationen. Eine Meinung bilde ich mir selbst.”

  • Moin bene391,


    die Lösung steht in deinem Link bei adafruit...


    bme = adafruit_bme280.Adafruit_BME280_I2C(i2c, 0x76)


    Damit sollte es klappen.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Guten Morgen,

    Dennis89 Ja i2c ist enabled, ich kann die Sensoren ohne TCA einzeln ansprechen und sie funktionieren auch


    hyle eine Sekunde ist im Moment nur zum testen. Wird später ca alle 5 min sein - muss ich mir noch überlegen.


    Bernd666 das funktioniert nur ohne tca, wenn nur ein Sensor angeschlossen ist


    Mit den letzten Fehler

    Code
    ValueError: No I2C device at address: 0x77

    versucht die Instanz bme mit der Standard Adresse auf den BME zuzugreifen (0x77) - geht aber nicht da dieser hinter dem TCA ist.

    irgendwie schafft es das Programm nicht, aus der TCA Objekt die Adresse zu übergeben....meine Vermutung...

  • Wie hast du A0 - A2 angeschlossen ?

  • Dann würde ich testweise die Addresse manuell auf 0x76 stellen.

    Bei mir liegt in /usr/local/lib/python3.9/dist-packages/adafruit_bme280 eine basic.py.

    In der steht:

    Code
    """General Information"""
    _BME280_ADDRESS = const(0x77)

    Versuche es dort mal mit _BME280_ADDRESS = const(0x76)


    P.S. Ich habe es halt mit pip3 installiert.

    Code
    pip3 install adafruit-circuitpython-tca9548a
    pip3 install adafruit-circuitpython-bme280
  • Moin bene391,


    nee, du hast mich falsch verstanden!

    In Zeile 13 und 14 machst du doch eine Zuweisung.

    Code
    # Create the TCA9548A object and give it the I2C bus
    tca = adafruit_tca9548a.TCA9548A(i2c)

    Da sollte die Änderung rein. Lies dir mal die ganze Sache von Adafruit durch.


    73 de Bernd

    Ich habe KEINE Ahnung und davon GANZ VIEL!!
    Bei einer Lösung freue ich mich über ein ":thumbup:"

    Vielleicht trifft man sich in der RPi-Plauderecke.

  • Guten Morgen,

    Ein ähnliches Problem hatte ich auch mit einem anderen Kombi Sensor. Die Bastelei mit dem dem Multiplexer und dem Adafruit Code habe ich mir damit erspart, dass ich ich mir in der /boot/config.txt zwei weitere I2C Busse angelegt habe. So dass pro Pin-Paar auf der GPIO Leiste nur jeweils ein Sensor angeschlossen ist. Allerdings muss man dann dem Treiber mitteilen das die anderen Sensoren an einer anderen Bus-Nummer hängen.
    Damit ist die Abfrage in der Shell dann "i2cdetect -y 1" , "i2cdetect -y 2" und "i2cdetect -y 3"

    Dazu habe ich nach dem Schema

    Code
    dtoverlay=i2c-gpio,bus=<Nummer> ,i2c_gpio_sda=<GPIO Pin für SDA>,i2c_gpio_scl=<GPIO Pin für SCL>

    die Konfigurationsdatei angepasst. unter <Nummer> müsstest du die Nummern 2 und 3 jeweils in einer gesonderten Zeile eintragen. Die GPIO Pins kannst du relativ frei bestimmen, und sind davon abhängig, welche GPIOs du sonst noch so verwendest.

    es grüßt euer
    Willy

  • Hallo

    ich habs rausgefunden, warum es nicht funktioniert hat...

    Code
    # Create each BME280 using the TCA9548A channel instead of the I2C object
    bme1 = adafruit_bme280.Adafruit_BME280_I2C(tca[0], 0x76)   # TCA Channel 0
    bme2 = adafruit_bme280.Adafruit_BME280_I2C(tca[1], 0x76)   # TCA Channel 1
    bme3 = adafruit_bme280.Adafruit_BME280_I2C(tca[2], 0x76)   # TCA Channel 2


    Die Adresse hat gefehlt....


    Danke an Alle fürs helfen ..... jetzt muss es nur mehr in die influx Datenbank und mit Grafana visualisert werden.....aber dafür gibts ein super Tutorial vom Fred0815