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
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!