在上篇文章中,我们介绍了利用ESP8266与OLED屏展示哪吒探针数据的方法。得益于大家的喜爱,并结合对屏幕尺寸偏小的反馈,本次带来了功能与视觉全面升级的新版本。


项目地址:https://github.com/Priess0503/ESP8266-TFT_eSPI/
新版显示效果
本次升级选用了一块1.54寸IPS屏幕,显著提升了信息展示空间。界面采用环形图动态展示CPU与内存使用率,视觉效果更佳。同时,屏幕底部新增了磁盘使用情况的百分比图示,使存储容量一目了然。

快速搭建教程
第一步:搭建哪吒探针
首先,你需要在服务器上部署哪吒探针(Nezha Monitor)。该探针的优势在于能够集中监控多台服务器的状态,便于统一管理。具体安装步骤可参考相关历史文档。
第二步:启动后端API服务
本项目需要一个简单的Python后端脚本来从哪吒探针获取数据并提供API接口。在存放脚本的目录下执行命令启动服务:
python3 kali.py
启动前,请务必根据你的实际环境修改脚本中的WSS地址和服务器内网IP地址(建议在内网环境中运行以保障安全)。

服务启动后,访问指定的API接口,将收到如下格式的JSON数据,其中包含了服务器的各项性能指标:
{
"id": 3,
"name": "服务器",
"platform": "centos",
"cpu_usage": 11.2,
"memory_usage": 81.8,
"disk_total_gb": 49.09,
"disk_usage": 66.16,
"upload_speed_kb": 48.75,
"download_speed_kb": 6.68
}
第三步:配置ESP8266硬件连接
按照下表连接ESP8266开发板与TFT屏幕的引脚:
| ESP8266 引脚 |
屏幕引脚 |
功能说明 |
| 3V3 |
VCC |
电源正极 |
| GND |
GND |
电源负极 |
| D5 (GPIO14) |
SCL/CLK |
SPI 时钟 |
| D7 (GPIO13) |
SDA/MOSI |
SPI 数据 |
| D8 (GPIO15) |
CS |
片选 |
| D3 (GPIO0) |
DC |
数据 / 命令 |
| D4 (GPIO2) |
RES |
复位 |
| 可选 |
BLK |
背光控制(可接 3V3 常亮) |
第四步:安装并配置TFT_eSPI库
在Arduino IDE中安装 TFT_eSPI 图形库。安装完成后,打开Arduino安装目录下的 libraries/TFT_eSPI/User_Setup.h 文件,找到并修改以下配置以适配你的屏幕:
// 选择ST7789驱动
#define ST7789_DRIVER
// 屏幕分辨率
#define TFT_WIDTH 240
#define TFT_HEIGHT 240
// 旋转方向(根据实际安装调整,0-3)
#define TFT_ROTATION 0
// SPI引脚定义 (根据上表连接)
#define TFT_MISO 12 // 可选,若屏幕不支持读取可悬空
#define TFT_MOSI 13 // D7
#define TFT_SCLK 14 // D5
#define TFT_CS 15 // D8
#define TFT_DC 0 // D3
#define TFT_RST 2 // D4
// 背光控制(如果需要)
#define TFT_BL 4 // 可选,接D2或其他GPIO
#define BACKLIGHT_ON HIGH
第五步:烧录代码到ESP8266
打开项目主程序文件,根据你的网络环境修改Wi-Fi名称、密码以及后端API的地址和端口。随后在Arduino IDE中编译并上传代码到ESP8266开发板。

完成以上步骤,你的服务器监控副屏即可开始工作。
二次开发指南
1. 自定义汉字显示
TFT_eSPI库对中文支持有限,需要自行提取字模。使用字模软件(如PCtoLCD)将所需汉字生成字模数据。

将生成的字模数组复制到项目中的 MyChineseFont.h 文件,并更新 CHINESE_FONT_COUNT 的值为字符总数(例如21个字符就填写21)。

同时,需要在 OpenFontRender.h 文件中,添加新增汉字字模的引用和数量声明。完成这些修改后,程序即可显示你自定义的汉字。
2. 修改或增加系统图标
如果你想更换或添加代表不同操作系统的图标,建议准备20*20像素的图片。运行项目包中提供的 images.py 脚本,可以将图片转换为 icons.h 头文件中的像素数组。

随后,在主程序的 pickIcon 函数中,根据探针返回的platform字段匹配并显示对应的图标。这本质上是一种轻量级的嵌入式系统开发实践,通过图标使监控界面信息更加直观。
const uint16_t *pickIcon(const char *platform) {
if (platform == nullptr) return nullptr;
String p = String(platform);
p.toLowerCase();
if (p.indexOf("centos") != -1) return centosIcon;
if (p.indexOf("debian") != -1) return debianIcon;
if (p.indexOf("raspbian") != -1 || p.indexOf("raspi") != -1 || p.indexOf("pi") != -1) return raspiIcon;
return nullptr;
}
通过以上步骤,你可以灵活地定制副屏的显示内容,打造一个贴合个人运维监控需求的专属看板。