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
相关产品推荐
相关产品推荐

