项目里传感器、按键、LED一多,Arduino的IO脚马上就不够用了。比起换一块更贵的板子,一颗PCF8574就能救急:它是基于I2C总线的8位准双向IO扩展芯片,只需要SDA和SCL两根线,就能凭空多出8个可以读、可以写的GPIO口。这篇把它的接线、I2C地址怎么设讲清楚。
它的工作原理一句话
PCF8574内部有8个准双向IO脚,通过I2C通信和主控交换数据。I2C总线就两根线:SDA传数据、SCL传时钟,两根线还能挂多个设备,每个设备用不同的地址区分。对Arduino来说,PCF8574把读写8个IO的活儿拿到总线上去办了,主控只花两个脚就能控制一大片。

接Arduino很简单
模块一般是VCC、GND、SDA、SCL四个脚,连8个扩展IO口。对Arduino Uno/Nano来说,接法是:VCC接5V(3.3V也行),GND接地,SDA接A4,SCL接A5。模块上一般自带了上拉电阻,所以不用额外加上拉;如果你用的是纯IC自己搭,才需要在SDA、SCL上各加一个约10K的上拉电阻。

地址别用错:0x20到0x27
PCF8574的默认I2C地址是0x20。模块或芯片上有A0、A1、A2三个地址脚,通过跳线或接高低电平来改低位地址,可以得到0x20到0x27一共8个可选地址。也就是说,一根总线上最多可以挂8块PCF8574,扩展出64个IO口,而主控始终只占两个脚。如果模块连上后扫描不到,先核对A0/A1/A2的接法,再跑一个I2C扫描程序看设备到底在哪个地址。
做输出和做输入要分清
PCF8574的8个IO是准双向的,做输出时要注意它的驱动能力有限:灌电流(输出低电平时吸收电流)能到25mA左右,但拉高电流(源电流)很小。所以驱动LED这类负载,好习惯是把LED的正极接电源、负极通过电阻接IO脚,让芯片去"下拉",而不是把LED正极挂在IO脚上靠它推上去。做输入时,一般先让对应位输出高电平(芯片内部有弱上拉),再检测外部把它拉低,这样才稳定、不悬浮乱跳。
什么时候用它最划算
当你想给矩阵键盘、一堆按键、一排LED或继电器模块留出IO,又不想挤占原本的数字口,PCF8574就很合适。配Arduino有好几个现成库(如PCF8574.h、Adafruit_PCF8574),pinMode/digitalWrite/digitalRead用法和原生几乎一致,上手快。
四根总线接对、地址对上、把输出改成灌电流接法,PCF8574就能稳定多给你8个IO。卡壳大都在地址扫描和IO灌/拉电流方向这两处,理清就不懵。




一根总线挂8块能扩64个IO,这个扩展能力对IO紧张的项目太友好
地址扫描这点太关键,A0A1A2接错扫不到,跑个I2C scan一下就明白
输出用灌电流接法真省心,LED正极接电源负极挂IO,不然点亮很吃力