ESP32 Arduino 学习篇(五)TFT_eSPI库

这篇具有很好参考价值的文章主要介绍了ESP32 Arduino 学习篇(五)TFT_eSPI库。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前期准备:

1.TFT_eSPI库的安装

首先在Libraries里面搜索安装TFT_eSPI库到你的工程文件里面。

ESP32 Arduino 学习篇(五)TFT_eSPI库
ESP32 Arduino 学习篇(五)TFT_eSPI库
ESP32 Arduino 学习篇(五)TFT_eSPI库

2.TFT_eSPI库的配置

文件配置

  该库有User_Setup.h和 User_Setup_Select.h两个配置文件,支持 ①自定义参数或 ②使用已有配置 驱动TFT屏幕。

User_Setup.h — 由自己定义设备使用的引脚,若使用此文件配置,则User_Setup_Select.h文件内容不要做修改,主要修改有以下几处:

① 用户设置文件User_Setup.h

ESP32 Arduino 学习篇(五)TFT_eSPI库

② 设置屏幕分辨率

ESP32 Arduino 学习篇(五)TFT_eSPI库

③ 设置屏幕引脚

ESP32 Arduino 学习篇(五)TFT_eSPI库

这里的MOSI连接SDA。

常用API

一、初始化相关API

1.初始化

 tft.init(); //初始化

初始化屏幕, 如果是ST7735,可以往里面传一个参数, 具体用到时再看。

2. 填充全屏幕

tft.fillScreen(uint32_t color); //填充全屏幕

填充全屏幕, 后面是颜色值,

3. 屏幕旋转

//反转显示颜色i = 1反转,i = 0正常
tft.invertDisplay(bool i);

二、文字相关API

1. 设置打字起始坐标位置和字号

 // 设置文本显示坐标,默认以文本左上角为参考点,可以改变参考点
void setCursor(int16_t x, int16_t y);

// 设置文本显示坐标,和文本的字体
void setCursor(int16_t x, int16_t y, uint8_t font); 

2. 设置字体颜色

// 设置文本颜色
void setTextColor(uint16_t color);

// 设置文本颜色与背景色
void setTextColor(uint16_t fgcolor, uint16_t bgcolor);

3. 设置字体大小

// 设置文本大小,文本大小范围为 1~7 的整数
void setTextSize(uint8_t size);

4. 显示字体

tft.print("Hello World!");
tft.println("Hello World!");

特别注意: 字库7是仿7段数码屏的样式

三、绘制文字相关API

1. 绘制字符串(居左)

int16_t drawString(const String &string, int32_t x, int32_t y)
int16_t drawString(const char *string, int32_t x, int32_t y)
int16_t drawString(const String &string, int32_t x, int32_t y, uint8_t font)
int16_t drawString(const char *string, int32_t x, int32_t y, uint8_t font)

2. 绘制字符串(居中)

int16_t drawCentreString(const char *string, int32_t x, int32_t y, uint8_t font)
int16_t drawCentreString(const String &string, int32_t x, int32_t y, uint8_t font)

3. 绘制字符串(居右)

int16_t drawRightString(const char *string, int32_t x, int32_t y, uint8_t font)
int16_t drawRightString(const String &string, int32_t x, int32_t y, uint8_t font)

4. 绘制字符

int16_t drawChar(uint16_t uniCode, int32_t x, int32_t y)
int16_t drawChar(uint16_t uniCode, int32_t x, int32_t y, uint8_t font)
void drawChar(int32_t x, int32_t y, uint16_t c, uint32_t color, uint32_t bg, uint8_t size)

5. 绘制浮点数

int16_t TFT_eSPI::drawFloat(float floatNumber, uint8_t decimal, int32_t x, int32_t y)
int16_t TFT_eSPI::drawFloat(float floatNumber, uint8_t decimal, int32_t x, int32_t y, uint8_t font)
  tft.drawFloat(3.124, 4, 0,0,4);

6. 绘制数字

int16_t drawNumber(long intNumber, int32_t x, int32_t y)
int16_t drawNumber(long intNumber, int32_t x, int32_t y, uint8_t font)

四、 绘制几何图形

1. 画点

void drawPixel(int32_t x, int32_t y, uint32_t color)

2.画线

void drawLine(int32_t xs, int32_t ys, int32_t xe, int32_t ye, uint32_t color)

3.画横线(快速)

void drawFastHLine(int32_t x, int32_t y, int32_t w, uint32_t color)

4.画竖线(快速)

void drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color)

5. 画空心圆

tft.drawCircle(100,100,50,TFT_RED);

6. 画实心圆

void fillCircle(int32_t x, int32_t y, int32_t r, uint32_t color)
voidfillRect(int32_t x,int32_t y,int32_t w,int32_t h,uint32_t color)

7. 画空心椭圆

tft.drawEllipse(100,100,100,60,TFT_GREENYELLOW);

8. 画实心椭圆

void drawRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)

9. 画空心矩形

void drawRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)

10. 画实心矩形

void fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color)

11. 画空心圆角矩形

void drawRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color)

12. 画实心圆角矩形

void fillRoundRect(int32_t x, int32_t y, int32_t w, int32_t h, int32_t radius, uint32_t color)

13. 画空心三角形

void drawTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, uint32_t color)

14. 画实心三角形

void fillTriangle(int32_t x1, int32_t y1, int32_t x2, int32_t y2, int32_t x3, int32_t y3, uint32_t color)

五、图片显示相关

1. 显示BMP图片

void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t fgcolor)
void drawBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t fgcolor, uint16_t bgcolor)

2. XBM

void drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t fgcolor)
void drawXBitmap(int16_t x, int16_t y, const uint8_t *bitmap, int16_t w, int16_t h, uint16_t fgcolor, uint16_t bgcolor)

3. 显示图片

void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, const uint16_t *data)
void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t *data)
void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, const uint16_t *data, uint16_t transparent)
void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint16_t *data, uint16_t transparent)
void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint8_t *data, bool bpp8 = true, uint16_t *cmap = (uint16_t *)nullptr)
void pushImage(int32_t x, int32_t y, int32_t w, int32_t h, uint8_t *data, uint8_t transparent, bool bpp8 = true, uint16_t *cmap = (uint16_t *)nullptr)

TFT_eSPI库的动画显示

绘制几何图形再擦除的方式绘制动画是非常好的方式, 它的:

优点是: 1. 占用空间非常小 2. 动画清晰,充分利用每个像素点 3. 可以非常灵动. 4. 方便进行微调

缺点是: 1. 容易闪屏 2. 一般不会太复杂 3.需要大量的计算

1. 让一个正方形动起来

思路: 绘制一个正方形, 然后每30ms 就擦除一部分正方形顶部的线,
#include <Arduino.h>
#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI(); // Invoke custom library

uint32_t updateTime = 0; // time for next update

int oldi = 0;
int i = 0;

void setup(void)
{
  tft.init();
  tft.setRotation(0);
  tft.fillScreen(TFT_BLACK);
  updateTime = millis(); // Next update time
  tft.fillRect(0, 0, 50, 50, TFT_RED);
}

void loop()
{
  if (updateTime <= millis())
  {
    updateTime = millis() + 30; //每30ms更新一次
    if (i < 350)
      i += 5;
    else
      oldi=i=-50;
    while (i != oldi)
    {
      tft.drawFastHLine(0, oldi, 50, TFT_BLACK);
      oldi++;
      tft.drawFastHLine(0, oldi + 50, 50, TFT_RED);
    }
  }
}

2. 画一个带动画的扇形

TFT_eSPI是没有画扇形的函数的, 画扇形的思路是: 将扇形分解为1个个小三角形,每个三角形表示一弧度
#include <Arduino.h>
#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI(); // Invoke custom library

#define DEG2RAD 0.0174532925 //当半径为1时, 1弧度对应长度, 我们可以理解为1个标准单位

byte inc = 0;
unsigned int col = 0;

void fillSegment(int x, int y, int start_angle, int sub_angle, int r, unsigned int colour);
void setup(void)
{
  Serial.begin(115200);
  tft.begin();
  tft.fillScreen(TFT_BLACK);
}

void loop()
{
  fillSegment(65, 120, 0, 60, 50, TFT_RED);
  tft.fillScreen(TFT_BLACK);
}
void fillSegment(int x, int y, int start_angle, int sub_angle, int r, unsigned int colour)
{
  // 计算初始的x1, y1
  float sx = cos((start_angle - 90) * DEG2RAD);
  float sy = sin((start_angle - 90) * DEG2RAD);
  uint16_t x1 = sx * r + x;
  uint16_t y1 = sy * r + y;
  for (int i = start_angle; i < start_angle + sub_angle; i++)
  {
    int x2 = cos((i + 1 - 90) * DEG2RAD) * r + x;
    int y2 = sin((i + 1 - 90) * DEG2RAD) * r + y;
    tft.fillTriangle(x1, y1, x2, y2, x, y, colour);
    x1 = x2;
    y1 = y2;
    //如果在这里加个delay会出现扇形动画
    delay(20);
  }
}

3. 画一个带动画的矩形进度条文章来源地址https://www.toymoban.com/news/detail-405582.html

#include <Arduino.h>
#include <TFT_eSPI.h> // Hardware-specific library
#include <SPI.h>

TFT_eSPI tft = TFT_eSPI(); // Invoke custom library

void fillSegment(int x,int y,unsigned int colour);


void setup(void)
{
  tft.init();
  tft.setRotation(0);
  tft.fillScreen(TFT_BLACK);

}

void loop()
{
  fillSegment(65, 120, TFT_RED);
  tft.fillScreen(TFT_BLACK);

}

void fillSegment(int x,int y,unsigned int colour)
{
  int y2 = 10;
  for (int i = 0; i <  +100; i++)
  {

    tft.fillRect(x, y,  i,  y2, colour);
    //如果在这里加个delay会出现扇形动画
    delay(20);
  }
}

到了这里,关于ESP32 Arduino 学习篇(五)TFT_eSPI库的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • arduino-esp32:基于TFT-eSPI库实现触摸显示屏

    在arduino的IDE上已经搭建好了ESP32环境的话,写写小应用的话还是很简单的,毕竟有这么多优秀的库。 之前用自己买的TFT屏试了一下TFT-eSPI库的驱动效果,显示效果挺好的,但是触摸一直没用上。最近有空了弄了一下。 我的屏幕是2.2寸/2.4/2.8/3.2/3.5/4.0寸TFT触摸彩色SPI串口液晶屏

    2023年04月09日
    浏览(43)
  • ESP8266网络相框采用TFT_eSPI库TJpg_Decoder库mixly库UDP库实现图片传送

    用ESP8266和TFT_ESPI模块来显示图片数据。具体来说,我们将使用ILI9431显示器作为显示设备,并通过UDP协议将图片数据从发送端传输到ESP8266。最后,我们将解析这些数据并在TFT屏幕上显示出来。在这个过程中,我们将面临一些编程挑战,但我们将尽力克服它们。 首先,我们需要

    2024年01月25日
    浏览(38)
  • TFT_eSPI使用

    参考:TFT-eSPI入门使用教程 Arduino开发-TFT_eSPI库学习 使用VS Code 搭建 platformio 平台 基于arduino的ESP32 学习笔记(二) TFT_eSPI和LVGL库使用笔记 https://b23.tv/VVhmXSp 硬件及软件环境 开发板:ESP32-S3 屏驱动是:ST7789_DRIVER 开发环境:VS Code + PlatformIO 搭建开发环境教程:使用VS Code 搭建

    2024年02月07日
    浏览(39)
  • TFT屏幕在arduino (esp 32)下的驱动,汉字显示和字库比较

    绝大多数的tft屏幕在esp32 下都可以被 TFT_eSPI 驱动显示,以下清单中的驱动模块都可以用tft_espi来显示: 上面的驱动表基本囊括了主要的TFT显示模块,所以除非不在这个清单中,所以别找第三方驱动了。 二、TFT模块的汉字显示方式和字库调用 在TFT_eSPI 的官方系统中提供了pro

    2024年02月07日
    浏览(43)
  • Arduino+esp8266+1.3寸TFT屏(st7789驱动)显示图片教程

    Arduino下载TFT_eSPI和JPEGDecoder库 步骤:项目-加载库-管理库 修改User_Setup.h 驱动 #define ST7789_DRIVER 屏尺寸(我的是240*240) #define TFT_WIDTH 240 #define TFT_HEIGHT 240 连接引脚 #define TFT_CS PIN_D8 // Chip select control pin D8 #define TFT_DC PIN_D3 // Data Command control pin #define TFT_RST PIN_D4 // Reset pin (could co

    2023年04月25日
    浏览(47)
  • 零基础学习MSP430F552LP开发板,学习前期准备,Code Composer Studio(CCS)软件的安装

    零基础学习MSP430F552LP开发板 一、前言 零基础学习MSP430F552LP开发板,为电子设计竞赛做准备以及学好这一款芯片。 在选择比赛题目时,发现有的题目时规定使用ti的芯片作为控制MCU。这时我们就必要学会使用MSP430类的芯片了,这里开始学习的是MSP430F5529LP。样品如下图: 二、

    2024年02月16日
    浏览(45)
  • Arduino离线安装esp32/esp8266

    使用本教程所示的安装方法,双击安装包的傻瓜式操作,不用进入文件夹修改,不用添加网站地址,免去网络带来的烦恼。安装完成后直接使用。 官网地址:Software | Arduino 打开链接后如图  点击红色框内以后跳转到此界面 再次选择红框后下载 打开安装包一直下一步就好 打

    2023年04月13日
    浏览(49)
  • ESP32学习准备——烧录MicroPython固件

    固件,就是文件,固化在存储介质上的文件,而文件,其实就是数据。 烧写,就是写数据,把文件(固件/数据)写到存储介质(Nand Flash, Nor Flash等)上。 当把这些固件写到储存器中后,板子下次启动的时候,直接从这些储存器中找到这些文件,嵌入式系统就能够直接跑起来

    2024年02月12日
    浏览(41)
  • ESP32 Arduino学习篇(二)中断

    单片机最为核心的内容,应该就是中断了吧。相较于其他的单片机而言,ESP32的外部中断是十分强大的,因为其每个引脚均可以设置为外部中断的触发引脚。 ESP32 Arduino 有以下触发方式: LOW 低电平触发 CHANGE 电平变化 RISING 上升沿触发 FALLING 下降沿触发 HIGH 高电平触发 1. 开启

    2024年02月16日
    浏览(40)
  • ESP32 Arduino学习篇 (三) 蓝牙

    经典蓝牙我们一般说的是BT,低功耗蓝牙我们一般说成BLE。当设备支持蓝牙4.0时,还得进一步确认设备是支持BT单模、BLE单模还是BT和BLE都支持的双模。 低功耗蓝牙 (BLE): 支持蓝牙协议4.0或更高的模块。主打低功耗,多用于物联网类型。 经典蓝牙( BT): 指支持蓝牙协议在4.0以

    2024年02月03日
    浏览(41)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包