小白在线

爱生活 爱小白

基于Arduino、ESP8266和ESP32使用LCD显示屏的终极解说教程

 

在本篇文章中,我们将主要介绍如何将微控制器与LCD显示屏连接,以及如何制作第一个草图实现在LCD显示屏上显示所需的内容。

在本文中,我们将使用两种不同种类的显示屏:

●  不带I2C连接的LCD显示屏

●  带I2C连接的LCD显示屏

在大多数时候,我们使用Arduino IDE自带的串口绘图仪来可视化我们的解决方案或草图的输出。在进行原型制作时,这非常节省时间。但是有时您的系统也会需要实时查看。例如,如果仅将数据从传感器发送到Raspberry Pi上的数据库,则可以通过连接到数据库从PC远程查看输出。但是在某些情况下,例如室内气象站,您希望在室内直接看到当前温度等输出,而不是在PC上查看。

这时候就需要使用到显示屏了。市面上有各种不同类型的显示屏,例如7段数码管、4位7段数码管、8×8点阵显示屏、OLED显示屏或液晶显示屏(LCD)。

大多数LCD显示具有2行每行16个字符,或者4行每行20个字符。有带和不带I2C模块的LCD显示屏。我建议使用I2C的模块,因为与电路板的连接非常容易,并且仅使用2个引脚而不是6个引脚。但在本文中会介绍带或不带I2C模块的LCD液晶屏。


液晶显示屏的功能

LCD显示屏的工作电压在4.7V至5.3V之间,在无背光时的电流消耗为1mA,而使用全背光的电流消耗为120mA。背光有绿色和蓝色颜色。显示屏的每个字符都由5×8像素的框构成,因此能够显示自定义生成的字符。由于每个字符都是由(5×8 = 40)40个像素构成的,所以一个16×2 LCD显示屏总共有16x2x40 = 1280像素。 LCD模块能够以8位和4位模式运行。 4位和8位模式之间的区别如下:

●    在8位模式下,仅需要一个脉冲信号即可在LCD显示屏上显示字符,而不是两个脉冲信号。

●    与8位模式下的所有8个数据引脚相比,4位模式仅使用了四个数据引脚。

●    由于需要两个脉冲(使能)信号来显示单个字符,因此与8位模式相比,4位模式的等待时间更长。

不带I2C连接的LCD显示屏使用方法

如果使用不带I2C连接的LCD显示屏版本,则需要手动添加一个电位器来控制液晶屏的对比度。下图显示了LCD液晶屏的引脚分布。

同时我还制作了一张表格,该表格说明了如何将LCD显示器与Arduino Uno和NodeMCU连接,并附有LCD引脚的描述。为了尽可能轻松地将微控制器连接到显示器,请查看Arduino Uno和NodeMCU的相应的fritzing连接图。



引脚序号 LCD引脚名称  Arduino Uno连接 ESP8266 NodeMCU连接  描述

引脚序号LCD引脚名称Arduino Uno连接ESP8266 NodeMCU连接描述
1GNDGNDGND接地引脚,连接到Arduino的GND引脚。
2VCC3V3 / 5V3V3 / VIN电源电压5V(4.7V – 5.3V)
3VEE电位器电位器调节显示屏的对比度。如果将该引脚接地,则可获得最大对比度。我们将VEE引脚连接到电位器输出,以通过更改电位器的电阻来调整对比度。
4RSD12D2当RS设置为低电平时,选择命令寄存器向LCD发送命令;当RS设置为高电平时,选择数据寄存器将数据或字符发送到LCD。
5R/WGNDGND读取或写入数据。通常接地以将数据写入LCD
6EnableD11D3连接到微控制器引脚,并在1和0之间切换以进行数据确认。因此,如果要通过数据引脚0至7发送数据,则必须确保使能引脚为高电平。
7Data Pin 0 (d0)

数据引脚0至7组成8位数据线。数据引脚连接到微控制器的数字I / O引脚,以发送8位数据。
8Data Pin 1 (d1)


9Data Pin 2 (d2)


10Data Pin 3 (d3)


11Data Pin 4 (d4)D5D6
12Data Pin 5 (d5)D4D7
13Data Pin 6 (d6)D3D8
14Data Pin 7 (d7)D2RX
15LED Positive3V3 / 5V3V3 / VIN背光LED灯引脚正极
16LED NegativeGNDGND背光LED灯引脚负极

不带I2C的LCD显示屏与Arduino Uno的连接

下图显示了LCD显示屏和Arduino Uno开发板之间的连接。


不带I2C的LCD显示屏与ESP8266 NodeMCU的连接

下图显示了LCD显示屏和ESP8266 NodeMCU开发板之间的连接。


当然,我们也想尝试测试一下微控制器和LCD显示器之间的连接。接下来,您可以在Arduino IDE中找到示例草图。该示例代码在显示屏的第一行中打印输出“ hello,world!”,在第二行中显示每秒的计数。在本示例中,我们使用之前描述的连接。

 // include the library code:

    #include "LiquidCrystal_I2C.h"
    // initialize the library by associating any needed LCD interface pin
    // with the arduino pin number it is connected to
    const int RS = D2, EN = D3, d4 = D5, d5 = D6, d6 = D7, d7 = D8;
    // if you use the NodeMCU 12E the suggested pins are
    // const int RS = 4, EN = 0, d4 = 12 , d5 = 13, d6 = 15, d7 = 3;
    LiquidCrystal lcd(RS, EN, d4, d5, d6, d7);
    void setup() {
    // set up the LCD's number of columns and rows:
    lcd.begin(16, 2);
    // Print a message to the LCD.
    lcd.print("hello, world!");
    }
    void loop() {
    // set the cursor to column 0, line 1
    // (note: line 1 is the second row, since counting begins with 0):
    lcd.setCursor(0, 1);
    // print the number of seconds since reset:
    lcd.print(millis() / 1000);
    }


将数据打印到LCD屏幕上看起来非常复杂。但是不用担心,在大多数情况下,如果项目变得复杂起来,可以使用库的方式。不带I2C连接的LCD显示器也可以使用库。因此,下一步是安装库“ LiquidCrystal”。成功安装库之后,可以通过以下方式包含该库:#include <LiquidCrystal.h>。

带I2C连接的LCD显示屏使用方法

就像前文提到的,我建议使用I2C的LCD模块,因为在显示屏和微控制器板之间的连接只需要2个而不是6个引脚即可。如果您使用LCD和微控制器之间的I2C通信,则需要知道LCD的I2C HEX地址。在这篇文章中详细说明了如何找到设备的I2C HEX地址。

液晶屏背面是一个内置的10kΩ电位器,用于控制屏幕对比度。您无需像不带I2C连接的版本手动添加电位器。

下图显示了如何将I2C LCD显示器与Arduino Uno连接。对于本文中的所有示例,我们将使用以下这种连接。


下表列出了Arduino Uno和LCD显示屏之间的硬件连接关系。
Arduino Uno开发板
 

Arduino Uno开发板
LCD显示屏
GND
GND
5V
VCC
PIN18
SDA
PIN19
SCL

下表列出了Node MCU和LCD显示屏之间的硬件连接关系。

NodeMCU开发板
LCD显示屏
GND
GND
VIN
VCC
D2
SDA
D1
SCL

要使用I2C LCD显示屏,我们需要安装Frank de Brabander提供的“ LiquidCrystal_I2C”库。您可以在此处找到有关如何通过Arduino IDE安装外部库的文章。成功安装库之后,可以通过以下方式包含该库:#include <LiquidCrystal_I2C.h>。

以下简短的示例向您展示了如何使用该库来控制LCD显示屏。

#include "Wire.h"

    #include "LiquidCrystal_I2C.h"
    // create an LCD object (Hex address, # characters, # rows)
    // my LCD display in on Hex address 27 and is a 20x4 version
    LiquidCrystal_I2C lcd(0x27, 20, 4);
    void setup()
    {
      lcd.init();
      lcd.backlight();
      lcd.setCursor(1, 0);
      lcd.print("This is");
      lcd.setCursor(1, 1);
      lcd.print("DIYI0T.com");
    }
    void loop(){}

基于Arduino、ESP8266和ESP32使用LCD显示屏的终极解说教程 https://www.yiboard.com/thread-1555-1-1.html

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«   2020年12月   »
123456
78910111213
14151617181920
21222324252627
28293031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
    网站收藏
    友情链接
    • Z-BlogPHP
    • 订阅本站的 RSS 2.0 新闻聚合

    Powered By Z-BlogPHP 1.6.4 Valyria

    Copyright iXiaoBai.net Rights Reserved. 吉ICP备18001369号-1