https://duino.ru/i2c-rasshiritel-portov-pcf8574#:~:text=I2C%20%D1%80%D0%B0%D1%81%D1%88%D0%B8%D1%80%D0%B8%D1%82%D0%B5%D0%BB%D1%8C%20%D0%BF%D0%BE%D1%80%D1%82%D0%BE%D0%B2%20%2D%20%D1%8D%D1%82%D0%BE%20%D0%90%D1%80%D0%B4%D1%83%D0%B8%D0%BD%D0%BE,%D1%81%20%D0%BD%D0%B5%D0%B1%D0%BE%D0%BB%D1%8C%D1%88%D0%B8%D0%BC%20%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%BE%D0%BC%20%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%BE%D0%B2%20GPIO.

https://www.hwlibre.com/ru/pcf8574/

https://robotchip.ru/uvelichenie-portov-vvoda-vyvoda-na-arduino-pcf8574/


пример использования

#include "PCF8574.h"               // Подключение библиотеки PCF8574
PCF8574 pcf8574(0x20);            // Создаем объект и указываем адрес устройства 0x20
 
void setup(){
  Serial.begin(9600);
  pcf8574.pinMode(P0, INPUT);       // Устанавливаем выход P0, как вход
  pcf8574.pinMode(P1, INPUT);       // Устанавливаем выход P1, как вход
  pcf8574.pinMode(P2, INPUT);       // Устанавливаем выход P2, как вход
  pcf8574.pinMode(P3, INPUT);       // Устанавливаем выход P3, как вход
  pcf8574.pinMode(P4, OUTPUT);      // Устанавливаем выход P4, как выход
  pcf8574.pinMode(P5, OUTPUT);      // Устанавливаем выход P5, как выход
  pcf8574.pinMode(P6, OUTPUT);      // Устанавливаем выход P6, как выход
  pcf8574.pinMode(P7, OUTPUT);      // Устанавливаем выход P7, как выход
 
// Проверка инициализация библиотеки pcf8574
  Serial.print("Init pcf8574...");
  if (pcf8574.begin()){
    Serial.println("OK");}
  else{
    Serial.println("ERROR");}
  delay(50);                                        // Необходимо время для инициализации 
}
 
void loop()
{
  uint8_t val0 = pcf8574.digitalRead(P0);            // Чтение состоянии вывода PO
  uint8_t val1 = pcf8574.digitalRead(P1);            // Чтение состоянии вывода P1 
  uint8_t val2 = pcf8574.digitalRead(P2);            // Чтение состоянии вывода P2
  uint8_t val3 = pcf8574.digitalRead(P3);            // Чтение состоянии вывода P3  
 
  if (val0 == HIGH) pcf8574.digitalWrite(P4, HIGH);  // Если кнопка не нажата, светодиод не горит 
  else              pcf8574.digitalWrite(P4, LOW);   // Если кнопка нажата, светодиод горит
  delay(5);                                         // Пауза 
  
  if (val1 == HIGH) pcf8574.digitalWrite(P5, HIGH);  // Если кнопка не нажата, светодиод не горит
  else              pcf8574.digitalWrite(P5, LOW);   // Если кнопка нажата, светодиод горит
  delay(5);                                         // Пауза 
 
  if (val2 == HIGH) pcf8574.digitalWrite(P6, HIGH);  // Если кнопка не нажата, светодиод не горит
  else              pcf8574.digitalWrite(P6, LOW);   // When Button is Released
  delay(5);                                         // Пауза 
 
  if (val3 == HIGH) pcf8574.digitalWrite(P7, HIGH);  // Если кнопка не нажата, светодиод не горит
  else              pcf8574.digitalWrite(P7, LOW);   // Если кнопка нажата, светодиод горит
  delay(5);                                         // Пауза 
}
