Raspberry Pi添加电源按钮

为什么需要Raspberry Pi电源按钮
使用Raspberry Pi非常简单但是打开电源并关闭电源可能会导致问题。

第一次将Raspberry Pi拆箱时,缺少电源按钮的现象很明显。毕竟,从台式机和平板电脑到无线鼠标的每台设备都具有电源按钮或开关。相反,Raspberry Pi则没有。
相反,您需要连接USB电源线,然后等待其启动所选的Raspberry Pi兼容操作系统(OS)。上电足够简单,但是完全关闭则是另一回事。答案是使用键入的命令或单击鼠标以关闭Pi,但这并不总是理想的。
安全掉电的重要性
如果Raspberry Pi崩溃,或者您无法远程或通过键盘,鼠标和显示器访问它,然后突然关闭就成了问题。唯一的解决方案是拔掉电源线。
但是,这可能会导致问题。
如果在拔掉电源时将数据写入SD卡,则该卡可以被破坏。其结果通常是无法启动的操作系统。尽管大多数现代SD卡都足够强大,可以处理纠错,但是可能需要刷新新的操作系统。
这也可能意味着丢失大量数据。当然,如果您一直在使用Pi进行特定项目,或者使用它来学习Scratch编码,那么您可能不想丢掉您的工作。
拔下电源线并破坏电源卡将执行此操作。克隆SD卡是克服此类数据丢失的好方法,但预防总比治愈好。
安全关闭Raspberry Pi的电源将使OS能够完成对SD卡的活动写入过程。这样计算机就可以关闭,而不会丢失数据和SD卡损坏的风险。
如何为树莓派添加电源按钮
注意:给树莓派添加电源按钮方式很多,可以自行查找方法。如下提供参考
所需物品
树莓派 × 1个
烙铁 × 1个
轻触开关 × 1个
焊锡丝 × 1个
点动(复位,非自锁)开关 × 1个
面包板 × 1个 (线缆若干)
唤醒功能
在做之前,我们了解如何将Pi从暂停状态唤醒。简而言之,将引脚5和6(GPIO3和GND)短接会使Pi从暂停状态唤醒。
一种简单的测试方法是立即使用sudo shutdown -h关闭Pi ,并使用母对母电缆连接引脚5和6。您只需要暂时将它们短路即可。然后,你应该发现Pi是“awake”唤醒。
睡眠功能
选项1:使用安装脚本(最简单)
安装所需脚本的最简单方法是克隆我们的电源按钮存储库,然后运行安装脚本。
SSH到您的Pi中,安装git(如果尚未安装),然后运行:
git clone https://github.com/Howchoo/pi-power-button.git
./pi-power-button/script/install
如果您想了解这些脚本如何工作,请阅读下一节。
选项2:手动安装
唤醒解决方案相当简单,但是为了安全地关闭Pi,我们将不得不使用软件解决方案。因为我们知道我们将使用引脚5和6唤醒Pi,所以我们也使用这些引脚将其关闭。这样,我们可以将按钮连接到这些引脚,它将关闭并唤醒Pi。
我们必须编写一个脚本来监听按钮按下并关闭Pi。在看脚本之前,让我们讨论几种不同的方法。首先,我们可以编写一个脚本来启动无限循环,并等待GPIO引脚状态的改变。使用的代码,可能类似于:
while True:
if GPIO3 is pressed:
shutdown the pi
尽管这可行,并且可能没有任何实际的性能问题,但实际上有更好的方法。我们可以监听中断(边缘检测)。中断是指状态从LOW变为HIGH或从HIGH变为LOW。RPi.GPIO库提供了一种名为wait_for_edge的方法,该方法将阻止执行脚本,直到检测到中断为止。因此,我们将设置GPIO3,一旦我们检测到FALLING沿,就将关闭Pi。
首先,我们需要通过SSH连接到Pi。然后,我们将使用一个名为listen-for-shutdown.py的脚本。
要创建脚本,我们可以使用nano编辑器。连接到您的Pi之后,运行以下命令创建一个名为listen-for-shutdown.py的文件:
sudo nano listen-for-shutdown.py
然后,将以下代码粘贴到该文件中,并在出现提示时按CTRL-X退出,并按Y保存。
#!/usr/bin/env python
import RPi.GPIO as GPIO
import subprocess
GPIO.setmode(GPIO.BCM)
GPIO.setup(3, GPIO.IN, pull_up_down=GPIO.PUD_UP)
GPIO.wait_for_edge(3, GPIO.FALLING)
subprocess.call(['shutdown', '-h', 'now'], shell=False)
接下来,我们需要在启动时启动此脚本。因此,我们将脚本放在/ usr / local / bin中并使其可执行:
sudo mv listen-for-shutdown.py /usr/local/bin/
sudo chmod +x /usr/local/bin/listen-for-shutdown.py
现在添加另一个名为listen-for-shutdown.sh的脚本,它将启动/停止我们的服务。要创建脚本:
sudo nano listen-for-shutdown.sh
在该文件中输入以下代码并保存:
#! /bin/sh
### BEGIN INIT INFO
# Provides: listen-for-shutdown.py
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
# If you want a command to always run, put it here
# Carry out specific functions when asked to by the system
case "$1" in
start)
echo "Starting listen-for-shutdown.py"
/usr/local/bin/listen-for-shutdown.py &
;;
stop)
echo "Stopping listen-for-shutdown.py"
pkill -f /usr/local/bin/listen-for-shutdown.py
;;
*)
echo "Usage: /etc/init.d/listen-for-shutdown.sh {start|stop}"
exit 1
;;
esac
exit 0
将此文件放在/etc/init.d中,使其可执行。
sudo mv listen-for-shutdown.sh /etc/init.d/
sudo chmod +x /etc/init.d/listen-for-shutdown.sh
现在,我们将注册脚本以在启动时运行。
sudo update-rc.d listen-for-shutdown.sh defaults
由于脚本不会运行,因此我们将继续进行以下操作:
sudo /etc/init.d/listen-for-shutdown.sh start
注意:这些脚本已添加到Github存储库中,以使其更易于下拉。随时提交具有改进的请求请求。
使用面包板测试按钮
我们要做的第一件事是连接一个按钮并使用面包板测试功能。这是一个非常简单的电路,但是最好在继续之前确保它能正常工作。
您可以查看下面的图像以获取详细信息,但我将解释发生了什么。我正在使用两根公对母跳线。我将一个连接到引脚5(SCL),将另一个连接到引脚6(接地)。如果引脚6已被其他功能占用,则可以改用其他任何接地引脚。 这是识别所有GPIO的好资源!如图
然后,我将它们连接到面包板上,并且之间使用一个按钮。由于按钮通常是打开的,因此电路将一直打开直到按下按钮。然后,当电路完成时,如果它处于暂停状态,它将唤醒Pi,或者如果它处于唤醒状态,它将关闭它。
为了确认它是否正常工作,我将通过SSH登录到Pi。
ssh pi@raspberrypi
然后,当我按下按钮时,我确认我丢失了会话。为了更进一步,我可以使用arp-scan确认Pi上的网络已关闭。
sudo arp-scan --interface=en0 --localnet
在本指南中,我不会详细介绍如何使用arp-scan,但是如果您使用正确的界面,则应该可以使用。
您可以检查arp-scan的输出,并确保Raspberry Pi未连接到网络。
然后继续按下按钮再次将其唤醒。如果等待几秒钟,则应该备份Pi。您可以使用arp-scan命令再次进行测试。如果树莓派启动,您将看到类似以下的输出:
192.168.1.254 20:3d:66:44:c6:70 (Unknown)
192.168.1.181 b8:27:eb:79:49:f2 Raspberry Pi Foundation
192.168.1.251 58:82:a8:7e:66:36 (Unknown)
现在,您可以通过SSH重新连接!
现在是时候连接该项目要使用的按钮了。我将仍然使用跳线,以便可以轻松地从Pi上卸下按钮。但我将剥去另一端并将其焊接到按钮上。
卸载脚本
如果要卸载和删除电源按钮功能(例如,将GPIO3用于其他用途),只需删除所有文件并删除关机监听器即可。
如果编写了脚本来为您执行此操作:
git clone https://github.com/Howchoo/pi-power-button.git
./pi-power-button/script/uninstall
请先
!