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

ESP32-S3-Matrix加载GFX库字体失效,仅默认字体可用求助

问题描述

使用ESP32-S3-Matrix开发板编写按键触发99倒计时至0的程序时,默认字体能显示数字99但因尺寸过大被屏幕截断。尝试更换GFX库的5x7 TomThumb字体(及其他库内字体)后,LED屏幕完全不显示,无任何报错或警告,仅默认字体可用。

相关代码

#include <Adafruit_GFX.h>
#include <Adafruit_NeoMatrix.h>
#include <Fonts/TomThumb.h> // 注释掉这行后显示正常,也试过其他字体

// 定义矩阵尺寸和引脚
#define MATRIX_WIDTH  8
#define MATRIX_HEIGHT 8
#define MATRIX_PIN    14 // 根据你的数据引脚修改

Adafruit_NeoMatrix matrix = Adafruit_NeoMatrix(MATRIX_WIDTH, MATRIX_HEIGHT, MATRIX_PIN, 
                                                NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + 
                                                NEO_MATRIX_COLUMNS + NEO_MATRIX_PROGRESSIVE, 
                                                NEO_RGB + NEO_KHZ800);

int number = 99;

void setup() {
  matrix.begin();
  matrix.setBrightness(1); // 亮度设为1避免刺眼
  matrix.setTextWrap(false);
  matrix.setFont(&TomThumb); // 注释掉这行后显示正常
  matrix.setTextColor(matrix.Color(255, 0, 0)); // 数字设为红色
  
  // 设置启动按键为输入
  pinMode(0, INPUT_PULLUP); // 假设启动按键连接到GPIO 0
}

// 剩余代码省略
解决思路
  • 调整光标绘制坐标:TomThumb字体是5x7尺寸,默认字体为8x8。设置自定义字体后,需要用matrix.setCursor(x, y)调整光标位置,比如设为matrix.setCursor(1, 0),避免内容绘制到屏幕可视区域外。默认字体刚好适配8x8屏幕,自定义字体如果光标位置不对,会导致内容“隐形”。
  • 显式调用屏幕刷新:在绘制内容后强制调用matrix.show(),确保屏幕刷新。默认字体可能在底层自动触发了刷新逻辑,但自定义字体需要显式执行这一步。
  • 排查库版本兼容性:更新Adafruit_GFX和Adafruit_NeoMatrix库到最新版本,旧版本可能对ESP32-S3的自定义字体支持存在bug。
  • 适配屏幕尺寸的显示逻辑:8x8屏幕用5x7字体显示两位数的话,总宽度为10,超出了屏幕宽度。可以改成单数字显示,或者修改倒计时逻辑,每次只展示一位数,也可以寻找更小的自定义字体。
  • 测试单个字符绘制:先尝试仅绘制单个数字(比如matrix.print("5");),排除两位数超出屏幕导致的显示问题。
  • 验证矩阵布局参数:确认矩阵的行列映射参数(NEO_MATRIX_TOP + NEO_MATRIX_RIGHT + ...)是否与硬件实际布局匹配,自定义字体对矩阵的行列映射更敏感,参数错误会导致显示异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:26:10