PWM Fan Driver + Web Monitor
为 OEC-Turbo (RK3566) 适配的 4 线 PWM 风扇驱动:CPU / 硬盘双温度自适应、Web 面板,现提供飞牛 fnOS 应用包。
下载
- 网盘目录:pan.runyf.cn/downloads/pwnfan(应用包、脚本、历史版本)
- 非飞牛系统:
curl -fL https://dl.runyf.cn/pwnfan/install.sh | sudo bash
硬件接线
| 风扇线 | 颜色 | 接法 |
|---|---|---|
| GND | 黑 | 外部 12V 电源 GND |
| 12V | 黄/红 | 外部 12V 电源正极 |
| TACH | 绿/黄 | TX(转速读取) |
| PWM | 蓝 | RX(控制信号) |

飞牛 fnOS 安装(推荐)
- 下载上面的
pwm-fan-1.9.0-arm64.fpk; - 飞牛「应用中心 → 手动安装」上传,安装完成后桌面出现「PWM 风扇控制」;
- 点桌面图标打开面板。应用通过飞牛统一网关访问(
/app/pwm-fan),由飞牛校验登录态后转发到应用内的 Unix socket,不监听 8081 端口,局域网无法直连。
应用不开放独立端口:面板通过飞牛统一网关
/app/pwm-fan 访问,由飞牛校验登录态后转发;局域网直接访问 设备IP:8081 不可用。
从旧脚本迁移:先清理旧服务(点击展开)
如果之前用一键脚本装过(/opt/pwm-fan + systemd),请先清理,否则会抢 GPIO 和端口:
sudo systemctl disable --now pwm-fan pwm-fan-web
sudo rm -f /etc/systemd/system/pwm-fan.service /etc/systemd/system/pwm-fan-web.service
sudo systemctl daemon-reload
sudo rm -rf /opt/pwm-fan功能
- CPU + 硬盘双温度自适应:硬盘工作时 CPU / 硬盘两路取较高档位;硬盘休眠时只用 CPU 温度,且探测过程不会唤醒硬盘
- 实时曲线:首页显示最近 10 分钟的 CPU / 硬盘温度,以及占空比、转速
- 曲线编辑:温度曲线可在坐标轴上直接拖动控制点,支持一键恢复默认
- 手动模式:0~100% 滑杆 + 快捷档位(仅 Manual 模式显示)
- GPIO 可配置:PWM / TACH 的 gpiochip 与引脚都能改,默认适配 OEC(gpiochip0 / pin24 / TACH pin25)
界面预览


温度策略与默认曲线
| 曲线 | 默认控制点 |
|---|---|
| CPU | 42°C → 0%;50°C → 30%;60°C → 65%;70°C → 100% |
| 硬盘 | 40°C → 0%;45°C → 25%;50°C → 60%;55°C → 100% |
依据:RK3566 的 Tj 上限约 85°C,70°C 全速留出余量;机械硬盘建议长期不超过 50°C;4 线风扇的启动占空比通常需要 20~30%,所以第一段非零点给到 30%。
非飞牛系统(Armbian 等)
# root 机器
curl -fL https://dl.runyf.cn/pwnfan/install.sh | sudo bash
# 手动部署后访问
http://设备IP:8081配置入口
- 温度设置(面板右上角):曲线编辑、CPU 回差
- 高级设置(⚙):GPIO 引脚
- 配置保存在
/etc/pwm-fan.json,温度曲线保存后立即生效;GPIO 修改需重启应用
注意事项
GPIO 占用:pin24 在部分固件下与 UART2 复用。飞牛 OEC 镜像实测可以共存,不要只看内核参数里的
console=ttyS2;只有报 GPIO 被占用(EBUSY)时才需要排查旧服务或串口。
应用以 root 权限运行,直接读写 GPIO 与温度传感器。本项目为第三方社区封装(GPL-3.0),与网心云及飞牛官方无关。
更新记录
版本更新
1.9.0
改用飞牛统一网关,不再监听 8081 端口;更换应用图标
1.8.x
实时温度/风扇曲线、曲线拖动编辑、手动控制仅在 Manual 显示、设置拆分为「温度设置 / 高级设置」
1.7.0
CPU + 硬盘双温度自适应,硬盘休眠时不读盘、不唤醒
7 条评论
我fork了这个项目,DSM7的gpio0 pin25被内核锁定了,不能进行PWM调速只能读取转速
我搞不懂 就前几分钟github账号被封了 还没找到怎么申诉
wc怎么被封了
不知道 莫名其妙的 你遇到的问题应该是gpio被占用了 建议让ai看看怎么回事
我fork了你的项目改好了,只能通过RX引脚来读取风扇转速,问AI回答是DTB里面定义了gpio0 pin24和pin25被串口占用了,需要修改DTB解除占用,不过我没验证到,机器我拿来做NVR的不能关那么久
能不能加这几个设置选项在下面,CPU 开启温度,CPU 关闭温度,硬盘开启温度
可以