首页 > 代码库 > 多片PCF8574扩展树莓派IO

多片PCF8574扩展树莓派IO

这里选择了使用3片PCF8574扩展,可以拓展出24个双向IO口。

如果有不了解,可参考我前边的几篇文章:

树莓派i2c配置

树莓派安装WiringPi库

PCF8574扩展树莓派io口 

 

正面接线图:

 

反面焊点图:      

 

(注意:PCF8574芯片的A0 A1 A2引脚电平状态,这里的接法三片PCF8574的地址分别为 0x20 0x21 0x22 ,实际可根据自己的需要进行调整。)

 

连接好芯片后,用 i2cdetect  工具查看芯片识别状态

sudo i2cdetect -y 1

如果按我的地址选择方案,正常情况下会显示如下:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 21 22 -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --

 

既然识别了,那接下来就进行IO操作

(这里使用了wiringPi库,好处自己体会。)

//pcf8574.c
#include <stdio.h> #include <wiringPi.h> #include <pcf8574.h> #define EXTEND_BASE 100 int main (void) { // wiringPi初始化 wiringPiSetup( ); // pcf8574初始化 pcf8574Setup( EXTEND_BASE, 0x20 ); pcf8574Setup( EXTEND_BASE+8, 0x21 ); pcf8574Setup( EXTEND_BASE+16, 0x22 ); int i; //设置为输出状态 for ( i = 0 ; i < 24 ; i++ ) { pinMode( EXTEND_BASE + i, OUTPUT ); } //流水灯 for (;;) { for( i = 0 ; i < 24; i++) { digitalWrite ( EXTEND_BASE + i, HIGH); delay (10); digitalWrite ( EXTEND_BASE + i, LOW); delay (10); } } return 0 ; }