玩转物联网人工智能小车(ESP32)——使用TFT_eSPI库的1.3寸SPI彩色显示屏(ST7789)

摘要:本文是TFT液晶屏的基本知识和TFT_eSPI库的简单介绍

在前边已经介绍过0.96寸OLED显示屏的使用方法,那是一个单色屏,显示效果很是一般,因此,本篇来介绍彩色TFT(Thin Film Transistor:薄膜晶体管)显示屏的使用方法。

TFT屏幕和OLED屏幕是两种不同的显示器件。TFT屏幕和OLED屏幕的区别在于使用的技术和原理不同。TFT屏幕是被动矩阵式液晶,需要用背光源的亮度来显示图像,会受周围光线影响。而OLED屏幕是依靠自身发光来显示图像,不需要用背光源,不受周围光线影响。

TFT屏幕和OLED屏幕也有不同的优缺点。TFT屏幕的优点是反应时间快,可视角度大,色彩还原度高。缺点是比较耗电,制造成本也比较高。而OLED屏幕的优点是可以做得更轻更薄,可视角度更大,并且能够显著节省电能。缺点是寿命短,而且没法把屏幕做得更大等。

下图就是本次要使用的1.3寸ST7789驱动的TFT屏幕。

该液晶显示模块的基本参数如下所示:

尺寸

1.3寸

分辨率

240*240

控制芯片

ST7789

显示区域

23.4X23.4(MM)

物理尺寸

27.5X39(MM)

接口类型

SPI

管脚数量

7针

工作电压

DC3.3V-5V

工作温度

-30-70C

显示颜色

彩色 (RGB)

对于一个用户来说,拿到一个液晶屏后最关心的可能是屏幕大小、显示分辨率以及显示的颜色数等参数。那么对于一个开发人员来说,关注点应该在工作电压、接口类型和控制芯片这几个与开发息息相关的参数。

下面来看一下接口的定义,通过上表可以看到,这个模块采用的是SPI通信接口。具体引脚的定义如下表所示:

序号

脚定义

说明

1

GND

电源地

2

VCC

电源正极(3.3V~5V)

3

SCL(SCK)

SPI时钟线

4

SDA

SPI数据线

5

RES

重启接口

6

DC

SPI数据/命令选择

7

BLK

背光控制

通过上面的表格可以看到,这是只有一根SPI数据线的SPI通信接口。这大概是因为不需要屏幕发送什么数据到主机的缘故。片选信号线在这个模块中也被省略掉了,也就是说,一个SPI总线,只能挂一个这样的屏幕模块了,否则主机是没有办法去区分这些不同的模块的。另外就是多了一个DC引脚,用来区分SPI总线传递的是命令还是数据,这大概是为了提高通信的效率,不用每个数据帧都标识自己是命令还是数据,而通过一个单独的引脚来通知屏幕设备,主机发送的是数据还是命令。

RES引脚是重启屏幕引脚。这个引脚可以连接到单片机的重启引脚,让它随着单片机一同重启,也可接到单片机的GPIO上,由程序来控制屏幕重启。BLK(背光控制)引脚默认悬空状态就可以了,背光会随着屏幕显示自动打开。当BLK为低电平时,表示关闭背光。

开发中,最关心的应该是屏幕的驱动芯片了,因为不同的芯片有不同的驱动库,对于屏幕的驱动还是非常复杂的,一般的开发人员利用现成的驱动库就可以了,不需要利用底层协议再去实现基础的显示功能了。

对于驱动库的选择,最主要的是要先看这个驱动库是不是支持我们的单片机和显示屏,然后再考虑其成熟程度、用户量、功能强弱等其他的因素。我们这次使用的驱动库名字叫TFT_eSPI,从名字就可以看出这是专门为SPI接口的TFT显示屏开发的驱动函数库。在Arduino IDE的库管理里面,输入“TFT_eSPI”就可以找到这个库并进行安装了。如下图所示:

TFT_eSPI是一个用于驱动液晶显示屏的Arduino库。它提供了一套简单易用的API,可以方便地控制和操作液晶显示屏。该库支持多种不同的液晶控制器和显示屏,包括SPI和I2C接口的液晶屏。TFT_eSPI库具有高度可定制性,可以根据具体的液晶屏和控制器进行配置和调整。它还提供了丰富的功能,如图形绘制、文本显示、触摸屏支持等,可以满足各种液晶显示屏的需求。

下表为TFT_eSPI库所支持的处理器和接口类型。

Processor

4 wire SPI

8-bit parallel

16-bit parallel

DMA support

RP2040

Yes

Yes

Yes

Yes (all)

ESP32

Yes

Yes

No

Yes (SPI only)

ESP32 C3

Yes

No

No

No

ESP32 S2

Yes

No

No

No

ESP32 S3

Yes

Yes

No

Yes (SPI only)

ESP8266

Yes

No

No

No

STM32Fxxx

Yes

Yes

No

Yes (SPI only)

Other

Yes

No

No

No

通过这个表格,可以看到目前TFT_eSPI所支持的处理器和接口类型。并且表中的芯片和所支持的接口类型,都进行了专门的优化,可以说最大化的发挥了处理器性能和接口的数据吞吐能力,因此,直接采用这个库来使用应该是远优于自己开发的。当然,互联网上还可以找到其他组织完成的类似的库,有兴趣的可以找来对比一下,看哪个库在功能、性能和易用性上更具优势。

使用TFT_eSPI库可以轻松地在Arduino上实现液晶显示屏的控制和操作。首先,你需要将TFT_eSPI库添加到Arduino IDE中。然后,根据你使用的液晶屏和控制器的类型,进行相应的配置。配置完成后,你可以使用TFT_eSPI库提供的函数和方法来控制液晶显示屏,例如绘制图形、显示文本、设置背光等。

以下是一个简单的示例代码,演示了如何使用TFT_eSPI库在Arduino上控制液晶显示屏,将显示屏设置为黑色背景,然后用蓝色的字显示“你好,欢迎来到一起玩儿科技!”:

#include <TFT_eSPI.h>

#include "STXINGKA36.h"

TFT_eSPI tft;

void setup() {

  tft.begin();

  tft.setRotation(1);

  tft.fillScreen(TFT_BLACK);

  tft.setTextColor(TFT_GREEN);

  tft.setCursor(10, 10);

  tft.loadFont(STXINGKA36);

  tft.println("你好, 欢迎来到一起玩儿科技!");

  tft.unloadFont();

}

void loop() {

  // put your main code here, to run repeatedly:

}

在上面的示例中,我们首先包含了TFT_eSPI库的头文件,并创建了一个TFT_eSPI对象。在setup函数中,我们初始化了TFT_eSPI库,并进行了一些基本的设置,如设置屏幕旋转、填充屏幕背景色、设置文本颜色等。然后,我们使用tft.println函数在屏幕上显示一条文本。

下面程序的运行结果如下:

需要提醒的是,上面的程序放到你们的环境中,还不能直接运行出这个结果来。因为还有两个方面的工作没做,一个是TFT_eSPI的配置还没有介绍该如何进行,直接下载的TFT_eSPI库是不知道你要连接什么型号的液晶屏,并且连接到哪些引脚的。另一个是要显示中文需要自己去制作字库,本身TFT_eSPI是不带中文字库的。这两方面的内容将放到下一篇文章中讲解。下期见!

物联沃分享整理
物联沃-IOTWORD物联网 » 玩转物联网人工智能小车(ESP32)——使用TFT_eSPI库的1.3寸SPI彩色显示屏(ST7789)

发表评论