OES Plus 风扇控制脚本 (GPIO Fan Control)
硬件信息
- 设备:OES Plus
- 系统:Armbian (ophub)
- 风扇:GPIO 557 控制,开关型(无 PWM 调速)
问题
刷 Armbian 后风扇不转,内核 gpio-fan 驱动加载后 GPIO 能拉高,
但风扇实际不转。需要卸载内核驱动后直接控制 GPIO 才生效。
来自https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8474045&highlight=oes
脚本
#!/bin/bash
GPIO=557
HIGH_TEMP=50
LOW_TEMP=40
INTERVAL=5
sudo rmmod gpio_fan 2>/dev/null
if [ ! -d /sys/class/gpio/gpio$GPIO ]; then
echo $GPIO | sudo tee /sys/class/gpio/export
fi
echo out | sudo tee /sys/class/gpio/gpio$GPIO/direction
FAN_STATE=0
get_temp() {
awk '{print $1/1000}' /sys/class/thermal/thermal_zone0/temp
}
echo "Fan control started (HIGH=${HIGH_TEMP}°C LOW=${LOW_TEMP}°C)"
while true; do
TEMP=$(get_temp)
printf "[%s] TEMP=%.1f°C FAN=%s\n" \
"$(date +%H:%M:%S)" "$TEMP" \
"$([ $FAN_STATE -eq 1 ] && echo ON || echo OFF)"
if (( $(echo "$TEMP >= $HIGH_TEMP" | bc -l) )); then
if [ "$FAN_STATE" -eq 0 ]; then
echo 1 | sudo tee /sys/class/gpio/gpio$GPIO/value > /dev/null
FAN_STATE=1
echo ">>> FAN ON"
fi
elif (( $(echo "$TEMP <= $LOW_TEMP" | bc -l) )); then
if [ "$FAN_STATE" -eq 1 ]; then
echo 0 | sudo tee /sys/class/gpio/gpio$GPIO/value > /dev/null
FAN_STATE=0
echo ">>> FAN OFF"
fi
fi
sleep $INTERVAL
done
开机自启
sudo cp fan-control.sh /usr/local/bin/fan-control.sh
sudo chmod +x /usr/local/bin/fan-control.sh
sudo tee /etc/systemd/system/fan-control.service << 'EOF'
[Unit]
Description=OES Plus GPIO fan control
After=multi-user.target
[Service]
Type=simple
ExecStart=/usr/local/bin/fan-control.sh
Restart=always
[Install]
WantedBy=multi-user.target
EOF
sudo systemctl daemon-reload
sudo systemctl enable fan-control.service
温度效果
OES Plus 风扇控制脚本 (GPIO Fan Control)
硬件信息
问题
刷 Armbian 后风扇不转,内核
gpio-fan驱动加载后 GPIO 能拉高,但风扇实际不转。需要卸载内核驱动后直接控制 GPIO 才生效。
来自https://www.right.com.cn/forum/forum.php?mod=viewthread&tid=8474045&highlight=oes
脚本
开机自启
温度效果