参考资料:
pass
目标:
使用DOIT ESP32 DEVKIT V1,通过驱动TFT_eSPI,点亮屏幕ST7789
关键词:
Arduino,ESP32,DOIT ESP32 DEVKIT V1,ST7789,240*240,TFT_eSPI,ILI9341
前言
最近开始研究单片机,从最简单的Arduino开始
最终目标是自己整一块码表,想着就先点亮屏幕
但实际发现ESP32系列非常混乱,除了芯片大家都叫ESP32以外,底板种类非常多
常见的有30针脚(Pin)和36pin,还有ESP32CAM这种异形规格的
这使得与屏幕连接(SPI协议)产生不少坑,本文将会分析一下自己过程中踩过的坑
本文主要使用DOIT ESP32 DEVKIT V1(后文略称doit),通过TFT_eSPI(后文略称TFT)来驱动屏幕ST7789
Adafruit ST7789/ST7735也使用过,只用于和ESP8266连接(doit失败了)
并且TFT是兼容了Adafruit的,因此略过Adafruit的驱动
目录
- 弄清自己的ESP32是什么底板,知道引脚有哪些
- 配置TFT的配置文件
User_Setup.h
- 使用TFT提供的示例来点亮屏幕
1. ESP32底板的区别
ESP32只是指中间的芯片是ESP32
而下图则是doit的底板,只是其中一种底板和芯片连接的方式(30pin)
另外还有这种36Pin的(不在本文讨论范围)
或者ESP32CAM(不在讨论范围)
引脚的不同就会导致其所包含的功能也不同
比如这张图,包含了doit底板各个引脚的所带的功能,所以连接引脚前务必要找到此类引脚说明(可以问卖家要)
注意其中的GPIO 23 22 21 19 18 5 也就是青色的这块
略微普及一下,两台微型机(mcu和屏幕)连接,必须要走协议,就像人和人说话要选择语言
I2C和SPI都是协议之一(本文主要介绍SPI)
而使用协议之前必须要选择正确的引脚,这到现在为止一直让你关注引脚的原因
上图的MOSI SCL等都是每个引脚负责的功能
MOSI即主出从进(mast out slave in),SCL串行时钟,SDA串行数据线,如果一点点都不知道该知识的建议搜索此类的文章
再来看GMT130 ST7789屏幕上的引脚
把屏幕上的针脚按名称接上esp32上所对应的针脚
百分百是可以点亮屏幕的
而且只需要关注其中2个引脚的连接方式
ESP32 | 屏幕 |
---|---|
23或21 | MOSI/SDA(SPI协议可以随便选1个,I2C可能需要选择SDA引脚) |
22或18 | SCL/SCK |
剩下的RES DC BLK 引脚理论上可以随便插
但在doit的底板上需要避开GPIO2(2针脚同时控制了蓝灯,会有bug)和RX TX引脚
分享下我的doit与GMT130(ST7789驱动)的引脚连接组合
// TFT的官方配置
#define TFT_MOSI 15 // In some display driver board, it might be written as "SDA" and so on.
#define TFT_SCLK 14
#define TFT_CS 5 // Chip select control pin
#define TFT_DC 27 // Data Command control pin
#define TFT_RST 33 // Reset pin (could connect to Arduino RESET pin)
#define TFT_BL 22 // LED back-light
//我的配置1,完全按照引脚图来配置
#define TFT_MOSI 21
#define TFT_SCLK 22
#define TFT_DC 4
#define TFT_RST 23
//#define TFT_CS 34 // GMT130没有CS引脚
//#define TFT_BL 35 // 背光不需要设置
//我的配置2,根据官方使用修改而来
#define TFT_MOSI 5 //官方使用15,对应HSPI CS0引脚,我使用VSPI CS0,其中V指virtual
#define TFT_SCLK 18 //官方使用14,对应HSPI CLK,我是用VSPI CLK
#define TFT_DC 4
#define TFT_RST 22
//#define TFT_CS 34 // GMT130没有CS引脚
//#define TFT_BL 35 // 背光不需要设置
最后再来看个反面案例: Arduino_GFX驱动2.4'SPI串口240x320TFT彩屏(ST7789)
引用原文:
TFT屏型号GMT024-8p10p-SPI VER1.1
金逸晨的,2.4寸,分辨率240x320,参数还不错,淘宝价23.5元
试了TFT_eSPI.h,发现无法正常使用,所以又找了一个库
...
其实TFT是可以驱动的,此人可能没有熟读TFT的配置文件
点不亮的主要原因可能是GMT024有点奇葩
- 是它的BL必须接高电平
-
CS(chip select)片选引脚必须接,而且可能只能接GPIO5和15.因为doit的引脚规定了
2. 配置TFT_eSPI
2.1 先下载TFT_eSPI的库
2.2 配置文件
只有1个文件需要配置,即User_Setup.h
,强烈建议先复制一份备份
眼尖的可以发现,我按照屏幕的不同,使用不同的配置文件,这是可以在
User_Setup_Select.h
中进行配置的
然后开始配置,作者分了4个Section
2.2.1 选择屏幕的驱动和屏幕尺寸
TFT基本涵盖了大部分的屏幕驱动,如果你不知道自己的屏幕驱动是什么
问卖家!
再选择屏幕尺寸
2.2.2 定义针脚
第一段费这么大力气就是为了让读者理解定义针脚的重要性
2.2.3 定义启用的字体
没特别的需求就别动配置,关掉某些字体可以节省存储空间
另外自定义字体还没研究,以后可能会研究下(我觉得中文输出又麻烦又碍事,英文又不是看不懂没必要把时间花这上面)
2.2.4 其他选项
主要是控制SPI协议的频率,没事别动
3. 点亮屏幕
在Arduino编辑器里面随便找个案例就行了
方便起见可以选择一个偏小的160x128的案例, 因为显示的内容都在240x240的范围内
这里我选择了乒乓球的案例,并且屏幕正常点亮
如果你的屏幕没点亮,请检查接线,大概率是接错了
其他TFT的方法函数不再赘述,官方的案例非常多,想画图形,显示图片都有相应的函数方法提供
实在不知道怎么办请提issue,我也是通过issue解决问题的
4. 其他注意事项
4.1 显示方向
如果你屏幕显示方向不对需要在setup函数中修改tft.setRotation(1); //参数0 1 2 3 四个方向
4.2 红绿显示色相反
如果你明明选择红色却打印了绿色,比如
tft.setTextColor(TFT_RED); //设置了字体是红色
tft.drawString("hello world",0,0); //实际打印了绿色
需要修改"User_Setup.h"
中的此处
4.3 黑白相反
打印了白色却显示黑色,则修改此处(去掉其中一个注释)
4.4 所谓2.4寸 ST7789 240*320屏幕的坑
即刚才演示的那块屏幕
淘宝把它的驱动标记为ST7789V或ST7789,你用ST7789是驱动不了它的
实际上它的驱动是ILI9341
同时你可以在"User_Setup.h"
中找到
如果你还购买的是金逸晨的屏幕,则大概率要选择_2驱动,不然会花屏
如果有问题可以留言,关于TFT使用的问题请去github提issue,官方回复非常快
--全文完--