1.ต่อ Switch แบบกดติดปล่อยดับที่ขา 5 (GPIO3) กับขา 6
(GND) หรือจะต่อที่ GPIO อื่นก็ได้ แต่ต้องต้องต่อตัวต้านทานเพิ่มด้วย
เพื่อป้องกันความเสียหายกับบอร์ด (GPIO3 มีตัวต้านทานภายในอยู่แล้ว) ที่มา :
https://learn.sparkfun.com/tutorials/pull-up-resistors
2.กรณีต่อที่ GPIO3 ต้องเขียน Code เปิดใช้งานตัวต้านทานภายในด้วย
3.เขียน Code สำหรับควบคุมการเปิด/ปิด : pishutdown.py
* กดสวิตช์ค้างน้อยกว่า 3 วินาที จะเป็นการ reset, มากกว่า 3 วินาทีจะเป็นการ Shutdown, ถ้า Shutdown ไปแล้วจ่ายไฟค้างไว้ กดสวิตช์จะเป็นการเปิด
4.ถ้าอยากเก็บ Log ดูการทำงาน เพิ่ม Code ดังนี้
5.เรียก script ให้ทำงาน
6.กำหนดให้ script ทำงานเป็น Service : /etc/systemd/system/pishutdown.service
7.Enable service:
8.Run service (will be automatically started on next reboot):
ที่มา : https://gilyes.com/pi-shutdown-button/
2.กรณีต่อที่ GPIO3 ต้องเขียน Code เปิดใช้งานตัวต้านทานภายในด้วย
- GPIO.setmode(GPIO.BOARD)
- GPIO.setup(5, GPIO.IN, pull_up_down=GPIO.PUD_UP)
3.เขียน Code สำหรับควบคุมการเปิด/ปิด : pishutdown.py
- #!/usr/bin/python
- # shutdown/reboot(/power on) Raspberry Pi with pushbutton
- import RPi.GPIO as GPIO
- from subprocess import call
- from datetime import datetime
- import time
- # pushbutton connected to this GPIO pin, using pin 5 also has the benefit of
- # waking / powering up Raspberry Pi when button is pressed
- shutdownPin = 5
- # if button pressed for at least this long then shut down. if less then reboot.
- shutdownMinSeconds = 3
- # button debounce time in seconds
- debounceSeconds = 0.01
- GPIO.setmode(GPIO.BOARD)
- GPIO.setup(shutdownPin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
- buttonPressedTime = None
- def buttonStateChanged(pin):
- global buttonPressedTime
- if not (GPIO.input(pin)):
- # button is down
- if buttonPressedTime is None:
- buttonPressedTime = datetime.now()
- else:
- # button is up
- if buttonPressedTime is not None:
- elapsed = (datetime.now() - buttonPressedTime).total_seconds()
- buttonPressedTime = None
- if elapsed >= shutdownMinSeconds:
- # button pressed for more than specified time, shutdown
- call(['shutdown', '-h', 'now'], shell=False)
- elif elapsed >= debounceSeconds:
- # button pressed for a shorter time, reboot
- call(['shutdown', '-r', 'now'], shell=False)
- # subscribe to button presses
- GPIO.add_event_detect(shutdownPin, GPIO.BOTH, callback=buttonStateChanged)
- while True:
- # sleep to reduce unnecessary CPU usage
- time.sleep(5)
* กดสวิตช์ค้างน้อยกว่า 3 วินาที จะเป็นการ reset, มากกว่า 3 วินาทีจะเป็นการ Shutdown, ถ้า Shutdown ไปแล้วจ่ายไฟค้างไว้ กดสวิตช์จะเป็นการเปิด
4.ถ้าอยากเก็บ Log ดูการทำงาน เพิ่ม Code ดังนี้
- import logging
- logger = logging.getLogger(__name__)
- logger.setLevel(logging.INFO)
- # create a file handler
- handler = logging.FileHandler('pishutdown.log')
- handler.setLevel(logging.INFO)
- # create a logging format
- formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')
- handler.setFormatter(formatter)
- # add the handlers to the logger
- logger.addHandler(handler)
- logger.info('Shutdown/Restart')
5.เรียก script ให้ทำงาน
- sudo python pishutdown.py
6.กำหนดให้ script ทำงานเป็น Service : /etc/systemd/system/pishutdown.service
- [Service]
- ExecStart=/usr/bin/python /path_to_pishutdown/pishutdown.py
- WorkingDirectory=/path_to_pishutdown/
- Restart=always
- StandardOutput=syslog
- StandardError=syslog
- SyslogIdentifier=pishutdown
- User=root
- Group=root
- [Install]
- WantedBy=multi-user.target
7.Enable service:
- sudo systemctl enable pishutdown.service
8.Run service (will be automatically started on next reboot):
- sudo systemctl start pishutdown.service
ที่มา : https://gilyes.com/pi-shutdown-button/
No comments:
Post a Comment