ESP8266-Arduino编程实例-1.44寸LCD(ST7735)驱动

1.44寸LCD(ST7735)驱动

1、LCD介绍

液晶显示器 (LCD) 是一种平板显示器或其他电子调制光学设备,它利用液晶与偏振器的光调制特性。液晶不直接发光,而是使用背光或反射器来产生彩色或单色图像。LCD 可用于显示任意图像(如在通用计算机显示器中)或具有低信息内容的固定图像,可以显示或隐藏。例如:预设的文字、数字和七段显示器,如数字时钟,都是具有这些显示器的设备的好例子。它们使用相同的基本技术,除了任意图像由小像素矩阵组成,而其他显示器具有更大的元素。 LCD 可以正常开启(正)或关闭(负),具体取决于偏振器的排列。例如,带有背光的字符正型 LCD 将在背景上带有黑色字母,这是背光的颜色,而字符负型 LCD 将具有黑色背景,字母与背光颜色相同。滤光片被添加到蓝色 LCD 上的白色中,以赋予它们独特的外观。

本次实例使用的1.4’’LCD是基于ST7735芯片驱动的。该LCD模块通过SPI与MCU进行通信。

在这里插入图片描述

2、硬件准备

  • ESP8266 NodeMCU开发板一块
  • LCD(ST7735)模块一个
  • 面板板一个
  • 杜邦线若干
  • 数据线一条

硬件接线如下:

LCD模块引脚 ESP8266开发板引脚
TFT_RST
TFT_DC D3
TFT_CS D4
MOSI D7
SCK D5
TFT_LED

注意:如果需要连接TFT_RST和TFT_LED,请自行指定

3、软件准备

  • Arduino IDE或VSCode + PlatformIO

在前面的文章中,对如何搭建ESP8266开发环境做了详细的介绍,请参考:

ESP8266 NodeMCU的引脚介绍在前面的文章中做了详细的介绍,请参考:

4、代码实现

本次实例使用到驱动库如下:

示例1:简单显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <Adafruit\_GFX.h>
#include <Adafruit\_ST7735.h>
#include <SPI.h>

#define TFT\_RST -1
#define TFT\_CS D4
#define TFT\_DC D3

Adafruit_ST7735 tft = Adafruit\_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void)
{
tft.initR(INITR_144GREENTAB);
tft.setTextWrap(false); // Allow text to run off right edge
tft.fillScreen(ST7735_BLACK);
}

void loop(void)
{
tft.fillScreen(ST7735_BLACK);
tft.setCursor(0, 0);
tft.setTextColor(ST7735_BLUE);
tft.setTextSize(2);
tft.println("ESP8266");
tft.setRotation(tft.getRotation() + 1);
delay(3000);
}

示例2:绘制三角形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <Adafruit\_GFX.h> 
#include <Adafruit\_ST7735.h>
#include <SPI.h>

#define TFT\_RST -1
#define TFT\_CS D4
#define TFT\_DC D3

Adafruit_ST7735 tft = Adafruit\_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void)
{
tft.initR(INITR_144GREENTAB);
}

void loop(void)
{
tft.fillScreen(ST77XX_BLACK);
int color = 0xF800;
int t;
int w = tft.width()/2;
int x = tft.height()-1;
int y = 0;
int z = tft.width();
for(t = 0 ; t <= 15; t++)
{
tft.drawTriangle(w, y, y, x, z, x, color);
x-=4;
y+=4;
z-=4;
color+=100;
}
delay(500);
}

示例3:绘制矩形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#include <Adafruit\_GFX.h>
#include <Adafruit\_ST7735.h>
#include <SPI.h>

#define TFT\_RST -1
#define TFT\_CS D4
#define TFT\_DC D3

Adafruit_ST7735 tft = Adafruit\_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void)
{
tft.initR(INITR_144GREENTAB);
}

void loop(void)
{
tft.fillScreen(ST77XX_BLACK);
int color = 100;
int i;
int t;
for(t = 0 ; t <= 4; t+=1)
{
int x = 0;
int y = 0;
int w = tft.width()-2;
int h = tft.height()-2;
for(i = 0 ; i <= 16; i+=1)
{
tft.drawRoundRect(x, y, w, h, 5, color);
x+=2;
y+=3;
w-=4;
h-=6;
color+=1100;
}
color+=100;
}
delay(500);
}

示例4:绘制文本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
#include <Adafruit\_GFX.h> 
#include <Adafruit\_ST7735.h>
#include <SPI.h>

#define TFT\_RST -1
#define TFT\_CS D4
#define TFT\_DC D3

Adafruit_ST7735 tft = Adafruit\_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void)
{
tft.initR(INITR_144GREENTAB);
}

void loop(void)
{
float p = 3.1415926;
tft.setTextWrap(false);
tft.fillScreen(ST77XX_BLACK);
tft.setCursor(0, 30);
tft.setTextColor(ST77XX_RED);
tft.setTextSize(1);
tft.println("Hello World!");
tft.setTextColor(ST77XX_YELLOW);
tft.setTextSize(2);
tft.println("Hello World!");
tft.setTextColor(ST77XX_GREEN);
tft.setTextSize(3);
tft.println("Hello World!");
tft.setTextColor(ST77XX_BLUE);
tft.setTextSize(4);
tft.print(1234.567);
delay(2500);
tft.setCursor(0, 0);
tft.fillScreen(ST77XX_BLACK);
tft.setTextColor(ST77XX_WHITE);
tft.setTextSize(0);
tft.println("Hello World!");
tft.setTextSize(1);
tft.setTextColor(ST77XX_GREEN);
tft.print(p, 6);
tft.println(" Want pi?");
tft.println(" ");
tft.print(8675309, HEX); // print 8,675,309 out in HEX!
tft.println(" Print HEX!");
tft.println(" ");
tft.setTextColor(ST77XX_WHITE);
tft.println("Sketch has been");
tft.println("running for: ");
tft.setTextColor(ST77XX_MAGENTA);
tft.print(millis() / 1000);
tft.setTextColor(ST77XX_WHITE);
tft.print(" seconds.");
delay(2500);
}

示例5:填充矩形

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <Adafruit\_GFX.h> 
#include <Adafruit\_ST7735.h>
#include <SPI.h>

#define TFT\_RST -1
#define TFT\_CS D4
#define TFT\_DC D3

Adafruit_ST7735 tft = Adafruit\_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void)
{
tft.initR(INITR_144GREENTAB);
}

void loop(void)
{
tft.fillScreen(ST77XX_BLACK);
//rectangles
for (int16\_t x=0; x < tft.width(); x+=6)
{
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, ST77XX_WHITE);
}
delay(2500);
//filled rectangles
tft.fillScreen(ST77XX_BLACK);
for (int16\_t x=tft.width()-1; x > 6; x-=6)
{
tft.fillRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, ST77XX_YELLOW);
tft.drawRect(tft.width()/2 -x/2, tft.height()/2 -x/2 , x, x, ST77XX_MAGENTA);
}
delay(2500);
}

示例6:绘制圆

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#include <Adafruit\_GFX.h> 
#include <Adafruit\_ST7735.h>
#include <SPI.h>

#define TFT\_RST -1
#define TFT\_CS D4
#define TFT\_DC D3

Adafruit_ST7735 tft = Adafruit\_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void)
{
tft.initR(INITR_144GREENTAB);
}

void loop(void)
{
int radius = 10;
tft.fillScreen(ST77XX_BLACK);
//filled circle
for (int16\_t x=radius; x < tft.width(); x+=radius\*2)
{
for (int16\_t y=radius; y < tft.height(); y+=radius\*2)
{
tft.fillCircle(x, y, radius, ST77XX_YELLOW);
}
}
delay(2500);
//circles
tft.fillScreen(ST77XX_BLACK);
for (int16\_t x=0; x < tft.width()+radius; x+=radius\*2)
{
for (int16\_t y=0; y < tft.height()+radius; y+=radius\*2)
{
tft.drawCircle(x, y, radius, ST77XX_MAGENTA);
}
}
delay(2500);
}

示例7:绘制播放按钮

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <Adafruit\_GFX.h> 
#include <Adafruit\_ST7735.h>
#include <SPI.h>

#define TFT\_RST -1
#define TFT\_CS D4
#define TFT\_DC D3

Adafruit_ST7735 tft = Adafruit\_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void)
{
tft.initR(INITR_144GREENTAB);
}

void loop(void)
{
tft.fillScreen(ST77XX_BLACK);
tft.fillRoundRect(25, 10, 78, 60, 8, ST77XX_WHITE);
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_RED);
delay(500);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_BLUE);
delay(500);
// play color
tft.fillTriangle(42, 20, 42, 60, 90, 40, ST77XX_GREEN);
}

示例8:绘制直线

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <Adafruit\_GFX.h> 
#include <Adafruit\_ST7735.h>
#include <SPI.h>

#define TFT\_RST -1
#define TFT\_CS D4
#define TFT\_DC D3

Adafruit_ST7735 tft = Adafruit\_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void)
{
tft.initR(INITR_144GREENTAB);
}

void loop(void)
{
uint16\_t color = ST77XX_YELLOW;
tft.fillScreen(ST77XX_BLACK);
for (int16\_t x=0; x < tft.width(); x+=6)
{
tft.drawLine(0, 0, x, tft.height()-1, color);
delay(0);
}
for (int16\_t y=0; y < tft.height(); y+=6)
{
tft.drawLine(0, 0, tft.width()-1, y, color);
delay(0);
}
}

示例10:屏幕旋转

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <Adafruit\_GFX.h> 
#include <Adafruit\_ST7735.h>
#include <SPI.h>

#define TFT\_RST -1
#define TFT\_CS D4
#define TFT\_DC D3

Adafruit_ST7735 tft = Adafruit\_ST7735(TFT_CS, TFT_DC, TFT_RST);

void setup(void)
{
tft.initR(INITR_144GREENTAB);
}

void loop(void)
{
for (uint8\_t i=0; i<4; i++)
{
tft.fillScreen(ST77XX_BLACK);
tft.drawCircle(10, 30, 10, ST77XX_YELLOW);
tft.setRotation(tft.getRotation()+1);
}
delay(500);
for (uint8\_t i=0; i<4; i++)
{
tft.fillScreen(ST77XX_BLACK);
tft.fillRect(10, 20, 10, 20, ST77XX_GREEN);
tft.setRotation(tft.getRotation()+1);
}
delay(500);
}

文章来源: https://iotsmart.blog.csdn.net/article/details/127025986