PCF8574 Relais Steuern

Da ich chronichen GPIO Mangel habe, musste jetzt ein PCF8574 her.
I2C Scan hat das Teil an Adresse 0x20 gefunden.
Ein kleiner Test Sketch schaltet auch alle 4 Relais an P4-P7 der Reihe nach an und aus.
Wie kann ich jetzt gezielt ein einziges Relais an- oder ausschalten und den Zustand der anderen 3 ignorieren. Ich möchte nicht den aktuellen Zustand negieren, sondern definitiv einen gewünschten Zustand an einem bestimmten Pin einstellen.

https://www.arduino.cc/reference/en/language/functions/bits-and-bytes/bitset/
https://www.arduino.cc/reference/en/language/functions/bits-and-bytes/bitclear/
https://www.arduino.cc/reference/en/language/functions/bits-and-bytes/bitwrite/

Schau Dir mal bitSet() an. Du musst den Zustand im einem Byte halten und dann die passenden Bits 0 oder 1 setzen und danach zum 8574 übertragen.

Es gibt auch eine Lib dazu.

Gruß Tommy

Uff, das ist mal ein Haufen Holz.
Da muss ich mich erst durcharbeiten.
So wie ich die Lib auf die Schnelle überflogen habe, muss ich die noch anpassen.
Evtl. einen Constuctor hinzufügen: PCF8574 pcf(address, SCL, SDA)
Die Standard-Pins für Wire.begin() sind bei mir anders als am Arduino.
Bei mir hängt der PCF an einem ESP32 (SDA = GPIO22, SCL = GPIO21). Sollte aber schnell erledigt sein. Beim Test habe ich es auch schnell auf die Reihe bekommen.

Schon mal vielen Dank.
Hat mich wieder einen Schritt weiter gebracht.

Wenn Du eine Wire-Lib nutzt, die für den ESP32 angepasst wurde, kann die das.
Lass Dir in begin doch einfach mal die Pins ausgeben.

Gruß Tommy

Hab jetzt die Libs meiner Sensoren angepasst, die auch i2c verwenden (BME280 und BH1750).
Es ist jetzt überall ein Constructor drin, dem ich die sda und scl pins übergebe.
Vor jedem Zugriff auf die Sensoren oder den PCF rufe ich dann MyClass.begin(address) auf.
In der begin(address) function wird Wire.begin(sda, scl) aufgerufen und alles läuft wie am Schnürchen.
Die Sensoren hängen an SDA GPIO26 und SCL GPIO25. Der PCF hängt an SDA GPIO22 und SCL GPIO21.
So habe ich 2 voneinander unabhängige i2c Leitungen.
Die Sensoren messen und die Relays schalten.
Das Wochenende war zwar wieder mal im A****, aber der ESP rennt und misst und schaltet ohne mullen und knullen.
Sogar nach einem ESP.restart() werden die letzten Schaltzustände aus den Eeprom geladen und sofort wieder hergestellt.
Ich bin absolut happy mit dieser Lösung.

@HotSystems
I2C = weniger ist mehr: weniger Kabel, mehr Probleme
->Da hast du voll Recht. Wenn es dann aber mal funktioniert, ist es der Knaller.