PCF8574 służy do rozszerzania liczby portów wejścia/wyjścia poprzez interfejs I2C.
Każdy z 8 pinów PCF8574 może być ustawiony jako wejście [1] lub wyjście[0].
Po uruchomieniu modułu piny przyjmują stan HIGH
Max. Prąd (sinking current) wynosi 25mA.
Dla stanu wysokiego prąd płynący z pinów wynosi maks. 300uA, a dla stanu niskiego 25mA. W związku z tym, elementy sterowane podłączane są anodą do zasilania 5V, a katodą do PCF8574 lub za pomocą tranzystora NPN.
Ekspandera używa się zazwyczaj w trybie sinking.
Pin nr 13 (Interrupt) zmienia stan z wysokiego na niski przy zmianie stanu któregokolwiek z pinów cyfrowych. Powinien być podłączony z pullup rezystorem.

PCF8574 pinout

Ustawienie adresu I2C PCF8574(a) / PCF8574A(b)

Pobieranie stanów pinów PCF8574
#include <Wire.h>
const int PCF8574_ADDR = 0x20;
void setup() {
Wire.begin();
Serial.begin(9600);
}
void loop() {
Wire.requestFrom(PCF8574_ADDR, 1);
if (Wire.available()) {
byte data = Wire.read();
Serial.println(data, BIN);
}
delay(500);
}
Wysyłanie danych do PCF88574
#include <Wire.h>
const int PCF8574_ADDR = 0x20;
void setup() {
delay(1000);
Wire.begin();
Wire.beginTransmission(PCF8574_ADDR);
Wire.write(0b01111111); // Ustawienie ostatniego bitu na 0 (output)
Wire.endTransmission();
}
void loop() {
}