Skip to content

Repository files navigation

ESP8266 电脑性能副屏项目

基于 ESP8266 + MicroPython + SPI TFT 屏幕 的电脑性能监控副屏。

电脑端脚本通过 HWiNFO 共享内存 读取系统数据,通过串口发送给 ESP8266;ESP8266 在屏幕上实时渲染数值。

部署约束(重要)

  • 只要涉及上传 esp8266_micropython/main.py,必须执行“擦除 + 重烧固件 + 重新上传脚本”的完整流程。
  • 具体强制规范以项目根目录 AGENT.md 为准。

功能概览

  • 10项实时监控CPU使用率CPU温度RAMGPU使用率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 数据线

推荐接线(NodeMCU -> TFT)

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

快速开始(推荐:MicroPython 方案)

完整部署流程(一键复制执行)

步骤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

一键执行脚本(PowerShell)

# 设置变量(请根据实际情况修改)
$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

详细说明

1) 下载并安装依赖工具

1) 下载并安装依赖工具

安装esptool和ampy:

pip install esptool adafruit-ampy

下载MicroPython固件:

2) 刷写MicroPython固件(首次或更新固件时执行)

# 擦除闪存(清除旧数据)
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) 上传设备端代码

等固件烧录完成后,等待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

4) 硬件重启ESP8266

代码上传完成后,通过以下任一方式重启:

  • 方式1(推荐):运行命令 python -m esptool --port COM8 run
  • 方式2:按ESP8266板子上的RST复位按钮
  • 方式3:断电重新连接USB

5) 启动HWiNFO(必须)

请先打开 HWiNFO,并确保:

  • 进入传感器窗口(Sensors)运行
  • 在设置中启用 Shared Memory Support

本项目当前为 HWiNFO-only 数据源;未启用共享内存时,monitor.py 将无法读取数据。

4) 启动电脑端监控

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检测到相应传感器

屏幕显示示例(128×128像素,10行数据)

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格式错误)
  • 💙 心跳闪烁:左侧小方块在青色和深灰色之间切换,表示主循环正常运行

设备端渲染与性能优化(main.py)

当前 esp8266_micropython/main.py 已包含以下优化:

  • 小型7段数码管:缩小至 6×10px 以容纳10行数据
  • 智能局部刷新:仅重绘发生变化的数字位
  • 静态单位符号%CM等单位一次绘制,不再每帧重画
  • 高速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秒未成功解析数据

排查步骤

  1. 检查PC监控程序是否运行

    # 终端应该持续输出:发送CSV: 12,55,45,10,65,30,75,125,60,15
    python esp8266_pc_monitor/monitor.py
  2. 检查串口是否被占用

    • 关闭Arduino IDE、Thonny、串口调试助手等工具
    • 如果报错 PermissionError,重新拔插USB线
  3. 检查main.py是否自动运行

    • 按ESP8266的RST复位按钮
    • 或重新执行完整烧录流程(见上方"一键执行脚本")
  4. 检查CSV数据格式

    python test_csv.py  # 测试数据格式是否正确

品红色指示灯闪烁

原因:数据解析异常(CSV格式错误或字段不匹配)

解决方法

  • 确保PC端和ESP8266端代码版本一致(都是10字段版本)
  • 重新上传最新的 main.py

蓝色指示灯常亮

原因:ESP8266启动但main.py未运行

解决方法

  • 按RST复位按钮
  • 重新上传boot.py和main.py
  • 检查boot.py是否正确(应为空或仅包含gc.collect())

屏幕不亮或显示异常

排查步骤

  1. 检查供电和背光接线(VCC、GND、BLK)
  2. 核对SPI接线与代码中的引脚定义
  3. 确认屏幕驱动型号(ST7735 / ST7789)
  4. 测试背光:直接将BLK接到3.3V,屏幕应该亮起

数据不刷新 / 显示为0或---

排查步骤

  1. 确认HWiNFO已开启共享内存
    • 打开HWiNFO → Settings → Shared Memory Support ✓
  2. 检查PC端输出
    • 终端持续输出 发送CSV: ...
  3. 观察心跳指示灯
    • 闪烁=主循环正常,不闪烁=代码卡死需重启
  4. 部分数据为0
    • FPS和风扇需要HWiNFO检测到传感器
    • 显存温度(VRMT)只有部分高端显卡支持

上传代码失败

解决方法

  1. 确认串口号正确(Windows设备管理器查看)
  2. 确认没有其他程序占用串口
  3. 尝试降低波特率:--baud 9600
  4. 重新烧录固件后再上传代码:
    # 完整重新烧录
    python -m esptool --port COM8 erase_flash
    python -m esptool --port COM8 --baud 115200 write_flash --flash_size=detect 0 固件.bin

串口权限错误(Windows)

错误信息PermissionError(13, '拒绝访问。')

解决方法

  1. 关闭所有可能占用串口的程序
  2. 重新拔插USB线
  3. 在设备管理器中禁用再启用端口
  4. 重启电脑(最后手段)

调试工具

仓库包含多个调试脚本:

  • 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 为准。

About

No description, website, or topics provided.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages