PCF8574

Adafruit (плата), Texas Instruments (PCF8574) · Adafruit PCF8574 I2C GPIO Expander PID 5545, STEMMA QT

Добавление восьми медленных цифровых входов/выходов через I²C.

Автор: SLDV LAB

Опубликовано · Обновлено

СложностьСредне
Проекты с компонентом

О МОДУЛЕ

Что делает Adafruit PCF8574 I2C GPIO Expander PID 5545, STEMMA QT

PCF8574 расширяет число цифровых контактов для кнопок и индикаторов. Это quasi-bidirectional порт: отдельного регистра направления нет. Для чтения входа сначала записывают в соответствующий бит единицу; внешняя кнопка может затем притянуть контакт к GND.

Единица на выходе создаётся слабым источником тока и не эквивалентна обычному push-pull HIGH. Ноль способен стягивать ток, поэтому светодиод удобнее подключать от VCC через резистор к выводу. Нагрузки, реле и моторы напрямую не подключают; токовые пределы отдельного контакта и всего корпуса проверяют по datasheet. Сохраняйте теневой байт выходов: запись целого порта не должна случайно включать ноль на входе.

Рассматривается Adafruit PID 5545 со STEMMA QT и доступными P0–P7. На LCD-backpack часть контактов уже занята дисплеем, поэтому этот пример для него не подходит. PCF8574A использует другой диапазон адресов. У Adafruit PID 5545 адресные перемычки находятся сзади, а наружу отдельно выведен A0. Пример подключается проводами к площадкам, а не через разъём STEMMA QT; порядок контактов сверяют по маркировке.

Adafruit PCF8574, изделие 5545, версия STEMMA QT.

PCF8574. Фото: Kattni Rembor / Adafruit. Оригинал: https://learn.adafruit.com/assets/113836 . Лицензия фотографии: CC BY-SA 3.0, https://creativecommons.org/licenses/by-sa/3.0/ . Изменения: Удалён исходный фон вокруг платы; очищены только видимые просветы сквозных отверстий с сохранением металлических стенок. Пропорциональное масштабирование, размещение на предоставленном фоне и JPEG-сжатие. Геометрия, маркировка и видимые детали не перерисовывались. Цветокоррекция и повышение детализации не применялись. Адаптация фотографии распространяется по той же лицензии. Adafruit PCF8574, изделие 5545, версия STEMMA QT.

Схема распиновки

Авторская распиновка SLDV LAB: Adafruit 5545, PCF8574 STEMMA QT. Сторона компонентов; VIN снизу слева. Верхний и нижний ряды слева направо. Для других ревизий и плат требуется отдельная проверка.

INT на этой плате подтянут к VIN: высокий уровень зависит от питания платы. Учитывайте допустимое напряжение GPIO контроллера.

Источники: 1, 2. Авторская схема SLDV LAB по фактам документации.

Характеристики

Контактов порта
8
Тип выходов
Quasi-bidirectional; запись 1 освобождает вход
Адреса PCF8574
0x20–0x27; PCF8574A: 0x38–0x3F
Максимальная частота PCF8574
100 кГц
Интерфейс
I²C
Питание модуля
В примере PCF8574 и I²C питаются от 5 В, Uno R3 имеет логику 5 В; 5-вольтовые подтяжки и выходы нельзя напрямую подключать к GPIO ESP32.

ПРАКТИКА

Подключение

Контакт модуляКонтакт платыНазначение
VIN5VAdafruit PID 5545; питание и логика Uno R3 5 В.
GNDGNDОбщая земля.
SDAA4 / SDAОдин и тот же сигнал Uno R3; подтяжки к питанию модуля.
SCLA5 / SCLПорядок контактов на модуле определять по маркировке, не по положению.
A0; перемычки A0/A1/A2A0 не подключать; перемычки открытыЗаводской адрес Adafruit PID 5545 — 0x20.
P0Кнопка между P0 и GNDP0 всегда записывается как 1; внутренний слабый источник подтягивает его вверх.
P1Катод LED; анод через 1 кОм к 5VСветодиод включается при LOW; не подключать его без резистора.
/INTНе подключатьПример использует опрос; INT имеет открытый сток.

Подходит для Arduino. Выберите контакты по документации своей платы.

ВАШ ПРОЕКТ · ВАШ ДАТЧИК

Интегрируйте модуль с ChatGPT

Скопируйте запрос в ChatGPT. Укажите свою плату и среду разработки — получите подключение и код для своего проекта.

Помоги интегрировать PCF8574 breakout. Сначала уточни точную плату модуля, контроллер, среду, питание и задачу. Проверь схему, логические уровни и маркировку контактов; затем дай согласованные подключение, зависимости и полный минимальный пример с обработкой ошибок. Объясни безопасную первичную проверку и ожидаемый результат. Объясни quasi-bidirectional поведение, слабый HIGH и сохранение теневого байта; уточни суффикс A и наличие подключённого LCD.

Библиотеки

Установите библиотеку для своей среды и откройте пример из её документации.

Что именно прописать

Плата и ядро
Arduino Uno R3; Arduino AVR Boards 1.8.6

Распиновка относится к ATmega328P Uno R3; не Uno R4 и не ESP32.

Адрес
0x20

PCF8574, A0–A2=GND; для PCF8574A адрес иной.

Начальное значение
0xFF

Все контакты освобождены для входа либо слабого HIGH.

Вход и выход
P0 = кнопка; P1 = LED с активным LOW

Теневой байт всегда сохраняет единицу P0.

Шина
Wire.setClock(100000)

PCF8574 рассчитан на Standard-mode I²C.

Arduino: полный пример кнопки и светодиода

cpp
#include <Wire.h>
const uint8_t ADDR = 0x20;
uint8_t outputs = 0xFF;
bool ready = false;
bool writePort(uint8_t value) {
  Wire.beginTransmission(ADDR);
  Wire.write(value);
  return Wire.endTransmission() == 0;
}
void setup() {
  Serial.begin(115200);
  Wire.begin();
  Wire.setClock(100000);
  Wire.setWireTimeout(25000, true);
  ready = writePort(outputs);
  if (!ready) Serial.println("PCF8574 not found");
}
void loop() {
  if (!ready) { delay(1000); return; }
  if (Wire.requestFrom(ADDR, uint8_t(1)) != 1) {
    Serial.println("Port read failed"); delay(500); return;
  }
  uint8_t inputs = Wire.read();
  bool pressed = (inputs & 0x01) == 0;
  uint8_t next = outputs | 0x01;
  if (pressed) next &= uint8_t(~0x02);
  else next |= 0x02;
  if (next != outputs) {
    if (writePort(next)) outputs = next;
    else Serial.println("Port write failed");
  }
  delay(30);
}

Полный скетч для Uno R3 и Wire из Arduino AVR Boards 1.8.6, API сверено; аппаратный тест и компиляция не выполнялись. Задержка снижает частоту опроса, но не является полноценным подавлением дребезга для подсчёта нажатий.

Проекты с этим компонентом

Все проекты

Связанные проекты пока не опубликованы.

Связанные материалы и компоненты