基于 ESP8266 + MicroPython + SPI TFT 屏幕 的电脑性能监控副屏。
电脑端脚本通过 HWiNFO 共享内存 读取系统数据,通过串口发送给 ESP8266;ESP8266 在屏幕上实时渲染数值。
- 只要涉及上传
esp8266_micropython/main.py,必须执行“擦除 + 重烧固件 + 重新上传脚本”的完整流程。 - 具体强制规范以项目根目录
AGENT.md为准。
- 10项实时监控:
CPU使用率、CPU温度、RAM、GPU使用率、GPU温度、显存使用率、显存温度、CPU P核频率、帧率、风扇转速 - 智能彩色指示:自动根据数值变化颜色(绿色:正常,黄色:警告,红色:危险)
- 串口通信:电脑端发送紧凑
CSV帧,ESP8266 端低内存解析 - 数据源:仅使用 HWiNFO Shared Memory(不使用兜底数据源)
- 低内存优化:屏幕端仅局部刷新变化数字,降低卡顿和内存抖动
- 调试指示灯:蓝色=启动,绿色=正常,黄色=超时,品红色=错误,心跳闪烁=主循环运行中
- 调试脚本齐全:包含串口日志与启动日志排查脚本
.
├─ esp8266_micropython/ # 设备端 (MicroPython)
│ ├─ boot.py
│ ├─ main.py # ESP8266 主程序(屏幕渲染 + 串口接收)
│ ├─ st7735.py / st7789.py # 可选屏幕驱动
│ └─ README.md
├─ esp8266_pc_monitor/ # 电脑端 (Python)
│ ├─ monitor.py # 采集系统信息并串口发送
│ ├─ requirements.txt
│ ├─ esp8266_firmware/ # Arduino 方案(可选)
│ └─ README.md
├─ debug_serial.py # 115200 串口日志调试
├─ debug_bootlog.py # 74880 启动日志调试
├─ debug_mpy_log.py # MicroPython 启动输出调试
└─ remote_main.py # 设备端主程序镜像/备份脚本
- ESP8266 开发板(NodeMCU)
- SPI TFT 屏(ST7735 / ST7789)
- USB 数据线
| ESP8266 | 屏幕引脚 | 说明 |
|---|---|---|
| 3V3 | VCC | 电源 |
| GND | GND | 地 |
| D5 (GPIO14) | SCL / SCK | SPI 时钟 |
| D7 (GPIO13) | SDA / MOSI | SPI 数据 |
| D2 (GPIO4) | RST / RES | 复位 |
| D1 (GPIO5) | DC / A0 | 数据/命令 |
| D8 (GPIO15) | CS | 片选 |
| 3V3 | BLK / LED | 背光 |
当前
esp8266_micropython/main.py默认使用DC_PIN=5(D1)、RST_PIN=4(D2)。
- Windows(当前项目已在 Windows 下使用)
- Python 3.9+
- ESP8266 已刷 MicroPython 固件
安装电脑端依赖:
pip install -r esp8266_pc_monitor/requirements.txt步骤1:擦除并烧录MicroPython固件
# 擦除闪存
python -m esptool --port COM8 erase_flash
# 烧录MicroPython固件(请替换为你下载的固件路径)
python -m esptool --port COM8 --baud 115200 write_flash --flash_size=detect 0 "C:\Users\你的用户名\Downloads\ESP8266_GENERIC-20251209-v1.27.0.bin"步骤2:上传Python代码到ESP8266
# 等待3秒让ESP8266启动
Start-Sleep -Seconds 3
# 上传boot.py和main.py
python -m ampy.cli --port COM8 --baud 115200 put esp8266_micropython/boot.py
python -m ampy.cli --port COM8 --baud 115200 put esp8266_micropython/main.py步骤3:硬件重启ESP8266
python -m esptool --port COM8 run步骤4:启动PC监控程序
# 等待5秒让ESP8266完全启动
Start-Sleep -Seconds 5
# 启动监控程序
python esp8266_pc_monitor/monitor.py# 设置变量(请根据实际情况修改)
$PORT = "COM8"
$FIRMWARE = "ESP8266_GENERIC-20251209-v1.27.0.bin" # 或使用完整路径
# 步骤1: 擦除并烧录固件
python -m esptool --port $PORT erase_flash
python -m esptool --port $PORT --baud 115200 write_flash --flash_size=detect 0 $FIRMWARE
# 步骤2: 上传代码
Start-Sleep -Seconds 3
python -m ampy.cli --port $PORT --baud 115200 put esp8266_micropython\boot.py
python -m ampy.cli --port $PORT --baud 115200 put esp8266_micropython\main.py
# 步骤3: 重启
python -m esptool --port $PORT run
# 步骤4: 启动监控
Start-Sleep -Seconds 5
python esp8266_pc_monitor\monitor.py安装esptool和ampy:
pip install esptool adafruit-ampy下载MicroPython固件:
- 访问官方固件页面:https://micropython.org/download/esp8266/
- 下载最新稳定版(如
ESP8266_GENERIC-20251209-v1.27.0.bin)
# 擦除闪存(清除旧数据)
python -m esptool --port COM8 erase_flash
# 烧录固件
python -m esptool --port COM8 --baud 115200 write_flash --flash_size=detect 0 你的固件.bin注意:如果COM8被占用,请先关闭占用串口的程序(如Arduino IDE、Thonny、串口调试助手等)
等固件烧录完成后,等待3-5秒让ESP8266重启,然后上传代码:
python -m ampy.cli --port COM8 --baud 115200 put esp8266_micropython/boot.py
python -m ampy.cli --port COM8 --baud 115200 put esp8266_micropython/main.py如需替换屏幕驱动,上传对应驱动文件(如 st7789.py):
python -m ampy.cli --port COM8 --baud 115200 put esp8266_micropython/st7789.py代码上传完成后,通过以下任一方式重启:
- 方式1(推荐):运行命令
python -m esptool --port COM8 run - 方式2:按ESP8266板子上的RST复位按钮
- 方式3:断电重新连接USB
请先打开 HWiNFO,并确保:
- 进入传感器窗口(Sensors)运行
- 在设置中启用 Shared Memory Support
本项目当前为 HWiNFO-only 数据源;未启用共享内存时,
monitor.py将无法读取数据。
python esp8266_pc_monitor/monitor.py默认串口在 esp8266_pc_monitor/monitor.py 里:
SERIAL_PORT = "COM8"BAUD_RATE = 115200
如果不是 COM8,请改成你的端口(如 COM3)。
电脑端每秒发送一行 CSV 数据(10个字段):
cpu,cpu_temp,ram,gpu,gpu_temp,vram,vram_temp,pcore_mhz,fps,fan
示例:
12,55,45,10,65,30,75,125,60,15
| 字段 | 说明 | 范围 | 单位 |
|---|---|---|---|
cpu |
CPU使用率 | 0-100 | % |
cpu_temp |
CPU温度 | 0-999, -1=无数据 | °C |
ram |
内存使用率 | 0-100 | % |
gpu |
GPU使用率 | 0-100 | % |
gpu_temp |
GPU温度 | 0-999, -1=无数据 | °C |
vram |
显存使用率 | 0-100 | % |
vram_temp |
显存温度 | 0-999, -1=无数据 | °C |
pcore_mhz |
CPU P核频率 | 0-9999 | MHz |
fps |
游戏帧率 | 0-999 | FPS |
fan |
风扇转速÷100 | 0-999 | ×100 RPM |
注意:
- 温度为
-1时屏幕显示---- 风扇转速显示为实际转速÷100(如1500RPM显示为15)
- FPS和风扇数据需要HWiNFO检测到相应传感器
CPU : 045 % ← CPU使用率 45%(绿色)
CPUT: 062 C ← CPU温度 62°C(绿色)
RAM : 038 % ← 内存使用率 38%(绿色)
GPU : 075 % ← GPU使用率 75%(黄色)
GPUT: 068 C ← GPU温度 68°C(黄色)
VRAM: 055 % ← 显存使用率 55%(黄色)
VRMT: 072 C ← 显存温度 72°C(黄色)
PCOR: 5200 M ← P核频率 5200MHz(青色)
FPS : 090 F ← 帧率 90fps(绿色)
FAN : 015 R ← 风扇 1500RPM(白色)
- 🔵 蓝色:ESP8266启动中
- 🟢 绿色:数据接收和解析正常
- 🟡 黄色:超过1.5秒未收到有效数据(PC端未发送或数据格式错误)
- 🟣 品红色:数据解析失败(CSV格式错误)
- 💙 心跳闪烁:左侧小方块在青色和深灰色之间切换,表示主循环正常运行
当前 esp8266_micropython/main.py 已包含以下优化:
- 小型7段数码管:缩小至 6×10px 以容纳10行数据
- 智能局部刷新:仅重绘发生变化的数字位
- 静态单位符号:
%、C、M等单位一次绘制,不再每帧重画 - 高速SPI通信:20MHz SPI波特率提升屏幕写入速度
- 智能颜色编码:
- CPU/RAM/GPU/VRAM:绿色(<50%) → 黄色(<80%) → 红色(≥80%)
- 温度:绿色(<65°C) → 黄色(<80°C) → 红色(≥80°C)
- P核频率:青色(固定显示)
- 帧率:红色(<30) → 黄色(<60) → 绿色(≥60)
- 大值防抖动:CPU/RAM/GPU使用率突变超过40%时需要连续2帧确认
- 缓冲区管理:防止串口缓冲区溢出,自动清理过长数据
原因:ESP8266超过1.5秒未成功解析数据
排查步骤:
-
检查PC监控程序是否运行
# 终端应该持续输出:发送CSV: 12,55,45,10,65,30,75,125,60,15 python esp8266_pc_monitor/monitor.py -
检查串口是否被占用
- 关闭Arduino IDE、Thonny、串口调试助手等工具
- 如果报错
PermissionError,重新拔插USB线
-
检查main.py是否自动运行
- 按ESP8266的RST复位按钮
- 或重新执行完整烧录流程(见上方"一键执行脚本")
-
检查CSV数据格式
python test_csv.py # 测试数据格式是否正确
原因:数据解析异常(CSV格式错误或字段不匹配)
解决方法:
- 确保PC端和ESP8266端代码版本一致(都是10字段版本)
- 重新上传最新的
main.py
原因:ESP8266启动但main.py未运行
解决方法:
- 按RST复位按钮
- 重新上传boot.py和main.py
- 检查boot.py是否正确(应为空或仅包含gc.collect())
排查步骤:
- 检查供电和背光接线(VCC、GND、BLK)
- 核对SPI接线与代码中的引脚定义
- 确认屏幕驱动型号(ST7735 / ST7789)
- 测试背光:直接将BLK接到3.3V,屏幕应该亮起
排查步骤:
- 确认HWiNFO已开启共享内存:
- 打开HWiNFO → Settings → Shared Memory Support ✓
- 检查PC端输出:
- 终端持续输出
发送CSV: ...
- 终端持续输出
- 观察心跳指示灯:
- 闪烁=主循环正常,不闪烁=代码卡死需重启
- 部分数据为0:
- FPS和风扇需要HWiNFO检测到传感器
- 显存温度(VRMT)只有部分高端显卡支持
解决方法:
- 确认串口号正确(Windows设备管理器查看)
- 确认没有其他程序占用串口
- 尝试降低波特率:
--baud 9600 - 重新烧录固件后再上传代码:
# 完整重新烧录 python -m esptool --port COM8 erase_flash python -m esptool --port COM8 --baud 115200 write_flash --flash_size=detect 0 固件.bin
错误信息:PermissionError(13, '拒绝访问。')
解决方法:
- 关闭所有可能占用串口的程序
- 重新拔插USB线
- 在设备管理器中禁用再启用端口
- 重启电脑(最后手段)
仓库包含多个调试脚本:
debug_serial.py- 监听115200波特率串口,查看ESP8266输出debug_bootlog.py- 监听74880波特率,捕获ESP8266启动日志debug_mpy_log.py- 捕获MicroPython启动信息test_csv.py- 测试CSV数据格式和解析逻辑
使用示例:
# 查看ESP8266串口输出
python debug_serial.py
# 查看启动日志(连接后按RST)
python debug_bootlog.py- ❓ 串口打不开:确认端口号、驱动、关闭占用程序(Arduino IDE/Thonny)
- ❓ 屏幕不亮:检查供电与背光接线、核对DC/RST/CS引脚
- ❓ 上传后无显示:按RST重启ESP8266,运行debug_mpy_log.py查看输出
- ❓ 启动异常重启:运行debug_bootlog.py监听74880波特率启动日志
- ❓ 数据不刷新:确认HWiNFO开启共享内存,PC端持续输出CSV数据
- ❓ 黄灯常亮:PC监控程序未运行或串口被占用,检查心跳是否闪烁
esp8266_pc_monitor/esp8266_firmware/esp8266_firmware.ino 提供 Arduino 固件路线(非 MicroPython),按子目录 README 配置即可。
仓库根目录中部分脚本为调试/实验用途,主流程以:
- 设备端:
esp8266_micropython/main.py - 电脑端:
esp8266_pc_monitor/monitor.py为准。