esp32和RGB_tft屏幕(st7735)使用tft_espi库函数的简单小时钟(太空人)

        使用主控为esp32,驱动库为tft_espi,使用平台为vscode+platform。简单记录下自己的第一版简易小时钟。

        下面为画面效果:

小时钟

代码:

#include <SPI.h>
#include <Adafruit_I2CDevice.h>
#include <TFT_eSPI.h>
#include "gImage.h"
#include <WiFi.h>
#include <Update.h>
#include <WiFiManager.h>
#include <NTPClient.h>
#include <WiFiUdp.h>
#include <SPI.h>
#include <qrcode.h>

const char* ssid = "ssid_IP"; // 替换为你的WiFi SSID
const char* password = "password"; // 替换为你的WiFi密码

WiFiUDP ntpUDP;
NTPClient timeClient(ntpUDP, "pool.ntp.org");
TFT_eSPI tft = TFT_eSPI();
/******显示太空人函数********* */
void displayGIF(void)
{
    #define DELAY_TIME 100 // 延迟时间,单位为毫秒
    const int imageCount = 12;
    const int x = 65;
    const int y = 95;
    const int width = 64;
    const int height = 64;
    int8_t i=0;
    for( i =0; i < imageCount; i++) {
        tft.pushImage(x, y, width, height, gImageArray[i]);
        delay(DELAY_TIME);
        }
}
// void GUIstart(){


// }

void showProgressBar(int progress, int total) {
    float ratio = static_cast<float>(progress) / total; // 计算进度百分比
    int barWidth = tft.width() - 28; // 进度条宽度
    int barHeight = 10; // 进度条高度
    int cornerRadius = 5; // 圆角半径

    int filledWidth = static_cast<int>(ratio * barWidth); // 计算填充的宽度

    tft.fillRoundRect(10, 80, filledWidth, barHeight, cornerRadius,TFT_WHITE); // 绘制填充区域
    tft.drawRoundRect(10, 80, barWidth, barHeight, cornerRadius,TFT_WHITE); // 绘制进度条边框

    tft.setTextSize(1); // 设置字体大小
    tft.setTextColor(TFT_WHITE); // 设置字体颜色
    tft.setCursor(43, 40); // 设置字体位置
    tft.print("Progress"); // 显示连接WiFi的提示信息
}

void setup() {
   
    tft.init();
    tft.setRotation(0);  // 设置旋转角度
    tft.fillScreen(TFT_BLACK);  // 清屏
    tft.setTextSize(1); // 设置字体大小
    tft.setTextColor(TFT_WHITE); // 设置字体颜色
    tft.setCursor(10, 40); // 设置字体位置
    Serial.begin(115200);
    WiFi.begin(ssid, password);

    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        //Serial.println("Connecting to WiFi...");
        tft.println("Connecting to WiFi");
    }
     delay(2000);
    tft.fillScreen(TFT_BLACK); 
    timeClient.begin();
    timeClient.setTimeOffset(28800); // 设置时区偏移量,这里设置为北京时间(UTC+8)
    int total = 100; // 总进度值
    for (int i = 0; i <= total; ++i) {
        showProgressBar(i, total); // 更新进度条    
        delay(100); // 暂停100毫秒
    }
    tft.fillScreen(TFT_BLACK);  // 清屏
     tft.setTextSize(1); // 设置字体大小
    tft.setTextColor(TFT_GOLD); // 设置字体颜色
    tft.setCursor(5, 5);
    tft.println("Hello, I am WC!");
    tft.setCursor(10, 80);
    tft.println("This is my oclock!");
}

void loop() {
    timeClient.update();
    tft.fillSmoothRoundRect(10, 30, 100, 15, 5, TFT_BLACK); // 绘制填充区域
    tft.setTextSize(2); // 设置字体大小
    tft.setTextColor(TFT_GREENYELLOW); // 设置字体颜色
    tft.setCursor(10, 30); // 设置字体位置
    tft.println(timeClient.getFormattedTime()); // 显示时间
    delay(10);
    displayGIF();
   

    
 
}

<think>好的,用户想找关于ESP32使用TFT_ESPI驱动ST7789显示屏的资料或教程。首先,我需要回忆一下TFT_ESPI库的相关配置步骤。记得这个库需要用户自定义设置文件,通常是User_Setup.h,里面需要配置引脚显示屏参数。 用户提到引用[1]里讲到了引脚配置,要根据处理器类型来设置。ESP32的话,可能需要设置像TFT_CS、TFT_DC这些引脚。引用[3]提到了SPI频率的设置,可能是在调整读取速度,这对ST7789来说可能有帮助。 接下来,用户可能需要示例代码。引用[2]提到了手把手代码注释完整案例,所以应该提供一段简单的初始化代码,包括包含库、引脚定义显示示例。此外,安装库的方法也很重要,比如通过Arduino库管理器安装TFT_eSPI。 还要考虑用户可能遇到的问题,比如引脚配置错误或者SPI速度问题。需要提醒用户检查硬件连接,特别是CSDC引脚是否正确,以及是否需要调整SPI频率。另外,ST7789的分辨率通常是240x240或240x320,用户需要根据实际屏幕修改设置。 最后,生成相关问题时要覆盖配置、优化、调试硬件连接等方面,确保用户能找到他们需要的后续信息。比如如何旋转屏幕或者提高刷新率,这些都是常见的问题。</think>### ESP32使用TFT_ESPI驱动ST7789显示屏配置指南 #### 一、环境准备 1. **安装TFT_eSPI库** 通过Arduino IDE的库管理器安装`TFT_eSPI`(搜索"Bodmer/TFT_eSPI"),或手动从GitHub下载[^2]。 2. **修改用户配置文件** 打开库目录下的`User_Setup.h`文件,根据硬件选择配置项: ```cpp // ST7789显示屏配置(240x240为例) #define ST7789_DRIVER #define TFT_WIDTH 240 #define TFT_HEIGHT 240 #define TFT_CS 5 // 片选引脚 #define TFT_DC 2 // 数据/命令控制引脚 #define TFT_RST 4 // 复位引脚(可选) #define SPI_FREQUENCY 27000000 // SPI通信频率[^3] ``` #### 二、基础代码示例 ```cpp #include <TFT_eSPI.h> TFT_eSPI tft = TFT_eSPI(); void setup() { tft.init(); tft.setRotation(1); // 屏幕旋转方向(0-3) tft.fillScreen(TFT_BLACK); tft.setTextColor(TFT_WHITE); tft.drawString("Hello ST7789!", 20, 50, 4); } void loop() { tft.invertDisplay(true); // 反色显示测试 delay(1000); tft.invertDisplay(false); delay(1000); } ``` #### 三、关键配置解析 1. **SPI接口优化** 在`User_Setup_Select.h`中可启用双SPI通道: ```cpp #define ESP32_PARALLEL // 使用并行总线加速(需硬件支持) #define SPI_READ_FREQUENCY 20000000 // 读取频率限制[^3] ``` 2. **引脚映射验证** 需与硬件连接完全匹配,ESP32典型SPI引脚: ``` MOSI -> GPIO23 SCK -> GPIO18 MISO -> GPIO19(显示无需接) ``` #### 四、调试建议 - 若白屏:检查`TFT_RST`引脚是否悬空或接地 - 若花屏:降低`SPI_FREQUENCY`至`16000000` - 使用逻辑分析仪捕获SPI信号时序[^1]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值