因为之前搭建好了服务器,但是长时间运行还是会导致温度升高,所以就加了个风扇,但是因为直接供的电所以开机后风扇便一直在工作,也有噪音,所以想着就是通过开发板上集成的 Arduino Leonardo 来控制风扇停转,当温度超过设定温度后再开启风扇降温,低于设定温度便不工作,哈哈,还能省点电。。
本教程主要是通过python脚本获取cpu温度数据然后对获取的数据进行判断,并将判断结果通过串口的方式发送至
Arduino Leonardo来控制风扇的电机运行状态,那么接下来,就贴上代码等相关资料吧!
首先是python脚本,主要是读取系统文件获取温度,并将温度与设定值进行判断,读取间隔为3分钟每次,并通过串口发送控制命令,代码如下:
def read_temp():
with open('/sys/class/hwmon/hwmon3/temp2_input', 'rt') as f:
temp = int(f.read()) / 1000
return temp
def clear_screen():
os.system('cls' if os.name == 'nt' else 'clear')
class Switch(object):
def off(self):
send('c') #close
return
def on(self):
send('o') #open
return
switch = Switch()
def main():
t_limit = 47
#每3分钟检测一次
t_times = 100 #循环100次
t_k = 1.8 #每次循环1.8秒间隔
while True:
bar = Bar('Temperature Processing', max=100, fill='#', suffix='%(percent)d%%')
t = read_temp()
print '\n\nPress Ctrl + C to Quit!\n'
print '\rTemperature: %s°C' %t
if t <= t_limit:
print '\nSTATE - OFF\n'
switch.off()
elif t >= t_limit:
print '\nSTATE - ON\n'
switch.on()
#print "Start : %s" % time.ctime()
for i in range(t_times): #进度条
time.sleep(t_k)
bar.next()
bar.finish()
print "Start : %s" % time.ctime()
clear_screen()
except Exception as e:
print e
sys.exit(0)
if __name__== '__main__':
#清空屏幕
clear_screen()
main()
然后是
Arduino Leonardo
需要烧录的程序,当然换成其他型号的 Arduino 也可以,因为引脚本身输出电平驱动不了风扇,所以程序里的信号引脚控制的是继电器,继而控制风扇,代码如下:
* fan
int fan_pin = A2;
char rev;
void setup()
Serial.begin(9600);
pinMode(fan_pin, OUTPUT);
delay(1000);
void loop()
if(Serial.available() > 0)
rev = Serial.read();
//Serial.println(rev);
if(rev)
if(rev == 'o')
fan_on();
}else if(rev == 'c')
fan_off();
void fan_on(){digitalWrite(fan_pin, HIGH);}
void fan_off(){digitalWrite(fan_pin, LOW);}
此外,因为作为服务器的话,开机肯定还要开启一些网络服务,所以将温度检测也一并写入脚本中了,好了,服务器就算搭建完了吧,之后有时间就写点东西,如果服务器连不上,肯定是我家网不好了。。。
欢迎交流,企鹅:2211350991
站点统计
-
建站日期: 2019-2-4 20:20
-
运行时间: 2065 天
-
响应时间: 14.80 ms
-
日志总数: 295 篇
-
评论数量: 4 条
-
微语数量: 104 条
-
分类总量: 15 个
-
用户数量: 1 人
-
最后发表: 2024-3-9 12:27