为树莓派打造一个安全关机的功能,不需要命令行,不需要额外电路板!

在刚刚拿到树莓派的调试期,最难以忍受的就是各种“tmd怎么又连不上了” “诶这系统有问题” 这些乱七八糟的问题了,如果有显示器还好,如果没有显示器,然后诸如ssh连接之类的东西又不能正常运行,这可怎么好好的sudo halt啊。。。

博主便是如上这些悲惨经历的受害者,因为整天拔电关机导致存储卡会经常出现一些莫名其妙的问题,简直是崩溃的

于是我便上网搜索除命令行之外的关机方式,找到了诸如“关机按键”的方案,感觉很巧妙 但是我并不想让我的树莓派时时刻刻都接着面包板和电线 于是。。。

为什么不用跳线板呢????

好了说正经的,其实我们可以找一个贴近GND的IO口(如GPIO 7 对应BCM码为4)然后给这个io口声明一个下降沿中断,在中断中执行关机命令 然后将这个脚本设置为开机自启就可以啦!

以下是我编辑的代码

#!/usr/bin/python
import RPi.GPIO as GPIO
from os import system
def fun(arg):
	GPIO.cleanup()
	print(arg)
	system('sudo halt')
	print('success')

GPIO_PIN=4
GPIO.setmode(GPIO.BCM)
GPIO.setup(GPIO_PIN,GPIO.IN,pull_up_down=GPIO.PUD_UP)
GPIO.add_event_detect(GPIO_PIN,GPIO.FALLING,bouncetime=2000,callback=fun)
while True:
	pass
  • bouncetime相当于按钮的防抖 单位为ms 因为我们是直接短接gnd 所以根本没有抖的一说 所以将此参数设置为2000防止一不小心碰到就关机

###将脚本设置为开机自启
虽然说脚本已经写好了 但是我们需要将这个脚本设置为开机自启
开机自启对于新手而言最粗暴的方法就是sudo nano /etc/rc.local 啦
首先我们需要给予文件可执行权限

chmod 777 xxx.py

我们在该文件的exit 0 之前添加这么一句:

sudo nohup /xxx/xxx/xxx/xxx/xxx.py &
  • 因为该python脚本为后台脚本 需要持续执行 所以用nohup为其创建后台进程。&的意义为保留该进程并继续之后的命令

将路径和文件名改好 重启试一下“短接板关机法吧!”


2019年3月27日11:00:15分割线
经过后来的折腾和了解,其实树莓派3B本身就带有这个功能(汗颜。。) 在板子的网口旁边找到Run的端子 将它接地的话就可以复位的了!

猜你喜欢

转载自blog.csdn.net/wmdscjhdpy/article/details/76999060