这篇文章来源于DevicePlus.com英语网站的翻译稿。
在本教程中,我们将使用一块适用于Raspberry Pi Model B+的看门狗板。没错,这是一个可以安装在Raspberry Pi上的看门狗板!
看门狗 – 维基百科
看门狗是一种保护系统免受可能导致系统停止响应的软件或硬件故障影响的设备。首先,我们将应用程序在看门狗设备上登记。看门狗在系统上运行后,该应用程序必须定期向看门狗设备发送信息。如果看门狗设备在指定的时间内没有收到此信号,就会执行适当的行动以重启机器或重新启动应用程序。
看门狗是一种监视系统是否正常运行的功能。
这次所用的Raspberry Pi Model B+看门狗板有一个内置程序,能够提前监控GPIO,因此安装非常容易。
用于Raspberry Pi Model B+的看门狗板
图 1
用于Raspberry Pi Model B+的看门狗定时器板
该IC具有内置倒计时器负责监视Raspberry Pi的GPIO。Raspberry Pi上的软件以固定间隔向GPIO发送脉冲信号,以重置IC中的定时器。
如果Raspberry Pi发生错误,没有发送脉冲信号,看门狗上的倒计时器不会复位。然后,电路板上的IC将停止为Raspberry Pi供电并重启供电,以重新启动Raspberry Pi。
我们就是使用该看门狗板。虽然我写的是“Raspberry Pi Model B +”,但是该板也适用于Raspberry Pi Model A+以及Raspberry Pi 2 Model B。在本教程中,我们使用的是Raspberry Pi 2 Model B。
如何使用Raspberry看门狗定时器这篇文章(日语)描述了今天所用的看门狗板的详细信息。下文中的很多内容都会参考此文章。
设置看门狗板
图 2
与Sense HAT一样,将看门狗插入Raspberry Pi的GPIO引脚即可。如果您想要固定电路板,让连接更牢固,请使用Raspberry Pi螺丝和垫片,没有问题。
图 3
如图3所示,请用DC插头将电源连至看门狗板。该DC连接器将为看门狗和Raspberry Pi主体供电。
以下两点可能会令人困惑,所以我们事先澄清一下 ……
1. 请用看门狗板上的DC插头提供5V电源。
就像如何使用Raspberry看门狗定时器中描述的那样,应使用看门狗板上的DC插头进行供电。这与用GPIO引脚为Sense HAT供电不同。
2. 切勿使用Raspberry Pi自身的电源
电源由看门狗的的DC插头提供,不能用Raspberry Pi主机的电源(microUSB)供电。使用其他电源无法重启Raspberry Pi,即使看门狗运行正常。
我费了一番苦功——多次变换电源——才搞清楚这个状况!
图 4
检查运行情况时,LED状态指示灯应亮起。默认情况下,为了节能,LED是熄灭的,但是短接LED开/关跳线后LED会点亮。我用的短接跳针,图片用的是短接跳线。
LED的点亮遵循以下三种状态。如果只是看到数值(秒)描述,我们可能很难想象相应的效果,但是当LED闪烁时您会注意到明显的差异。
每种状态下的LED点亮情况:
状态为 WD_DEFAULT 时,状态 LED 每 2.56 秒闪烁一次
状态为 WD_Active 时,状态 LED 每 0.32 秒闪烁一次
状态为 WD_ReBoot 时,状态 LED 每 0.08 秒闪烁一次
看门狗简介
对于本教程,我们将使用Raspberry Pi 2 Model B和带有PIXEL的Raspbian Jessie(2016.11.25发布)。
sudo apt-get update
sudo apt-get upgrade
将Raspbian写入SD卡后,像往常一样运行上述命令。
图5.看门狗程序状态转换 /©SwitchScience
看门狗的运行情况如图5所示。只是开启电源并不会启动看门狗。默认状态“状态LED每2.56秒闪烁一次”继续。有关如何激活看门狗的详细信息,请参考如何使用Raspberry看门狗定时器(日语)。相关内容位于页面底部。
要配置Raspberry Pi,我们需要运行这样一个程序:准备好启动后,为监控端口(默认为GPIO 17)自动生成一个脉冲信号。
这非常重要。执行此功能的源程序如下所示:
Raspberry Pi示例程序(Python) – 日语
该程序“每秒向GPIO 17输出一次脉冲”。
为了与看门狗板对接,我们应自动启动一个向该GPIO提供脉冲的程序。这样做,即使Raspberry Pi重新启动,您也可以自动继续使用看门狗功能。
让我们用这个程序启动看门狗!
sudo nano blink17.py
#!/usr/bin/env python import RPi.GPIO as GPIO import time LEDPIN = 17 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(LEDPIN, GPIO.OUT) while True: LEDon = GPIO.output(LEDPIN, 0) time.sleep(0.5) LEDoff = GPIO.output(LEDPIN, 1) time.sleep(0.5)
首先,将程序保存在一个文件夹中,然后用以下命令执行。
python blink17.py
由于看门狗在检测到5个脉冲时启动,因此在此程序中,执行5秒后,状态LED每0.32秒闪烁一次。之后,如果超过5秒没有脉冲,状态LED会变为每0.08秒闪烁一次,且重启自动执行。(在视频中,该过程通过[Ctrl]+[C]强行终止)。
自动重启测试
将看门狗程序设置为开机运行非常方便,因为程序即使在自动重启后也能运行!
我们调整程序进行测试,处理时间仅设为30秒(因为如果这个时间太短,很难释放cron,建议至少30)。
sudo nano blink17_30sec.py #!/usr/bin/env python import RPi.GPIO as GPIO import time LEDPIN = 17 SEC = 0 GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) GPIO.setup(LEDPIN, GPIO.OUT) while SEC < 30: LEDon = GPIO.output(LEDPIN, 0) time.sleep(0.5) LEDoff = GPIO.output(LEDPIN, 1) time.sleep(0.5) SEC = SEC + 1 print SEC
接下来,在授予执行权限后将其登记到cron。
sudo chmod 755 blink17_30sec.py
crontab -e
因为我们想在“启动”时执行它,所以我们应指定“@reboot”。我在最后一行添加了以下内容。
@reboot python /home/pi/blink17_30sec.py
重新加载cron并重新启动Raspberry Pi。
sudo /etc/init.d/cron restart
sudo reboot
LED的闪烁频率会非常直观地告诉我们是何种状态。
检查完毕后,我们撤消cron设置。介绍此功能时,可以通过cron更改要调用的程序,以继续无限制地发送脉冲(在这种情况下为闪烁17.py)。
总结
看门狗非常有利于远程访问和控制。Raspberry Pi由于某种原因死机后,您不再需要重新插拔来手动重启Pi。
然而,我们有必要测试出现错误处理时脉冲是否能够正确停止,或者是否存在任何冲突。切勿过分依赖看门狗。该功能应该作为一种“保险”使用。