在本文中,我将连接 16x2 I2C LCD 与 Arduino Uno。在我之前的文章中讨论了 16x2 LCD 与 Arduino Uno 的接口。区别在于电线的数量。我们需要超过 12 根电线。但这里只使用 4 根线。如何 ?!!!!!!在我使用并行通信方法将 LCD 与 Arduino 连接之前。但现在我正在使用 I2C 通信。
这里我使用了我之前文章中相同的 16X2 LCD。但另外将 I2C 模块连接到 16x2 LCD。它充当 LCD 和 MCU(此处为 Arduino)之间的中介。
在开始之前,您必须了解 I2C 串行接口适配器(I2C 模块)、 I2C 通信和I2C LCD 的地址
I2C 是 Inter-IC 的缩写。它是一种BUS。这是飞利浦半导体设计的。I2C 是一种同步、多从机、多主机分组交换、单端串行总线。IE。多个芯片可以连接到同一总线。I2C 仅使用两条双向开集或开漏线,串行数据线(SDA)和串行时钟线(SCL),通过电阻上拉。使用的典型电压为 +5 V 或 +3.3 V,但允许使用其他电压的系统。有关 I2C 协议的更多信息,请单击此处。
I2C 串行接口适配器
它也被称为 I2C 模块。它共有 20 个公插针。16 个引脚面向后侧,4 个引脚面向前侧。用于连接 16x2 LCD 的 16 个引脚,4 个引脚中的 2 个引脚是 SDA 和 SCL。SDA 是串行数据引脚,SCL 是时钟引脚。其余 2 个引脚用于电源(Vcc 和接地)。I2C 模块上有一个 POT。我们可以通过旋转这个 POT 来控制 LCD 显示屏的对比度。并且模块上固定有一个跳线。当我们移除跳线时,LCD 显示屏的背光将熄灭。
I2C LCD地址
在开始之前,我们需要了解 I2C 设备的寻址。每个可以连接到 MCU 的设备都有一个地址。我们需要知道这个地址才能与该特定设备进行通信。
您可以在 I2C 模块上看到三个焊盘。标记为 A0、A1 和 A2。这是地址选择器。即,每个焊盘具有一个上部分和一个下部分。如果上药水与下药水之间存在连接,则称为“已连接”,否则称为“未连接”。当 A0、A1、A2 处于“未连接”状态(A0 = 0、A1 = 0、A2 = 0)时,地址将为 0x27。默认情况下,A0、A1、A2 处于“未连接”状态。有时默认地址是0x3F。当我们只使用一个 LCD 时,无需更改 I2C 模块的地址。但是当我们使用多个 LCD 时,需要更改地址。因为两个或多个不同的设备不能与同一个地址通信。
步骤1
如果您已经知道 LCD 的地址,请跳过此步骤 - 1 和步骤 -2
在某些情况下A0、A1、A2处于“未连接”状态,但地址不是0x27。我们无法与此地址通信。所以我们需要找到那个设备的原始地址。为此,我们需要使用“I2C 扫描仪”代码运行 Arduino。
I2C Scanner 代码用于查找 I2C 设备的数量和 I2C 设备的地址。首先添加包含“Wire.h”库的头文件。然后在设置部分,通过“Wire.begin()”开始“Wire”库。然后通过“Serial.begin()”以 9600 的波特率启动串行监视器。接下来在循环部分,定义两个数据类型为“byte”的变量,分别命名为“error”和“address”。然后使用名为“Devices”的“Integer (int)”数据类型定义另一个变量。并将初始值设置为 0。接下来开始一个 for 循环,最小值为 1,最大值为 127。“地址”用作循环变量。接下来使用函数“Wire.beginTransmission()”输入要连接的地址。i2c_scanner 使用“Write. 然后仅当地址<16 时才将特定地址打印到串行监视器。这里我们以十六进制打印地址。打印指令为“Serial.print(address, HEX)”。并计算设备。然后仅当地址<16 时才将特定地址打印到串行监视器。这里我们以十六进制打印地址。打印指令为“Serial.print(address, HEX)”。并计算设备。完整的 I2C 扫描仪代码如下所示
#include <Wire.h>
void setup()
{
Wire.begin();
Serial.begin(9600);
Serial.println("\nI2C Scanner");
}
void loop()
{
byte error, address;
int Devices;
Serial.println("Scanning...");
Devices = 0;
for(address = 1; address < 127; address++ )
{
Wire.beginTransmission(address);
error = Wire.endTransmission();
if (error == 0)
{
Serial.print("I2C device found at address 0x");
if (address<16)
Serial.print("0");
Serial.print(address,HEX);
Serial.println(" !");
Devices++;
}
else if (error==4)
{
Serial.print("Unknown error at address 0x");
if (address<16)
Serial.print("0");
Serial.println(address,HEX);
}
}
if (Devices == 0)
Serial.println("No I2C devices found\n");
else
Serial.println("done\n");
delay(5000);
}
将 I2C 扫描仪代码上传到 Arduino Uno。
如果您有 I2C LCD,请跳过此步骤。但如果您有 16x2 LCD 和 I2C 模块,请参阅将此模块连接到 LCD 的步骤。
首先焊接 I2C 模块。I2C 模块上没有用于连接 16x2 LCD 的标签。所以在下面给出的图像的帮助下焊接它
焊接后将 I2C 模块连接到 Arduino Uno。
Arduino Uno I2C 模块
模拟引脚 4 - SDA
模拟引脚 5 - SCL
5V - Vcc
地 - 地
将 Arduino 连接到计算机。
接下来从 Arduino IDE 右上角的图标打开串行监视器。并将波特率设置为9600。请确保端口正确。然后您可以在串行监视器中看到 LCD 的地址,如下所示
最后我们找到I2C LCD的地址。那是 0x27
步骤 - 3
接下来我将在我们的 I2C LCD 上显示一个文本。
在此之前需要向 Arduino IDE 添加一个库。转到链接 并下载库 Arduino-LiquidCrystal-I2C-library。然后打开 Arduino IDE 并转到Sketch>Include Library> Add.ZIP Library 。接下来选择下载的 ZIP 文件并单击打开。
第4步
接下来创建草图。首先,我包含标题“Wire.h”。该库有助于与 I2C 设备进行通信。然后包括“LiquidCrystal_I2C.h”以更好地与显示器通信。
#include
#include
步骤 - 5
接下来使用函数“LiquidCrystal_I2C lcd() 设置地址、列数和行数。地址为 0x27(使用 I2C Scanner Code 发现)。列数为 16,行数为 2。之后,我们可以使用“lcd”调用显示器。您也可以将多个 I2C LCD 与 Arduino Uno 一起使用。但为每个显示器设置不同的地址和变量。
LiquidCrystal_I2C lcd(0x27, 16, 2);
步骤 - 6
接下来对设置部分进行编码。首先使用函数“lcd.begin()”初始化显示。如果你有另一个显示器初始化它们。
lcd.begin();
步骤 - 7
接下来使用函数“lcd.backlight()”打开背光。
lcd.backlight();
步骤 - 8
接下来使用指令“lcd.clear()”清除 lcd。然后将光标设置到位置 (4, 0)。
lcd.clear();
lcd.setCursor(4,0);
步骤 - 9
现在 LCD 已准备好打印。光标位于第 4 列(从 0 开始计数)和第 0 行(从 0 开始计数)。然后通过函数“lcd.print()”打印消息“Hackster”。
lcd.print("Hackster");
然后将循环部分留空。
编程完成。将草图上传到 Arduino 并在 LCD 上查看消息。 完整的代码在本文的代码部分给出。
请不要复制粘贴我的代码。尝试逐行理解代码并创建自己的草图。
您可以在这里加入我们的电报群或搜索 INNOVATION。对硬件或编程有任何疑问,请随时在我们的电报群中提问。
跟着我,
Instagram :五伏特玩家
联系方式:akshayjoseph666@gmail.com
在评论框中分享您的经验和建议。
以前的文章:
与 Arduino Uno 接口 16x2 LCD(并行接口)、非接触式门铃、与 Arduino Uno接口蓝牙模块 (HC-05)、自动水龙头、自动洗手液、与 Arduino Uno 接口超声波传感器、与 Arduino Uno 和按钮控制伺服电机、带有 Arduino Uno 和 POT 的控制伺服电机,带有 Arduino Uno 的伺服电机接口,具有保存先前状态的红外控制家用电器,非接触式洗手定时器
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
全部0条评论
快来发表一下你的评论吧 !