คุณไม่จำเป็นต้องถอดไฟออกเพื่อรีสตาร์ท Pi มีแผ่นอิเล็กโทรดอยู่ใกล้กับการ์ด SD (ฉันคิดว่าอาจมีการรีเซ็ตป้ายชื่อ - ฉันมองไม่เห็นที่ Pi เพราะพวกเขาทุกคนมีสวิทช์บัดกรีบนบอร์ด) ชั่วครู่ชั่วครู่เพื่อรีสตาร์ท
Rasbpian ล่าสุดมีกระบวนการที่สร้างขึ้นสำหรับการปิด (จัดการโดยsystemd-logind
)
เพิ่มรายการต่อไปนี้เพื่อ /boot/config.txt
dtoverlay=gpio-shutdown,gpio_pin=5
สิ่งนี้ช่วยให้สวิตช์เชื่อมต่อระหว่างพิน 29 (GPIO 5) และพิน 30 (Gnd) เพื่อเริ่มต้นการปิดระบบ Pi อย่างเป็นระเบียบ
เกือบทุกพินสามารถใช้งานได้ - ค่าเริ่มต้นคือพิน 5 (GPIO 3) ถึงแม้ว่านี่มักจะใช้สำหรับI²C
,gpio_pin=21
จะใช้พินเดียวกับที่ใช้ในพินสคริปต์ 40 (GPIO 21) และพิน 39 (Gnd)
ฉันแนะนำ sudo poweroff
ให้ปิด Pi ไม่มีอะไรผิดปกติกับสิ่งที่คุณทำ แต่poweroff
ทำให้ LED สีเขียวกระพริบ 10 ครั้งในช่วงเวลา 1 วินาทีเมื่อปลอดภัยต่อการปิดเครื่อง
ฉันมีสคริปต์ Python ซึ่งปิด Pi ลงด้วยปุ่มกด
#!/usr/bin/env python2.7
#-------------------------------------------------------------------------------
# Name: Shutdown Daemon
#
# Purpose: This program gets activated at the end of the boot process by
# cron. (@ reboot sudo python /home/pi/shutdown_daemon.py)
# It monitors a button press. If the user presses the button, we
# Halt the Pi, by executing the poweroff command.
#
# The power to the Pi will then be cut when the Pi has reached the
# poweroff state (Halt).
# To activate a gpio pin with the poweroff state, the
# /boot/config.txt file needs to have :
# dtoverlay=gpio-poweroff,gpiopin=27
#
# Author: Paul Versteeg
#
# Created: 15-06-2015, revised on 18-12-2015
# Copyright: (c) Paul 2015
# https://www.raspberrypi.org/forums/viewtopic.php?p=864409#p864409
#-------------------------------------------------------------------------------
import RPi.GPIO as GPIO
import subprocess
import time
GPIO.setmode(GPIO.BCM) # use GPIO numbering
GPIO.setwarnings(False)
# I use the following two GPIO pins because they are next to each other,
# and I can use a two pin header to connect the switch logic to the Pi.
# INT = 17 # GPIO-17 button interrupt to shutdown procedure
# KILL = 27 # GPIO-27 /KILL : this pin is programmed in /boot/config.txt and cannot be used by any other program
INT = 21 # GPIO button interrupt to shutdown procedure
# use a weak pull_up to create a high
GPIO.setup(INT, GPIO.IN, pull_up_down=GPIO.PUD_UP)
def main():
while True:
# set an interrupt on a falling edge and wait for it to happen
GPIO.wait_for_edge(INT, GPIO.FALLING)
# print "button pressed"
time.sleep(1) # Wait 1 second to check for spurious input
if( GPIO.input(INT) == 0 ) :
subprocess.call(['poweroff'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
if __name__ == '__main__':
main()