码迷,mamicode.com
首页 > 其他好文 > 详细

PCF8574扩展树莓派io口

时间:2014-05-26 00:10:26      阅读:504      评论:0      收藏:0      [点我收藏+]

标签:style   class   blog   c   code   java   


由于树莓派GPIO数量有限,可以通过i2c总线io扩展芯片增加io口数量。

PCF8574零售5块钱左右,可以扩展出8个io口,挺划算的。

 

PCF8574引脚:

bubuko.com,布布扣

连接到树莓派:

PCF8574的15脚SDA连接到树莓派3脚

PCF8574的14脚SCL链接到树莓派5脚

 PCF8574的8脚VSS、16脚VDD可根据实际连接

bubuko.com,布布扣

 注意:A0 A1 A2 是地址选择引脚,三个脚都接GND时芯片地址是0x20,如果使用多片PCF8574拓展时,可通过控制这三个脚电平高低决定芯片的地址。

bubuko.com,布布扣

 

树莓派操作:

通过i2cdetect查看i2c设备

bubuko.com,布布扣
sudo i2cdetect -y 1
bubuko.com,布布扣

回车后显示:

bubuko.com,布布扣
  0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: 20 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
bubuko.com,布布扣

注意:0x20即当前PCF8574芯片地址。

 C语言实现流水灯:

bubuko.com,布布扣
//demo.c
#include <stdio.h> #include <fcntl.h> #include <linux/i2c-dev.h> #include <errno.h> #define I2C_ADDR 0x20 int main (void) { int i,value; int fd; // 打开设备 fd = open("/dev/i2c-1", O_RDWR); if (fd < 0) { printf("Error opening file: %s\n", strerror(errno)); return 1; } // 设置I2C从设备地址 if (ioctl(fd, I2C_SLAVE, I2C_ADDR) < 0) { printf("ioctl error: %s\n", strerror(errno)); return 1; } while(1){ for( i = 0 ; i < 8 ; i++ ){ value = (1<<i); if( write( fd , &value, 1 ) != 1) { printf("Error writing file: %s\n", strerror(errno)); } // 延时500ms usleep(500000); } } return 0; }
bubuko.com,布布扣

编译:

bubuko.com,布布扣
gcc -o demo demo.c
bubuko.com,布布扣

执行:

sudo ./demo

 

可将二极管接在PCF8574 io脚的任意两脚验证。

 

使用wiringPi库实现流水灯:

(wiringPi库安装:http://www.cnblogs.com/wjne/p/3748735.html)

bubuko.com,布布扣
//test.c
#include <stdio.h> #include <wiringPi.h> #include <pcf8574.h> //起始PIN地址,占用 100-107 #define EXTEND_BASE 100 int main (void) { // wiringPi初始化 wiringPiSetup( ); // pcf8574初始化,pcf8574的I2C地址为0x20 pcf8574Setup( EXTEND_BASE, 0x20 ); int i; //设置为输出状态 for ( i = 0 ; i < 8 ; i++ ) { pinMode( EXTEND_BASE + i, OUTPUT ); } //流水灯 for (;;) { for( i = 0 ; i < 8; i++) { digitalWrite ( EXTEND_BASE + i, HIGH); delay (500); digitalWrite ( EXTEND_BASE + i, LOW); delay (500); } } return 0 ; }
bubuko.com,布布扣

 编译:

bubuko.com,布布扣
gcc -o test test.c -l wiringPi
bubuko.com,布布扣

 

执行:

sudo ./test

 

PCF8574扩展树莓派io口,布布扣,bubuko.com

PCF8574扩展树莓派io口

标签:style   class   blog   c   code   java   

原文地址:http://www.cnblogs.com/wjne/p/3750053.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!