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); 一次推向屏幕。
下面显示中文的程序就不再赘述了。下面说说硬件连接的情况。
我选择的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的板子上。
SPI的显示板也比较常见,一般有I2C接口的,SPI接口和8位并口的。我这里使用的是3.3V驱动的板子,接线端子定义如下:
可以显示汉字了。
用Arduino IDE可以比较快速的开发应用,不用太关心硬件的细节,可以将精力多用在应用上。是初期开发的很好的工具。
在使用过程中发现经常出现白屏的现象,后来将复位输出连接到V3.3上就不再出现白屏现象了。原因:没有深挖。