게임기 제작

라즈베리파이 게임기 전원버튼 + LED

프로필

2017. 7. 28. 0:36

이웃추가

라즈베리파이 게임기를 만들었는데 리눅스 기반이다보니 끄는 과정이 신경쓰이더군요

OS를 셧다운 시키고나서 power off 해야하는데 이 과정을 메뉴에서 선택하는게 많이 귀찮습니다
그리고 이런 점을 모르는 가족들이 사용하기에 직관적이지도 않습니다

"푸쉬버튼으로 켜고 끈다. LED를 이용해서 언제 POWER OFF 해도되는지 직관적으로 알 수 있도록 한다"는 목표를 잡고 구현을 해봤습니다

이때 푸쉬락 버튼은 전혀 후보에 넣지 않았습니다



초기 구현

- 푸쉬버튼의 C와 NO를 GPIO 5번핀과
  그라운드에 연결
- 버튼 LED의 +, - 를 GPIO 5v핀(저는 4번핀 사용)과 그라운드에 연결
- shutdown, reboot, wakeup 스크립트는 구글 검색
  https://github.com/gilyes/pi-shutdown

※ 핀번호는 BCM 기준이 아니라 BOARD 기준
    (좌상단 1번 ~ 우하단 40번)



1. reboot
    짧게 누르고 떼면 리부팅됩니다


2. shutdown
길게 누르고 떼면 셧다운됩니다


3. wakeup
셧다운 상태에서(전원인가 유지) 짧게 누르면 다시 켜짐


거슬리는게 있습니다
동영상에서 보면 셧다운 후에도 LED가 켜져 있습니다
LED가 꺼지기를 원했습니다
그래서 LED의 + 단자를 일반핀(저는 7번핀 사용)에 연결하고 스크립트에서 7번핀에 신호를 보냈습니다

그러니까 셧다운시 LED가 꺼지는 것은 구현됐는데 다른 문제가 있습니다
스크립트를 rc.local 에 등록했는데 rc.local 이 OS가 거의 다 올라온 후에 실행되어 LED도 그만큼 늦게 켜진다는 것입니다

그래서 구글링으로 해법을 또 찾아봤습니다



최종 구현

- LED의 + 를 8번핀에 연결
- /boot/config.txt 에 다음의 한줄을 추가
  enable_uart=1

※ 관련 내용은 아래 링크 참고
https://howchoo.com/g/ytzjyzy4m2e/build-a-simple-raspberry-pi-led-power-status-indicator


그리고 초기 구현에서 마음에 안들었던 것이
셧다운 하려면 일정시간 눌렀다가 떼야하는데
이 "뗀다"는 것이 여간 귀찮은 과정이 아닙니다
그냥 누르고 있으면 떼지 않아도 셧다운 되기를 원했습니다
초기 구현때 적용한 구글에서 찾은 스크립트는 event driven 방식이라서 "누르고 있다"는 행위를 인지 못하더군요

CPU 부담을 줄이려면 event driven 방식이 좋겠지만 heavy한 스크립트가 아니기에 그냥 polling 방식으로 스크립트를 만들었습니다
적용해보니 원하는 방식대로 동작합니다

아래처럼 스크립팅 했습니다
python 배운지 일주일도 안되어 주먹구구입니다
 


최종 구현의 동작 영상입니다


1. power on
버튼 누름과 동시에 LED에 불이 들어 옵니다



2. reboot
이건 초기 구현과 같습니다



3. shutdown
3초간 누르고 있으면 떼지 않아도 셧다운 됩니다



4. wakeup
이것도 초기 구현과 같습니다
power on 처럼 LED에 불이 바로 들어옵니다
이제 가족들에게 이렇게 얘기하면 됩니다

- 똑딱이 스위치로 켜라
- 꾹 눌러서 불이 꺼지면 똑딱이 스위치 내려라


오랜만에 재미난 삽질이었습니다



--------------------------------------------------------

2017.10.19 설명 추가합니다

파이썬 코드 캡처를 일일이 입력하기 불편하다는 의견이 있어서,
파이썬 코드를 파일로 첨부합니다
첨부된 파이썬 코드 파일을 라즈베리파이에 복사하고, 라즈베리파이가 부팅될때 자동실행 되도록 설정하면 됩니다


* 자동실행 등록 방법

- 파일썬 코드 파일이 /home/pi/shutdown_btn.py 라고 가정하면
- /etc/rc.local 파일의 끝부분 exit 0 바로 윗줄에 다음을 써줍니다 -> 매우 중요 !!!
  sudo python /home/pi/shutdown_btn.py &
- 끝부분의 & 를 빼먹지 마세요
   이것이 빠지면 부팅이 멈춥니다


* 주의사항 !!!

- 반드시 테스트를 먼저 해서 정상동작을 확인한 후에 자동등록 하세요
- 만일 코드가 이상동작하면(버튼이 눌러진것으로 잘 못 인지된다면), 라즈베리파이가 부팅하자마자 꺼집니다
- 테스트 방법 : 콘솔에서 먼저 실행해봅니다
   sudo python /home/pi/shutdown_btn.py &
- 코드를 실행시켜 놓고 버튼을 눌러서 정상동작하는지 테스트해보고, 정상이라면 그 다음에 자동실행 등록을 하시기 바랍니다
- 테스트 하지 않고 발생하는 문제에 대해서는 어떠한 도움도 드릴 수 없습니다
- 참고로, 제가 가진 라즈베리파이들 중에 1개는 신호 인식에 문제가 있어서
   버튼을 누르지도 않았는데 눌렀다고 인식해서 결국 코드 적용을 못했습니다


늘근개발자
늘근개발자