다음 글을 참고 하였습니다.
전원 스위치 만들기 참고 https://ddangeun.tistory.com/120
라즈베리파이 on / off 전원 스위치, 버튼 만들기
라즈베리파이에 전원 Off 뿐 아니라 On도 되는 스위치를 만드려고 합니다. 따라서 완전히 Power를 Off하지 말고 shutdown -h now 또는 sudo halt 를 통해 halt 상태(시스템 종료)로 놓고 wakeup시키면 다시 켜집
ddangeun.tistory.com
부팅 스크립트 등록하기 참고 https://m.blog.naver.com/emperonics/221770579539
라즈베리파이 부팅시 프로그램(스크립트) 자동 실행시키는 5가지 방법
라즈베리파이 부팅시 프로그램 자동 실행시키는 5가지 방법 안녕하세요! 이번시간에는 라즈베리파이 부팅시...
blog.naver.com
목표
push 스위치를 눌렀을 때 안전하게 shutdown 명령 수행
shutdown 상태에서 다시 push 스위치를 누르면 부팅이 되도록 만들어 봤습니다.
구글링 해보면 여러가지 방법이 나오지만 제일 간단한 방법 이었습니다.
스위치 연결
버튼이 설치가 되었으면 안전하게 shutdown 하는 스크립트를 작성하여 데몬으로 등록 해야 합니다.
데비안 12 "bookworm" 배포판 부터 많은 것이 바뀐 것 같습니다.
일반적으로 사용자 스크립트를 /etc/rc.local 에 등록 하던 것이 사라졌습니다.
구글링 해보면 /etc/rc.local 을 수동으로 만들어서 등록 한다는 의견도 있고 갑을 논박이 있는 것 같습니다.
최대한 배포한 개발자들의 의견을 따르는게 좋겠다고 생각해서 /etc/init.d 에 스크립트를 등록 해서 자동 실행 되도록 하겠습니다.
/etc/init.d 에 등록 하려면 아래와 같은 내용이 스크립트에 들어가야 합니다.
### BEGIN INIT INFO
# Provides: scriptname
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
이것을 감안해서 스크립트를 수정했습니다.
저장 위치는 /etc/init.d 입니다.
/etc/init.d/shutdown.py
#!/usr/bin/python
# /etc/init.d/shutdown.py
### BEGIN INIT INFO
# Provides: shutdown.py
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start daemon at boot time
# Description: Enable service provided by daemon.
### END INIT INFO
import RPi.GPIO as GPIO
from subprocess import call
import time
btnPin = 5
GPIO.setmode(GPIO.BOARD)
GPIO.setup(btnPin, GPIO.IN, GPIO.PUD_UP)
while True:
GPIO.wait_for_edge(btnPin,GPIO.RISING,bouncetime=100)
time.sleep(0.1)
#print(GPIO.input(btnPin))
if GPIO.input(btnPin)==0:
call(['shutdown', '-h','now'], shell=False)
실행 퍼미션을 주겠습니다.
$ sudo chmod +x /etc/init.d/shutdown.py
이제 init.d 업데이트 명령을 실행하면 자동 실행에 등록 됩니다.
$ sudo update-rc.d shutdown.py default
정상적으로 업데이트가 되었으면 재부팅 후 데몬이 떠 있는지 확인 합니다.
$ ps -ef | grep shutdown
root 589 1 2 03:32 ? 00:00:00 /usr/bin/python /etc/init.d/shutdown.py start
pi 1914 1885 0 03:33 pts/0 00:00:00 grep --color=auto shutdown
$
자동 실행 되었습니다.
동작 테스트
잘 동작 하고 있습니다.
끝.
'Raspberry Pi & ARDUINO' 카테고리의 다른 글
Volumio 플러그인 메뉴에서 로그인 메시지가 나오는 경우 (0) | 2025.02.22 |
---|---|
Raspberry Pi OS bookworm 고정 IP 할당 하기 (0) | 2025.02.21 |
Raspberry Pi Network Music Player with Volumio on YouTube Music plugin #1 (0) | 2025.02.17 |
Respberry Pi 4 + 3.5inch TFT LCD 설치 (0) | 2025.01.04 |
Raspberry Pi 설치 (with Raspberry Pi Imager) (0) | 2025.01.03 |