在本教程中,我们将看到如何在PCF8574 IO Expander板的帮助下扩展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),电动机控制和通信(例如串行(串行),又带走了两个IO PIN),则您必须担心一点。
如果你有Arduino Mega Board,那么这不是一个问题,因为您有很多io引脚。问题只有在Uno和Nano等较小的板上。
要解决此问题,您可以使用PCF8574 IO扩展器模块。我已经使用此IC仅使用I2C引脚将16×2 LCD显示与Arduino接口。查看该项目这里。
PCF8574 IC的简短说明
PCF8574是I2C总线至8-bot Parallel Bus IO Expander IC。它以简单且具有成本效益的方法为许多微控制器提供了GPIO扩展。此IC的接口是I2C(或I2c)使用SDA(数据)和SCL(时钟)线。因此,如果您的微控制器具有有限的IO引脚并且具有I2C功能,则可以使用此IC扩展IO引脚。
以下是SOIC软件包中PCF8574 IC的PIN图。
它在此软件包中有16个引脚,下表给出了简单的引脚描述。
引脚号 |
引脚名称 | 描述 |
1、2、3 | A0,A1,A2 | 地址输入 |
4、5、6、7, 9、10、11、12 |
P0 - P7 | 输入 /输出端口 |
8 |
gnd | 地面 |
13 |
int | 中断输出(必须将高度拉到VCC) |
14 |
SCL | I2C的串行时钟(必须将高度拉到VCC) |
15 |
SDA | I2C的串行数据(必须将高度拉到VCC) |
16 |
VCC | 电压供应 |
当您购买基于PCF8574 IC的IO Expander模块时,您必须小心,因为使用PCF8574 IC有两种类型的董事会。一个是一个完整的IO扩展器模块,可访问所有端口引脚,int引脚和地址引脚。该模块在下面的图像中显示。这是我们将在项目中使用的模块。
还有另一个板配置为与16×2或20×4字符LCD显示器连接。在本板中,地址引脚被拔高,您无法访问所有IO引脚和INT引脚。因此,购买前两次检查。
将PCF8574与Arduino接口
由于PCF8574模块的作业是扩展微控制器的IO功能,因此我们可以将其与Arduino Uno板一起使用,以将数字IO计数增加到21。该模块的IO端口引脚可以用作输入或输出
以下是将PCF8574与微控制器连接的简单框图,其中两个IO端口引脚配置为输入,一个引脚是驱动LED,其余引脚充当了几个外围外围设备的控制引脚(输出)。
我们可以使用Arduino Uno板和PCF8574 IO Expander板的类似设置来控制各种外围设备。
电路原理图
以下是将PCF8574与Arduino Uno板接口的电路图,用于控制8个LED。
需要组件
- Arduino Uno(或任何Arduino董事会)
- PCF8574 IO扩展器板
- 连接电线
- 5V电源
- 8 X LED
- 8 x330Ω电阻
连接解释了
由于PCF8574模块可在I2C通信,我们必须使用Arduino的I2C引脚来控制模块的IO引脚。Arduino Uno的Pins A4和A5是I2C引脚,其中A4是SDA(数据)引脚,而A5是SCL(时钟)引脚。
将这些引脚连接到PCF8574板的相应SDA和SCL引脚。现在,将模块的VCC和GND引脚连接到Arduino的 +5V和GND引脚。
要测试该项目,让我们将一些LED连接到PCF8574模块的IO端口,以便我们可以使用Arduino控制它们。因此,将8个LED连接到VCC和IO端口之间的相应电流限制电阻。
笔记:我没有连接电路图中的串联电流限制电阻。但是我建议您将它们连接起来,只是为了安全起见。
笔记:建议为LED使用外部5V电源,而不要为Arduino Board的LED提供动力。
代码
用于解决I2C奴隶地址
首先,我们必须找出PCF8574模块的I2C总线从属地址。使用以下代码计算模块的地址。就我而言,当A0,A1和A2引脚连接到低点时,地址为0x20。因此,我将在实际代码中使用此地址。
#include
void setup()
{
Wire.Begin();
Serial.Begin(9600);
而(!串行);
}
void loop()
{
字节错误,地址;
int i2cdevices;
serial.println(“扫描I2C设备……”);
i2cdevices = 0;
for(地址= 1;地址<127;地址++)
{
Wire.BeginTransermiss(地址);
error = wire.endtransmission();
如果(错误== 0)
{
serial.print(“在地址0x上找到I2C设备”);
if(地址<16)
serial.print(“ 0”);
serial.print(地址,十六进制);
serial.println(“!”);
i2cdevices ++;
}
否则(错误== 4)
{
serial.print(“地址0x的未知错误”);
if(地址<16)
serial.print(“ 0”);
serial.println(地址,十六进制);
}
}
if(i2cdevices == 0)
serial.println(“找到\ n的i2c设备”);
别的
serial.println(“ **** \ n”);
延迟(5000);
}
用于控制IO端口
来到实际项目,除了Arduino IDE随附的“电线”库除了“电线”库之外,您不需要任何其他库。使用以下代码切换替代LED。
#include
void setup()
{
Wire.Begin();
}
void loop()
{
Wire.BeginTransermiss(0x20);
Wire.Write(0xaa);
Wire.EndTransmission();
延迟(1000);
Wire.BeginTransermiss(PCF8574_ADDR);
Wire.Write(0x55);
Wire.EndTransmission();
延迟(1000);
}
在职的
该项目的工作非常简单。我使用I2C通信将PCF8574与Arduino连接在一起。确定PCF8574模块的从地址后,我们必须使用此地址开始I2C通信。
由于LED已连接到IO端口,因此您要做的就是以十六进制格式发送不同的LED切换代码模式。
Since I2C doesn’t use any of the existing Digital IO pins of the Arduino, you get a total of 21 IO Pins on your Arduino UNO board (13 on Arduino UNO and 8 on PCF8574 IO Port), which you can use for a bigger project.
概括
这里植入了一个简单的项目,通过将PCF8574与Arduino接口增加了Arduino Uno板的IO引脚数量。使用此IO扩展器模块,您可以连接许多IO设备,例如温度传感器,湿度传感器,16×2 LCD显示屏,状态LED,继电器,电动机等,而不必担心IO引脚的数量。