多片PCF8574扩展树莓派IO
这里选择了使用3片PCF8574扩展,可以拓展出24个双向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 ; }