3 GY-21 HTU21 Sensoren mit TCA9548A Multiplexer auslesen

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Hallo zusammen,

    ich bin noch Anfänger was Python angeht und bin bei meinen Aktuellen Projekt auf ein Problem gestoßen wo ich nicht richtig weiterkomme.

    Für mein Projekt würde ich 3 GY21 HTU21 Luftfeuchte und Temperatur Sensoren benötigen. Da der HTU21 eine fixe I2C Adresse hat wollte ich dieses Problem über den TCA9548A lösen, da dieser ja z.b. die Adresse 0x70 für 8 Sensoren ermöglicht. Der Multiplexer wird auch vom Raspi richtig erkannt.

    Nun weis ich aber nicht wie ich das Skript erstellen müsste damit die Sensoren einzel über den Multiplexer ausliest.

    Angeschlossen sind sie wie folgt:

    Der TCA9548A an I2c des Raspberry Pi zero

    Die Sensoren an SDA/SCL0 bis SDA/SCL2 des Tca9548A

    Wenn ich die Sensoren einzel an i2c des Raspi anschließe benutze ich diese Skript.

    Ich hab mir schon Gedanken gemacht ob und wie man bei I2C was ändern müsste.

    Vielleicht kann mir einer weiter helfen.

    Vielen Dank schon mal.

  • 3 GY-21 HTU21 Sensoren mit TCA9548A Multiplexer auslesen? Schau mal ob du hier fündig wirst!

  • Guten Tag,

    Mit Python ist das so eine Sache mit diesen Multiplexern. Bis jetzt habe ich dafür noch keine Lösung gefunden. Dennoch einen Lösungsvorschlag würde ich dir mit auf den Weg geben.

    Zum Ersten - ich würde auf diesen Adafruit Code verzichten. Dafür gibt es auch schnellere Alternativen (siehe Code-Listing).
    Dann würde ich einfach, so habe ich mir zumindest in einer ähnlichen Situation beholfen, weil es wirklich keine wirklich vernünftige PYTHON Lösung für diese Bus-Multiplexer gibt, ich habe die Vc Leitungen über einen Portexpander geschaltet. Somit nacheinander die Sensoren angeschaltet, die Sensorwerte ausgelesen, diesen einen Sensor wieder Stromlos gemacht, und dann den nächsten Sensor aktiviert.
    Wenn es keine zeitkritischen Vorgänge sind, kann man hier z.B. den 8 BIt Portexpander PCF8574 nutzen. Dazu integriert man diesen PCF8574 in den Bus, und nutzt die Output GPIOs als Spannungsversorgung für den jeweiligen Sensor. Funktioniert absolut Problemlos, denn auch der PCF8574 ist via Python sehr einfach zu steuern. Du musst nur beachten, nach der Power-ON Schaltung über einen der GPIO Output Ports des Portexpanders, noch eine Verweilzeit einzubauen, bis der Sensor abgefragt werden kann. Auch so kann man recht einfach, mehrere I2C Bus Komponenten mit gleicher Adresse abfragen, solange diese nicht immer und wirklich zeitgleich an sein sollen.

    es grüßt euer
    Willy

  • Hallo Willy

    Danke für deine Antwort. Die Idee mit den Expander ist interessant an diese Herangehensweise habe ich daran gedacht die Sensoren einzel zu schalten.

    Aktuell habe ich die Sensoren alle an einem 8-adrigen Kabel (1. Vcc/2. Gnd/3.Sda sensor 1/4.scl sensor 2/...). Darum hoffte ich auf eine mögliche mit dem Multiplexer.

  • Guten Tag,

    Über diesen Multiplexer wirst du es nie schaffen mit dem Shell-Tool i2cdetect die daran angeschlossenen Sensoren zu finden.
    Über die Programmiersprache C/C++ bestehen je nach Art des Multiplexers zwei Lösungen.
    Wie das bei deinem MP ist kann ich mangels Wissens darum nicht beantworten. Einmal wird die eigene Adresse des Multiplexers genutzt, um irgendwie mit Verrechnung der Bus-Adressen die Komponenten anzusprechen, dieser erzeugt dann sozusagen virtuelle Adressen. Und dann die direkt-schaltende Methode, wo der Ausgang am Multiplexer ähnlich einem Portexpander aktiv geschaltet wird, und die Komponente am betreffenden Port mit der eigenen Adresse angesprochen werden kann. Für die Arduino IDE , aber damit nur für µController gibt es fertig Bibliotheken dafür. Nur habe ich selber noch keine passende Möglichkeit gefunden, dieses auch mit Python umzusetzen.
    Wenn es jetzt keine Displays sind, die man nicht abschalten sollte, sondern reine Werterfassungssensoren, die nicht wirklich permanent unter Strom stehen müssen, dann ist entweder der Weg RasPi GPIO-OUT als Vc des Sensors , oder bei mehreren über einen Portexpnader die einfachere und schnellere Lösung. Zumal du damit auch noch die Testmöglichkeit hast, über die Shell die einzelnen Sensoren via eines Bus-Scans zu erkennen.

    es grüßt euer
    Willy

  • Du kannst auch in der /boot/config.txt mit "dtoverlay=i2c-mux,pca9548" den Multiplexer installieren/aktivieren, wie es in /boot/overlays/README beschrieben ist. Die voreingestellte Adresse ist 0x70

    Der TCA9548 ist zum PCA9548 funktionskompatibel.

    Du kannst Dir auch eine Python-Bibliothek zum PCA9548/TCA9548 besorgen und damit die einzelnen Kanäle initialisieren und abfragen.

    Letzendlich lassen sich die Register des TCA9548 auch direkt, also low-level. beschreiben und sich der durchzuschaltende Kanal direkt ansteuern.


    Servus !

    RTFM = Read The Factory Manual, oder so

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!