ESP8266使用Arduino TFT_eSPI库来驱动SPI接口的LCD

ESP8266使用Arduino TFT_eSPI库来驱动SPI接口的LCD


春节放假,周所周知的原因,不能串门,不能聚餐,不能,手头还好有一个160x128的TFT LCD小屏,一个ESP8266的开发板,在淘宝上买了一个红外测温的器件,准备做一个测温仪,但快递和卖家不上班,先做一个显示设备。首先说明一下,软件选择了Arduino IDE作为编程软件,为ESP8266编程。

1. 选择显示驱动库

Arduino 可以驱动ST7735的库有很多,在默认安装时一般会安装一个TFT的库,但这个库不知道为啥,与后面安装的ESP8266编程板不兼容。
在这里插入图片描述
这个库在使用Arduino 提供的板子应该可以正常使用,但使用ESP32和ESP8266可能还要化一些精力。因此,在库管理中输入ST7735进行寻找,因为我使用的TFT LCD板子的驱动芯片是ST7735. 最后找到下面一个库:TFT_eSPI库:
在这里插入图片描述
这个库最大的优点是显示中文比较快,因为我们都知道,中文要通过点阵来实现,要显示点阵就需要用drawPixel来画点,而这个库可以首先在sprite内存中画点,然后将内存的点一次推向屏幕,速度非常快,比用drawPixel在屏幕上画点快多了。下面来简单介绍一下库的函数。

virtual void  drawPixel(int32_t x, int32_t y, uint32_t color),
 drawChar(int32_t x, int32_t y, uint16_t c, uint32_t color, uint32_t bg, uint8_t size),
drawLine(int32_t xs, int32_t ys, int32_t xe, int32_t ye, uint32_t color),
drawFastVLine(int32_t x, int32_t y, int32_t h, uint32_t color),
dawFastHLine(int32_t x, int32_t y, int32_t w, uint32_t color),
fillRect(int32_t x, int32_t y, int32_t w, int32_t h, uint32_t color);
// 上面的函数基本不用介绍了,从名字就知道是干啥的了。  

这个库的函数有一个非常好用的被称之为精灵的sprite,要实现画面,可以画点,画直线,画形状,可以画bitmap,画完后,用push就可以将精灵的内容展现在画面上。下面看一下实际的例子:

 #include <TFT_eSPI.h>
 TFT_eSPI tft =TFT_eSPI();
// Declare Sprite object "spr" with pointer to "tft" object
TFT_eSprite spr = TFT_eSprite(&tft);  
// 上面的语句是声明一个eSprinte对象。并将这个sprite对象和tft屏幕关联。
void setup(void) 
{
    
    
//  tft.setRotation(1);
  Serial.begin(115200);
  Serial.println("Test Sprite");
  tft.init();
  // 在这里创建sprite对象,宽度和高度和屏幕一样大小。
  spr.createSprite(WIDTH, HEIGHT);
  tft.fillScreen(TFT_BLUE);
  spr.fillScreen(TFT_BLUE); 
}   
int inX = 6;
int inY = 50;
void loop() 
{
    
    
  if ( inY == 130 )
  {
    
    
    inY = 50;    
    tft.fillScreen(TFT_BLUE);
    delay(3000);
    spr.pushSprite(0, 0);			// 精灵的内容一次推向屏幕
    spr.fillScreen(TFT_BLUE);    
  }
  Show_CH_Font16(inX,inY,0);
  inX += 16;
  Show_CH_Font16(inX,inY,1);
  inX += 16;
  Show_CH_Font16(inX,inY,2);
  inX += 16;
  Show_CH_Font16(inX,inY,3);
  inX += 16;
  Show_CH_Font16(inX,inY,4);
  inX += 16;
  Show_CH_Font16(inX,inY,5);
  inX += 16;
  Show_CH_Font16(inX,inY,6);
  inX = 6;
  inY += 20;
  spr.drawLine(0, inY - 2, 120, inY - 2,TFT_WHITE);
  delay(1000);
  Serial.printf("The inX = %d, inY = %d\r\n", inX, inY); 
}
// 上面的程序是输出汉字,这些汉字首先是被输出到sprite精灵中,然后在
// 在语句    spr.pushSprite(0, 0); 一次推向屏幕。

下面显示中文的程序就不再赘述了。下面说说硬件连接的情况。

2. ESP8266开发板

我选择的ESP8266开发板是淘宝的产品,有图:
在这里插入图片描述我是第一次使用ESP8266的开发板,比较陌生,对端口不是很熟悉。经过一天的试验,对各个接口终于有了比较清除的了解。这个板子的实物图如下:
在这里插入图片描述

从上面的端子开始介绍:

A0 - 模拟量输入点,可以测0-1V的电压,也可以内部配置检测VCC的电压。
SD3 - GPIO10
SD2 - GPIO9
SD1 - MOSI 这个是SPI的选项,硬件SPI可以选这个点。但默认的不是
CMD - CS SPI的片选信号,也是一个备选点
SD0 - MISO SPI的输出端
CLK - SCLK SPI的时钟输出。上面这4个点可以作为SPI的选项来选择。
左边还有两个点,RST和EN端子。下载程序时需要使用。但板子已经做了配置了,下载程序不用像ESP32一样的手按按钮。
右边的端子基本是通用的数字量端口,SPI默认的端口如下:
在这里插入图片描述
还有3个连接点是:
在这里插入图片描述分别要连接到ST7735的板子上。

3. TFT LCD显示板

SPI的显示板也比较常见,一般有I2C接口的,SPI接口和8位并口的。我这里使用的是3.3V驱动的板子,接线端子定义如下:

在这里插入图片描述按上面的接线就可以了。板子实物:
在这里插入图片描述

4. 运行效果

不知道如何能将视频放上来,照个相发上来了。
在这里插入图片描述

可以显示汉字了。

5. 总结

用Arduino IDE可以比较快速的开发应用,不用太关心硬件的细节,可以将精力多用在应用上。是初期开发的很好的工具。

6. 后记

在使用过程中发现经常出现白屏的现象,后来将复位输出连接到V3.3上就不再出现白屏现象了。原因:没有深挖。

猜你喜欢

转载自blog.csdn.net/weixin_44481398/article/details/104215847