设为首页 收藏本站
查看: 1041|回复: 0

[经验分享] 树莓派学习笔记——I2C使用 PCF8574 Python SMBUS

[复制链接]

尚未签到

发表于 2017-5-3 12:53:36 | 显示全部楼层 |阅读模式
1.前言

  树莓派的GPIO端口数量有限,可通过IO扩展芯片增加GPIO的数量,使得树莓派可以适应更多的应用。PCF8574为一款通过I2C总线扩展IO的芯片,单个PCF8574可扩展8个IO,一个I2C总线最多可挂载8个PCF8574,所以树莓派最多可扩展64个IO。



  树莓派扩展功能的开发方法有很多,例如wiringPi和bcm2835 C library都提供I2C API函数。如果使用python+SMBUS库开发的话,你会发现Linux应用开发原来如此简单。(注意SMBUS和I2C存在区别与联系,在本文中两者是相等的概念)




2.相关博文

  【树莓派学习笔记——I2C设备载入和速率设置】

  【树莓派学习笔记——I2C Tools 学习笔记】

  【树莓派学习笔记——I2C PCF8574 BCM2835 Library】使用BCM2835 Library实现本文相同的内容

  【树莓派学习笔记 I2C PCF8574 SysFs方式】使用SysFS方式实现本文相同的内容




3.PCF8574使用简述

  PCF8574的采用7位I2C地址,7位I2C地址中的低3位从高到低分别为A2 A1和A0,该3位为地址选择位,若地址选择全部接GND,那么PCF8574的I2C从机地址为0x20。图1为PCF8574的基本信息,左侧为芯片内部结构示意图,其中A2 A1和A0决定从机地址而从机地址直接影响I2C总线控制器,右侧上部为PCF8574引脚图,右侧下部为I2C从机地址组成示意图,从机地址的高4位为0100,该4位数字固定不变。

DSC0000.jpg



DSC0001.jpg



图2 PCF8574读写时序







4.代码实现——python



【安装python smbus】


  sudo apt-get install python-smbus  




  新建一个名为pcf8574.py的文件

#!/usr/bin/env python  
# -*- coding: utf-8 -*-
import smbus
import time
# 打开 /dev/i2c-1
bus = smbus.SMBus(1)
while True:
for i in range(0,4):
# 向PCF8574写入一个字节
bus.write_byte( 0x20 , (1<<i) )
# 延时100ms
time.sleep(0.1)






【代码详解】

  【1】#!/usr/bin/env python

  定义python解析脚本的绝对路径。



  【2】# -*- coding: utf-8 -*-

  py文件为utf-8格式,否则无法写入中文注释。




  【3】import smbus

  导入smbus模块。




  【4】bus = smbus.SMBus(1)

  在树莓派版本2中,I2C设备位于I2C-1,所以此处的编号为1




  【5】bus.write_byte( 0x20 , (1<<i) )

  向PCF8574写入一个字节,注意PCF8574和其他I2C芯片不同,该芯片没有寄存器,发送写控制字之后可直接设置IO口输出状态。



【执行程序】

  进入pcf8574.py所在目录,输入以下指令

  sudo python pcf8574.py




【运行结果】

DSC0002.jpg



图3 运行结果




5.参考资料

【python SMBUS GitHub】python封装SMBUS操作函数具体代码,值得阅读。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-372614-1-1.html 上篇帖子: windows下使用Eclipse与Pydev开发Python(图解) 下篇帖子: 在python COM中使用Office的常量
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表