• 微信公众号:美女很有趣。 工作之余,放松一下,关注即送10G+美女照片!

华硕路由器AC86u,加装树莓派zero温控

开发技术 开发技术 3周前 (05-14) 10次浏览
1、前记,AC86U 梅林系统 提供强大的功能的同时,发热也是很厉害的。加装的5V风扇,声音呼呼的,放在电视柜上感觉很吵,手头有个树莓派zero,遂想到用树莓派来做个温控风扇,同时也能提供一个低电压的电源给风扇。
  应该刚开始对梅林系统 不太了解,第一版勾想用selenium 无ui执行抓取页面的温度数据来达到目的。但是路由器只能有一个账号单点登陆,这个方法太过笨拙。思考一下页面有温度显示,那么系统里可能有一个临时文件或者日志来存储这个温度数据,经过研究终于在/sys/devices/virtual/thermal/thermal_zone0/temp 找到到了温度的数据。既然有原始数据了,那就好办了:
  1)树莓派捞取原始数据
   2)通过python控制GPIO
  这样就可以了。具体实现看下面的步骤….
2、因为原temp文件权限限制无法直接分享,所有编写shell脚本wd.sh读取temp温度文件,并重写到挂载的usb里面,设置10秒一次,方便其他设备使用。
 
while true;
	do
	for wd in `cat /sys/devices/virtual/thermal/thermal_zone0/temp`
		do
		echo $wd > /tmp/mnt/sda1/temp
		sleep 10	
		done
	done

  

nohup ./tmp/home/root/wd.sh &  # 后台运行wd.sh

 

3、在树莓派zero中挂载路由器smb文件夹,并且加入到开机启动中: 命令写到 /etc/rc.local
sudo mount -t cifs //10.1.1.1/sda1 /home/ac86_smb -o username=**,password=**@123,vers=1.0
 
4、编写python脚本控制gpio输出,gpio输出的电压虽然是3.3v,但是直接接风扇,风扇转不起来,可能是电流太小,所以加了一个两组3.3v触发的继电器,使用zero的3.3v针脚通过继电器常来给电。python脚本通过gpio控制继电器是否触发。
风扇3.3v供电,比usb的5v静音很多
# -*- coding: utf-8 -*-
from loguru import logger as do_log
import time,os,random
import RPi.GPIO as GPIO
base_dir = os.path.split(os.path.split(os.path.abspath(__file__))[0])[0]
LOG_FILE_PATH = os.path.join(os.path.join(os.path.join(base_dir,"pi"),"logs"),"all.log")

do_log.add(LOG_FILE_PATH,format="{time}|{level}|{message}",rotation="1 week")

GPIO.setmode(GPIO.BOARD)
GPIO.cleanup()
IN1 = 11
IN2 = 12
GPIO.setup(IN1, GPIO.OUT)
GPIO.setup(IN2, GPIO.OUT)
num = random.randint(11, 12)

while True:
with open('/home/ac86_smb/temp',"r",encoding="utf-8") as f:
wd =f.read()
if len(wd)==0:
continue
else:
wd = int(wd)/1000

if wd >70:
do_log.info(f"CPU {wd}°C , open the two fan")
GPIO.output(IN1, GPIO.HIGH)
GPIO.output(IN2, GPIO.HIGH)
do_log.info(f"CPU温度{wd}°C , keep two fan runing")
time.sleep(300)

if wd >= 55 and wd <=70:
if num == 11:
do_log.info(f"CPU {wd}°C, open the one fan of 1#")
GPIO.output(IN1, GPIO.HIGH)
GPIO.output(IN2, GPIO.LOW)
do_log.info(f"CPU温度{wd}°C , keep one fan runing")
else:
do_log.info(f"CPU {wd}°C, open the one fan of 2#")
GPIO.output(IN2, GPIO.HIGH)
GPIO.output(IN1, GPIO.LOW)
do_log.info(f"CPU温度{wd}°C , keep one fan runing")
time.sleep(300)

elif wd < 55:
do_log.info(f"CPU温度{wd}°C , keep runing 5 min")
time.sleep(300)
do_log.info(f"CPU温度{wd}°C , close the fan")
GPIO.output(IN1, GPIO.LOW)
GPIO.output(IN2, GPIO.LOW)
# 温度降到55左右就降不下去了,所以小于55,就关闭风扇,等待10分钟再执行
time.sleep(600)
# 更换风扇运行
if num == 11:
num =12
else:
num = 11
time.sleep(5)
GPIO.cleanup()

 

 
华硕路由器AC86u,加装树莓派zero温控
5、再写一个进程守护的shell脚本开机启动,保证python脚本始终后台运行。
while true;
do
        server=`ps aux | grep python3| grep -v wd.py`
        if [ ! "$server" ]; then
           ./home/chick_wd/run.sh
        fi
        sleep 5
done

 

 


程序员灯塔
转载请注明原文链接:华硕路由器AC86u,加装树莓派zero温控
喜欢 (0)