ESP32-S3 · MQTT · IoT · HomeAssistant

Smart Fan
Controller

服务器机柜智能风扇控制系统 — 4路PWM独立调速、多传感器温度监控、Web仪表盘、Home Assistant 自动集成

ESP-IDF v5.3+ Go 1.22+ TypeScript MIT License 80×60mm PCB
⭐ GitHub 🚀 快速开始 📖 部署文档
4
路 PWM 风扇
13
固件驱动组件
11
HA 传感器实体
3
OTA 回滚阶段

功能特性

为服务器机柜而设计

从传感器采集到云端联动,覆盖风扇控制全链路。

🌡️
多源温度感知
BME280 板载(温湿度气压)+ DS18B20 远程探头(1-Wire,最多4个)+ ESP32 内部温度 + GPU/CPU(Go Agent via nvidia-smi + /proc)
🌀
4路独立风扇控制
25 kHz PWM 精准调速(Intel 4Pin 规范),PCNT 硬件脉冲计数转速反馈,停转检测(RPM<200 持续3秒告警),软启动防电流冲击。
📈
智能风扇曲线
固定查表(LUT)线性插值 + PID 自适应双模式。Kp/Ki/Kd 可配置,Anti-windup 积分饱和保护,紧急模式(超过 80°C 全速)。
⚡
电源监控与保护
12V / 5V / 3.3V 实时 ADC1 采样(100kΩ+20kΩ 安全分压)。PTC 保险丝 + 肖特基防反接 + TVS ESD 保护 + 断电保护电容。
🌐
Web 实时控制台
React + Node.js + WebSocket 2秒推送。温度仪表 · 风扇滑块 · LUT曲线可视化编辑 · PID参数 · 历史趋势图 · CSV导出 · OTA触发。
🏠
Home Assistant 集成
MQTT Discovery 自动创建 11个传感器实体 + 2路风扇控制 + 4个告警二进制传感器,无需自定义集成,兼容所有支持 MQTT Discovery 的平台。
🔄
安全 OTA 固件更新
HTTPS 下载 + TLS 证书验证 + 3阶段确认回滚(启动30s / 网络2min / MQTT5min)。MQTT 和 USB-CDC 双触发,无需物理接触设备。
🖥️
Go Linux Agent
单一二进制,systemd 自启动。nvidia-smi GPU 监控(无 GPU 优雅降级)+ /proc 系统采集(CPU/内存/磁盘/负载)。USB-CDC 双向串口中继。
🔌
SATA 直取供电
服务器 SATA 15Pin 电源接口,5V → AMS1117-3.3V LDO,12V 直供风扇(2A 走线)。自包含,无需额外电源适配器。

系统架构

全栈通信链路

ESP32-S3 固件 → MQTT Broker → Go Agent + Web APP + Home Assistant,一条总线连接所有节点。

┌──────────────────────────────── 服务器机柜 ────────────────────────────────┐
│                                                                             │
│  ┌────────────────────────────┐   USB-CDC    ┌──────────────────────────┐  │
│  │    ESP32-S3-N16R8 (固件)    │ ◄──────────► │  Go Agent (Linux)        │  │
│  │                            │              │                          │  │
│  │  4× 25kHz PWM  风扇控制     │    MQTT      │  · nvidia-smi  GPU 监控  │  │
│  │  4× PCNT  Tach 转速反馈     │ ◄──────────► │  · /proc  系统采集        │  │
│  │  BME280   温湿度气压         │              │  · systemd 服务自启动     │  │
│  │  DS18B20  远程温度探头       │              └──────────────────────────┘  │
│  │  12V/5V/3.3V 电源监控       │                                             │
│  │  WS2812B  RGB 状态 LED      │                                             │
│  └────────────────────────────┘                                             │
│              │  SATA 15Pin (12V + 5V)                                       │
└──────────────┼──────────────────────────────────────────────────────────────┘
               │ WiFi ─── MQTT Broker (Mosquitto)
               │                   │
         ┌─────┴──────┐   ┌────────┼────────┐   ┌──────────────────┐
         │  Web APP   │   │  Home  │        │   │  其他 MQTT 客户端 │
         │ React+Node │   │ Assist.│ +auto  │   │  Node-RED / 脚本  │
         └─────┬──────┘   └────────┴────────┘   └──────────────────┘
               └── WebSocket → Dashboard · Fans · Alerts · History

硬件规格

专为服务器设计的 PCB

80×60mm 双层 FR4,嘉立创可打样,SATA 供电即插即用。

模块规格备注
主控ESP32-S3-N16R816MB Flash + 8MB PSRAM,原生 USB-OTG
风扇接口4× 4Pin PWM25 kHz Intel 规范,SATA 12V 直供(2A 走线)
电平转换74AHCT1253.3V→5V PWM;Tach 5V→3.3V 分压
环境传感器BME280I2C,温度/湿度/气压,Bosch int64_t 补偿
温度探头DS18B20 ×21-Wire,CRC8 校验,最多4个并联
状态 LEDWS2812B-20203.3V 供电(逻辑兼容),RMT 驱动
供电SATA 15Pin5V→AMS1117-3.3(SOT-223);12V 直供风扇
PCB80×60mm双层 FR4,嘉立创标准工艺,Gerber 已生成

快速开始

三步启动系统

从零到运行整套系统,约30分钟(不含焊接)。

1
烧录固件 & WiFi 配网
# 编译并烧录 cd firmware && idf.py set-target esp32s3 && idf.py build idf.py -p /dev/ttyACM0 flash monitor # 长按配网键 3s → 连 FanCtrl-XXXX → 192.168.4.1 完成配网
2
部署 Go Agent(服务器)
cd agent && make build sudo bash install.sh sudo nano /etc/smart-fan-agent/config.yaml sudo systemctl start smart-fan-agent
3
Web 控制台
cd web/backend && npm install && npm start cd web/frontend && npm install && npm run dev # → http://localhost:5173

技术栈

使用的开源技术

🔴 ESP-IDF v5.3🔵 Go 1.22 🟦 TypeScript 5⚛️ React 18 🟩 Node.js 20📊 Recharts 🔌 paho.mqtt.golang📡 Mosquitto 🏠 Home Assistant⚡ Vite ✅ Zod🛡️ Unity