253浏览
查看: 253|回复: 1

[K10教程] 在Arduino中使用TFT_eSPI点亮K10屏幕

[复制链接]
本帖最后由 HonestQiao 于 2024-12-24 21:02 编辑

行空板K10屏幕,为2.8寸,具体驱动芯片型号为ILI9341,可以使用ST7789V2对应的驱动库来驱动,也可以使用ILI9341对应的驱动库来驱动:在Arduino中使用TFT_eSPI点亮K10屏幕图2

在Arduino中使用TFT_eSPI点亮K10屏幕图1

要在Arduino中,可以使用TFT_eSPI库。


一、硬件接口了解:
从官方提供的K10原理图可以了解到屏幕的接口:
在Arduino中使用TFT_eSPI点亮K10屏幕图3

其中,LCD_SCLK、LCD_DC、LCD_CS、LCD_MOSI接到了主控ESP32S3:
在Arduino中使用TFT_eSPI点亮K10屏幕图4

而LCD_BLK则连接到了扩展IO芯片:
在Arduino中使用TFT_eSPI点亮K10屏幕图5

因此,要点评屏幕,背光要通过扩展IO芯片XL9535来控制,而数据则直接从主控芯片ESP32S3发出即可。

二、开发板支持库和扩展库安装
首先,需要ESP32的开发板支持库,直接安装3.0.7版本即可:
在Arduino中使用TFT_eSPI点亮K10屏幕图6

然后,安装最新版本的TFT_eSPI来驱动屏幕:
在Arduino中使用TFT_eSPI点亮K10屏幕图7

最后,还需要安装 XL9535 的支持库TCA9555:
在Arduino中使用TFT_eSPI点亮K10屏幕图8

安装完成以后,就可以开始具体的编程了。

三、使用TCA9555库开启和关闭背光
在屏幕上显示之前,先试一下,开启和关闭背光,使用TCA9555库来进行,代码如下:
  1. #include <Wire.h>
  2. #include "TCA9555.h"
  3. #define SDA_PIN 47                        
  4. #define SCL_PIN 48        
  5. #define TFT_BL 0
  6. TCA9535 gpio(0x20);
  7. void setup() {
  8.     Serial.begin(115200);
  9.     Wire.begin(SDA_PIN, SCL_PIN);
  10.     Wire.setClock(50000);
  11.     gpio.begin();
  12.     gpio.pinMode1(TFT_BL, OUTPUT);
  13.     for(int i=0;i<10;i++) {
  14.         gpio.write1(TFT_BL, HIGH);
复制代码

使用TCA9555库以后就可以类似普通GPIO来操作扩展IO芯片上的引脚了。

编译烧录运行后,正常情况下,就会看到屏幕背光开启和关闭了,屏幕一白一黑了。

四、使用TFT_eSPI库进行显示
调用TFT_eSPI之前,需要先进行配置,可以直接修改TFT_eSPI库目录中的User_Setup.h,配置如下:
  1. // ILI9341_DRIVER和ST7789_2_DRIVER二选一
复制代码
重点提醒:配置需要开启 USE_HSPI_PORT

然后,编写测试代码:
  1. #include "SPI.h"
  2. #include "TFT_eSPI.h"
  3. #include <Wire.h>
  4. #include "TCA9555.h"
  5. #define SDA_PIN 47
  6. #define SCL_PIN 48
  7. #define TFT_BL 0
  8. TCA9535 gpio(0x20);
  9. TFT_eSPI tft = TFT_eSPI();
  10. int counter = 0;
  11. void setup() {
  12.     Serial.begin(115200);
  13.     Wire.begin(SDA_PIN, SCL_PIN);
  14.     Wire.setClock(50000);
  15.     gpio.begin();
  16.     gpio.pinMode1(TFT_BL, OUTPUT);
  17.     gpio.write1(TFT_BL, HIGH);
  18.     tft.init();
  19.     tft.writecommand(TFT_MADCTL);
  20.     tft.writedata(TFT_MAD_MY | TFT_MAD_COLOR_ORDER);
  21.     tft.fillScreen(TFT_BLACK);
  22. }
  23. void loop(){
  24.     counter++;
  25.     tft.fillScreen(TFT_BLACK);
  26.     tft.setTextColor(TFT_RED);
  27.     tft.setCursor(tft.width()/2, tft.height()/2);  // Left Top
  28.     tft.println(counter);
  29.     tft.setViewport(0+2, 0+2, tft.width()-1-2, tft.height()-1-2);
  30.     tft.frameViewport(TFT_RED, 1);
  31.     int x0 = 5;
  32.     int y0 = 5;
  33.     int x1 = tft.width()-1-5;
  34.     int y1 = tft.height()-1-5;
  35.     int padding = 20;
  36.     tft.drawLine(x0, y0, x1, y0, TFT_RED);        // Left Top         -> Right Top
  37.     tft.drawLine(x1, y0, x1, y1, TFT_GREEN);  // Right Top        -> Right Bottom
  38.     tft.drawLine(x1, y1, x0, y1, TFT_BLUE);   // Right Bottom -> Left Bottom
  39.     tft.drawLine(x0, y1, x0, y0, TFT_YELLOW); // Left Bottom  -> Left Top
  40.     tft.setTextSize(2);
  41.     tft.setTextColor(TFT_RED);
  42.     tft.setCursor(x0 + padding, y0 + padding);  // Left Top
  43.     tft.println("1");
  44.     tft.setTextColor(TFT_GREEN);
  45.     tft.setCursor(x1 - padding, y0 + padding);  // Right Top
  46.     tft.println("2");
  47.     tft.setTextColor(TFT_BLUE);
  48.     tft.setCursor(x1 - padding, y1 - padding);  // Right Bottom
  49.     tft.println("3");
  50.     tft.setTextColor(TFT_YELLOW);
  51.     tft.setCursor(x0 + padding, y1-padding);  // Left Bottom
  52.     tft.println("4");
  53.     delay(1000);
  54. }
复制代码
重点提醒:需要使用tft.writecommand(TFT_MADCTL);tft.writedata(TFT_MAD_MY | TFT_MAD_COLOR_ORDER);设置正确的显示方向

然后编译烧录,运行效果如下:
在Arduino中使用TFT_eSPI点亮K10屏幕图9


现在,已经可以使用TFT_eSPI和TCA9555共同点亮屏幕并正常显示了。
后面再继续分享,基于TFT_eSPI,使用LVGl来做界面显示。

岑剑伟  初级技师

发表于 2024-12-29 20:39:34

为推动 K10在Arduino环境使用作出了杰出贡献。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

为本项目制作心愿单
购买心愿单
心愿单 编辑
[[wsData.name]]

硬件清单

  • [[d.name]]
btnicon
我也要做!
点击进入购买页面
上海智位机器人股份有限公司 沪ICP备09038501号-4 备案 沪公网安备31011502402448

© 2013-2025 Comsenz Inc. Powered by Discuz! X3.4 Licensed

mail