You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ESP32-2432S024显示屏TFT_eSPI精灵需在Loop中创建的问题

问题排查:ESP32 TFT_eSPI精灵初始化移至Init()后黑屏

核心问题分析

  1. 精灵初始化顺序错误:setColorDepth()必须在createSprite()之前调用,因为创建精灵时会根据当前颜色深度分配显存空间。原代码中先创建精灵再设置颜色深度属于错误操作,移至Init()后错误被放大导致黑屏。
  2. 成员变量类型错误:screenWidth和screenHeight定义为float类型,而createSprite()需要整数参数,隐式转换可能引发异常。
  3. 精灵配置缺失:移至Init()后,光标精灵未设置setSwapBytes,可能导致颜色渲染异常;同时循环中未正确重置精灵内容,导致画面异常。

修正步骤

1. 调整成员变量类型

修改game.h中的屏幕尺寸为整数类型,避免参数类型不匹配:

private:
    TFT_eSPI tft = TFT_eSPI();
    TFT_eSprite cursor = TFT_eSprite(&tft);
    TFT_eSprite background = TFT_eSprite(&tft);
    TFT_eSprite gyroText = TFT_eSprite(&tft);
    // 将float改为int,匹配createSprite的参数要求
    int screenWidth = 320;
    int screenHeight = 240;

2. 修正Init()中的精灵初始化顺序

确保setColorDepth()在createSprite()之前调用,并补充完整配置:

void Game::Init()
{
    // 初始化显示屏
    tft.init();
    tft.setRotation(1);
    tft.setSwapBytes(true);
    tft.fillScreen(TFT_BLACK);

    // 初始化背景精灵:先设置颜色深度,再创建
    background.setColorDepth(8);
    background.createSprite(screenWidth, screenHeight);
    background.setSwapBytes(true);
    // 初始化时绘制基础背景
    background.pushImage(0, 0, screenWidth, screenHeight, backgroundSprite);

    // 初始化光标精灵:同样遵循先设置颜色深度的顺序
    cursor.setColorDepth(8);
    cursor.createSprite(16, 16);
    cursor.setSwapBytes(true); // 补充颜色字节交换,避免颜色显示异常
}

3. 优化Loop()逻辑

移除重复的精灵初始化代码,仅保留动态更新部分:

// 将x、y改为类成员变量,避免全局变量污染
int x = 50;
int y = 50;

void Game::Loop()
{
    // 清除背景精灵中的旧光标痕迹,用原始背景图覆盖
    background.pushImage(0, 0, screenWidth, screenHeight, backgroundSprite);

    // 更新光标精灵内容
    cursor.fillSprite(TFT_BLACK); // 清除光标精灵的旧内容
    cursor.pushImage(0, 0, 16, 16, cursorSprite);
    // 将光标绘制到背景精灵的指定位置
    cursor.pushToSprite(&background, x, y, TFT_BLACK); 
    
    // 将更新后的背景精灵推送到屏幕显示
    background.pushSprite(0, 0);

    // 更新光标位置
    x++;
    y++;
    if (x >= screenWidth) x = 0;
    if (y >= screenHeight) y = 0;
}

额外注意事项

  • 确保TFT_eSPI库的User_Setup.h已正确配置ESP32-2432S024 CYD显示屏的引脚、分辨率等参数,这是显示屏正常工作的基础前提。
  • 精灵创建会占用ESP32的内存,若同时使用多个大尺寸精灵,需注意内存限制,避免内存溢出导致程序异常。

内容的提问来源于stack exchange,提问作者Melvin Moes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 20:58:15