`
hulianwang2014
  • 浏览: 718896 次
文章分类
社区版块
存档分类
最新评论
  • bcworld: 排版成这样,一点看的欲望都没有了
    jfinal

树莓派学习笔记——I2C使用 PCF8574 Python SMBUS

 
阅读更多

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 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位数字固定不变。

图1 PCF8574基本信息
请注意I2C 7位从机地址和I2C 读控制字或i2C写控制器存在联系与区别,对于7位从机地址为0x20的PCF8574而言,读控制字为0x41,写控制字为0x40。若使用GPIO通过软件法模拟I2C时序时,通常把写控制字0x40定义为I2C从机地址,软件模拟时的I2C地址(0x40)和I2C 7位从机地址(0x41)存在区别。
PCF8574内部含有8个准双向IO,对PCF8574进行一次写操作可修改IO口的输出状态,对PCF8574进行一次读操作可获取IO口的输入状态。I2C总线的操作较为复杂,各芯片之间的差异较大,例如BH1750、AT24C04和ADXL345虽然均使用I2C接口,但是细节之处存在差异较大。

图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

【运行结果】

图3 运行结果

5.参考资料
python SMBUS GitHub】python封装SMBUS操作函数具体代码,值得阅读。
分享到:
评论

相关推荐

    I2C控制PCF8574参考例程.zip

    在这个"I2C控制PCF8574参考例程.zip"的压缩包中,我们主要涉及到了几个关键的IT知识点,这些知识点对于嵌入式系统设计和开发人员来说非常重要。让我们逐一深入探讨。 首先,I2C(Inter-Integrated Circuit)是一种...

    PCF8574代码.rar_8574的程序代码_PCF8574_c_pcf8574 stm32_stm32f103 pcf857

    PCF8574是一款由德州仪器(TI)制造的I²C接口扩展器,它能将单个I/O线扩展为8个双向数字输入/输出(I/O)线,常用于STM32微控制器系统中以增加GPIO口的数量。 描述中提到的“stm32f103控制PCF8574的程序”,意味着...

    PCF8574驱动LCD1602驱动I2C驱动 us级精确延时驱动 STM32 HAL库

    内含I2C驱动,PCF8574驱动,LCD1602液晶驱动,光标控制,背光控制。 先初始化。delay_init(168); 参数为主频LCD1602_Init(); LCD_Write_String(2,3,"HELLO");在第3行第2个字写字符串。 LcdCurMove(2,3,1); 在第3行...

    I2C.zip_PCF8574_Proteus使用8574_c51 i2c通信_c语言i2c通信_proteus 7se

    标题中的"I2C.zip_PCF8574_Proteus使用8574_c51 i2c通信_c语言i2c通信_proteus 7se"表明了这个压缩包内容是关于I2C通信协议的实践教程,具体是通过AT89C51微控制器与PCF8574扩展I/O接口芯片之间的交互。这里我们将...

    STM32+IIC+PCF8574T+1602A

    PCF8574T是NXP生产的一款I2C/IIC接口的8位并行输入/输出扩展器。它通过IIC接口将单片机的两线数据传输扩展为8条数字输入/输出线。在本项目中,它作为1602A液晶屏的接口,将STM32的串行数据转换为并行数据,以便驱动...

    最新单片机仿真 PCF8574

    最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574最新单片机仿真 PCF8574...

    pcf8574:pcf8574 I2C IO扩展器芯片的库

    PCF8574 这是用于 I2C IO扩展器芯片的Python库。 它将8位IO端口抽象为Python列表...In [ 4 ]: pcf = PCF8574 ( i2c_port_num , pcf_address ) In [ 5 ]: pcf . port Out [ 5 ]: [ True , True , True , True , True ,

    STM32通过模拟IIC读PCF8574_STM32PCF8574_STM32通过模拟IIC读PCF8574_stm32模拟_s

    PCF8574是一款低功耗、8位并行I/O扩展器,它通过IIC接口与主控器进行通信,可以将STM32的GPIO引脚数量扩展到更多的数字输入/输出。 首先,理解IIC协议至关重要。IIC是一种两线制串行通信协议,由数据线SDA(Serial ...

    arduino_LiquidCrystal_I2C库及proteus仿真LCD1602(pcf8574)

    总结,使用Arduino的`LiquidCrystal_I2C`库和PCF8574 I2C扩展器,我们可以方便地与LCD1602进行通信,同时通过Proteus仿真验证代码的正确性,从而在不实际搭建硬件的情况下优化设计。这个方法对于学习和开发基于LCD...

    I2C.zip_PCF8574_i2c

    标题"I2C.zip_PCF8574_i2c"涉及的是一个与I2C通信协议相关的项目,其中主要使用了PCF8574扩展IO芯片。这个压缩包包含了实现AT89C51微控制器与24C04A EEPROM及PCF8574之间的数模转换的源代码,并提供了Proteus Pro ...

    四针LCD1602 iic驱动pcf8574t

    通过理解I2C协议、LCD1602的工作原理和PCF8574T的使用,开发者可以构建出高效且简洁的显示系统。在压缩包中的“test”文件可能是相关的代码示例或者实验资料,可以帮助进一步理解和实践这一技术。

    PCF8574T-中文资料

    ### PCF8574T I2C总线8位远程I/O扩展口芯片的知识点 #### 一、概述 PCF8574是一款由PHILIPS公司推出的I/O扩展口芯片,其核心特点在于支持I2C总线协议,并能够实现远程I/O口的扩展。这款芯片内置了一个8位的准双向I...

    基于模拟i2c使用pcf8563

    标题 "基于模拟i2c使用pcf8563" 涉及到的是在嵌入式系统或微控制器环境中,如何通过模拟I2C通信协议与PCF8563实时时钟(RTC)芯片进行交互。PCF8563是一款低功耗、高精度的RTC芯片,常用于各种电子设备中以保持准确...

    基于I2C的PCF8563 RTC C程序

    【基于I2C的PCF8563 RTC C程序】是关于在嵌入式系统中使用PCF8563实时时钟芯片的编程实践。这个程序利用了I2C(Inter-Integrated Circuit)通信协议,使得微控制器能够与PCF8563进行数据交换,以获取和设置时间日期...

    Arduino-LiquidCrystal_PCF8574.zip

    Arduino-LiquidCrystal_PCF8574.zip,使用I2C总线和PCF8574 I2C适配器驱动液晶显示器(LCD)的库。带有I2C PCF8574适配器的液晶显示器的Arduino库,Arduino是一家开源软硬件公司和制造商社区。Arduino始于21世纪初,...

    IIC.rar_ PCF8574_I2C LM75_PCF8574_lm75_lm75 iic

    在本项目"IIC.rar_ PCF8574_I2C LM75_PCF8574_lm75_lm75 iic"中,我们将深入探讨如何使用单片机IDE软件来操作几种特定的I2C器件:AT24C01 EEPROM、PCF8563实时时钟、LM75温度传感器以及PCF8574通用输入输出扩展器。...

    I2C总线器件PCF8574的原理与应用

    ### I2C总线器件PCF8574的原理与应用 #### 概述 本文旨在详细介绍I²C(Inter-Integrated Circuit)总线I/O器件PCF8574的工作原理及其广泛应用。PCF8574作为一种低功耗、体积小巧的通用I/O扩展芯片,在嵌入式系统...

    PCF8574-Arduino.zip_Arduino pcf8575_E3O_PCF8574_PCF8575 ardunio_

    PCF8574和PCF8575是I2C总线扩展器,常用于增加Arduino板的数字输入/输出引脚。 **PCF8574** 是一款8位并行输入/输出(I/O)扩展器,通过I2C串行接口与主控器(如Arduino)通信。它允许用户利用较少的I/O引脚控制更多...

    PCF8574中文手册.pdf

    PCF8574中文手册

Global site tag (gtag.js) - Google Analytics