首页

将PCF8574与Arduino进行接口

在本教程中,我们将看到如何在PCF8574 IO Expander board的帮助下扩展Arduino UNO板的IO功能。通过将PCF8574与Arduino UNO接口,您可以增加Arduino的IO引脚的数量,这样您就不必担心连接几个IO设备,如led, LCD显示,电机,传感器等。

介绍

Arduino UNO已经成为电子领域初学者和爱好者实现各种应用程序的首选板。我看到过几个使用Arduino开发的项目,从简单的电机控制到使用图形OLED显示屏完成气象站。

Arduino UNO的一个主要问题是我们项目中可用的数字IO引脚的数量。我们知道Arduino UNO板有13个数字IO引脚和5个模拟输入引脚。

对于简单的项目来说,这可能就足够了,但如果你想开发一个包含许多传感器、一个显示单元(LCD或OLED)、电机控制和通信(如Serial,它会减少两个IO引脚)的复杂项目,那么你就得稍微担心一下了。

如果你有Arduino超级委员会,那么这将不是一个问题,因为你有过多的IO引脚。问题只存在于像UNO和Nano这样较小的电路板上。

可以使用PCF8574 IO Expander Module。我已经使用这个IC接口16×2 LCD显示器与Arduino使用I2C引脚。查看这个项目在这里

PCF8574集成电路简介

PCF8574是一种I2C总线到8-bot并行总线的IO扩展IC,它以一种简单而经济的方式为许多微控制器提供GPIO扩展。该IC的接口是I2C(或I2C)使用SDA(数据)和SCL(时钟)线。所以,如果你的微控制器有数量有限的IO引脚,并具有I2C能力,那么你可以使用这个IC来扩展IO引脚。

下面是SOIC封装中PCF8574 IC的引脚图。

PCF8574 I2C液晶显示板

它有16个引脚在这个包和下表给出一个简单的引脚描述。

密码

销的名字

描述

1、2、3 A0, A1, A2

地址输入

4 5 6 7,

9 10 11 12

P0 - P7

输入/输出端口

8

接地

地面

13

INT

中断输出(必须被拉高到VCC)

14

sci

I2C串行时钟(必须高拉至VCC)

15

SDA

I2C串行数据(必须高拉至VCC)

16

VCC

电压供应

当你购买基于PCF8574 IC的IO扩展模块时,你必须小心,因为市场上有两种类型的板使用PCF8574 IC。一种是完整的IO扩展模块,可以访问所有的端口引脚,INT引脚和地址引脚。这个模块如下图所示。这是我们将在项目中使用的模块。

PCF8574 IO级联模块

还有另一个板,配置为与16×2或20×4字符液晶显示器接口。在这个板,地址引脚拉高,你没有访问所有的IO引脚和INT引脚。所以,在购买之前要检查两次。

PCF8574 I2C液晶显示板

实现PCF8574与Arduino的接口

由于PCF8574模块的工作是扩展微控制器的IO能力,我们可以使用它与我们的Arduino UNO板增加数字IO计数到21。模块的IO端口引脚可以用作输入或输出

下面是一个简单的框图,PCF8574与微控制器的接口,其中两个IO端口引脚配置为输入,一个引脚是驱动一个LED,其余引脚作为几个外部外设的控制引脚(输出)。

PCF8574示例应用程序

我们可以在Arduino UNO板和PCF8574 IO Expander board上使用类似的设置来控制各种外设。

线路图

下面是PCF8574与Arduino UNO板接口控制8个led的电路图。

PCF8574示例应用程序

组件的要求

  • Arduino UNO(或任何Arduino板)
  • PCF8574 IO扩展板
  • 连接电线
  • 5 v电源
  • 8 x发光二极管
  • 8 x 330Ω电阻

连接解释

因为PCF8574模块工作I2C通信,我们必须使用Arduino的I2C引脚来控制模块的IO引脚。Arduino UNO的A4和A5是I2C引脚,A4是SDA (Data)引脚,A5是SCL (Clock)引脚。

将这些引脚连接到PCF8574板对应的SDA和SCL引脚。现在,将模块的VCC和GND引脚连接到Arduino的+5V和GND引脚上。

为了测试这个项目,让我们将一些led连接到PCF8574模块的IO端口,这样我们就可以使用Arduino来控制它们。因此,在VCC和IO端口之间连接8个led和相应的限流电阻。

注意:我没有将电路图中的串联限流电阻连接起来。但我建议你把它们联系起来,以防万一。

注意:建议为led使用外部5V电源,不要从Arduino板上为led供电。

代码

用于解析I2C从地址

首先,我们需要确定PCF8574模块的I2C总线从地址。使用下面的代码计算模块的地址。在我的例子中,当A0, A1和A2引脚连接到LOW时,地址是0x20。我将在实际代码中使用这个地址。

# include < Wire.h >

无效的设置()

Wire.begin ();

Serial.begin (9600);
而(串行);

无效循环()

字节错误,地址;
int I2CDevices;

系列。println("正在扫描I2C设备…");

I2CDevices = 0;
For (address = 1;地址< 127;地址+ +)

Wire.beginTransmission(地址);
错误= Wire.endTransmission ();

If (error == 0)

系列。print("在地址0x找到的I2C设备");
If (address < 16)
并同时(“0”);
系列。打印(地址、十六进制);
系列。println(“!”);

I2CDevices + +;

Else if (error == 4) Else if (error == 4)

系列。print("未知错误地址0x ");
If (address < 16)
并同时(“0”);
系列。println(地址、十六进制);


if (I2CDevices == 0)
系列。println(“没有I2C设备找到\n”);
其他的
以“* * * * \ n”);

延迟(5000);

用于控制IO端口

在实际的项目中,你不需要任何额外的库,除了“Wire”库,它是Arduino IDE自带的。使用下面的代码来切换备用led。

# include < Wire.h >

无效的设置()

Wire.begin ();

无效循环()

Wire.beginTransmission (0 x20);
Wire.write (0 xaa);
Wire.endTransmission ();
延迟(1000);
Wire.beginTransmission (PCF8574_ADDR);
Wire.write (0 x55);
Wire.endTransmission ();
延迟(1000);

工作

这个项目的工作很简单。我使用I2C通信将PCF8574与Arduino接口。在确定PCF8574模块的从地址后,我们必须使用这个地址开始I2C通信。

由于LED连接到IO端口,您所要做的就是以十六进制格式发送不同模式的LED切换代码。

由于I2C不使用任何现有的Arduino的Digital IO引脚,您在Arduino UNO板上共有21个IO引脚(Arduino UNO上有13个,PCF8574 IO Port上有8个),可以用于更大的项目。

总结

这里植入了一个简单的项目,通过将PCF8574与Arduino接口,增加Arduino UNO板的IO pin数。使用这个IO扩展模块,您可以连接许多IO设备,如温度传感器,湿度传感器,16×2液晶显示器,状态led,继电器,电机等,而无需担心IO引脚的数量。

留下一个回复

您的电子邮件地址将不会被公布。必填字段被标记

Electronicshub图标
<\/i>","library":""}}" data-widget_type="nav-menu.default">
Baidu