-
Notifications
You must be signed in to change notification settings - Fork 0
/
shutdown.py
89 lines (77 loc) · 2.89 KB
/
shutdown.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
# safe_shutdown_Pi.py
#
# -----------------------------------------------------------------------------
# Raspberry Pi Safe Shutdown Python Script
# -----------------------------------------------------------------------------
# WRITTEN BY: Ho Yun "Bobby" Chan
# @ SparkFun Electronics
# DATE: 3/31/2020
#
# Based on code from the following blog and tutorials:
#
# Kevin Godden
# https://www.ridgesolutions.ie/index.php/2013/02/22/raspberry-pi-restart-shutdown-your-pi-from-python-code/
#
# Pete Lewis
# https://learn.sparkfun.com/tutorials/raspberry-pi-stand-alone-programmer#resources-and-going-further
#
# Shawn Hymel
# https://learn.sparkfun.com/tutorials/python-programming-tutorial-getting-started-with-the-raspberry-pi/experiment-1-digital-input-and-output
#
# ==================== DESCRIPTION ====================
#
# This python script takes advantage of the Qwiic pHat v2.0's
# built-in general purpose button to safely reboot/shutdown you Pi:
#
# 1.) If you press the button momentarily, the Pi will shutdown.
#
# ========== TUTORIAL ==========
# For more information on running this script on startup,
# check out the associated tutorial to adjust your "rc.local" file:
#
# https://learn.sparkfun.com/tutorials/raspberry-pi-safe-reboot-and-shutdown-button
#
# ========== PRODUCTS THAT USE THIS CODE ==========
#
# Feel like supporting our work? Buy a board from SparkFun!
#
# Qwiic pHAT v2.0
# https://www.sparkfun.com/products/15945
#
# You can also use any button but you would need to wire it up
# instead of stacking the pHAT on your Pi.
#
# LICENSE: This code is released under the MIT License (http://opensource.org/licenses/MIT)
#
# Distributed as-is; no warranty is given
#
# -----------------------------------------------------------------------------
import time
import RPi.GPIO as GPIO
# Pin definition
shutdown_pin = 17
# Suppress warnings
GPIO.setwarnings(False)
# Use "GPIO" pin numbering
GPIO.setmode(GPIO.BCM)
# Use built-in internal pullup resistor so the pin is not floating
# if using a momentary push button without a resistor.
GPIO.setup(shutdown_pin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
# Use Qwiic pHAT's pullup resistor so that the pin is not floating
#GPIO.setup(shutdown_pin, GPIO.IN)
# modular function to shutdown Pi
def shut_down():
print("shutting down")
command = "/usr/bin/sudo /sbin/shutdown -h now"
import subprocess
process = subprocess.Popen(command.split(), stdout=subprocess.PIPE)
output = process.communicate()[0]
print(output)
# Check button if we want to shutdown the Pi safely
while True:
#short delay, otherwise this code will take up a lot of the Pi's processing power
time.sleep(0.5)
# For troubleshooting, uncomment this line to output buton status on command line
#print('GPIO state is = ', GPIO.input(shutdown_pin))
if GPIO.input(shutdown_pin)== False:
shut_down()