라즈베리파이4 Safe Shutdown

개요

뷰릭스에서 라즈베리파이4를 구동하고 있는데요.
사용하면서 불편한점을 하나 꼽으라면 전원 관리가 불편하다는 점입니다.

기존에는 전원은 인가된 체로 라즈베리파이 OS만 on/off해서 사용했는데요.
이번에 푸시스위치 하나로 safe shutdown을 포함한 전원관리 기능을 추가해 봤습니다.

제작

일단은 푸시스위치를 통해 릴레이 스위치 제어가 잘되는지 확인해 봤습니다.

좀 더 효과적인 전원관리를 위해 라즈베리파이와 아두이노간의 시리얼 통신을 시도해봤습니다.
아두이노의 TX,RX를 라즈베리파이의 RX,TX에 연결하였습니다.

기존에 사용하지 않는 라즈베리파이 케이스가 있어서 그 안에 부품들을 넣었습니다.

최종 완성된 형태는 다음과 같습니다.

동작 방식

  • 라즈베리파이 전원 Off시 푸시스위치 누름 : 라즈베리파이로 바로 전원을 연결합니다.
  • 라즈베리파이 전원 On시 푸시스위치 누름 : 라즈베리파이를 shutdown 시킨후 전원을 해제합니다.
  • 라즈베리파이에서 시스템 종료시 : 시스템이 종료된 후 전원을 해제합니다.
  • 전원 ON / Safe Shutdown 시작 / 전원 OFF 를 수행할때 멜로디로 전원 스위치의 동작을 확인할 수 있습니다.

부품별 동작 흐름

  • 푸시스위치 –> 아두이노 : 전원 ON/OFF에 따른 로직을 처리합니다.
  • 아두이노 –> 릴레이 스위치 : 라즈베리파이로의 전원 ON/OFF를 수행합니다.
  • 아두이노 –> 라즈베리파이 : Shutdown 신호를 전송하여, 시스템을 종료합니다.
  • 라즈베리파이 –> 아두이노 : 시스템 종료 신호를 전송하여, 안전하게 전원을 해제합니다.

전원 제어별 멜로디

전원을 넣어주면 경쾌한 마리오 음악이 나옵니다.

전원 종료시 마리오의 언더월드 테마곡이 나옵니다.

Safe Shutdown

푸쉬 스위치를 통해 shutdown 및 전원차단을 수행합니다.

라즈베리파이에서 시스템 종료시 20초 후에 전원을 차단합니다.

아두이노

아두이노에서는 푸시스위치 인식, 라즈베리파이와 통신, 릴레이스위치 제어를 담당합니다.

라즈베리파이 시리얼 통신 설정

라즈베리파이에서는 시리얼 통신을 아두이노로 Shutdown 정보를 전달하거나,
아두이노로부터 Shutdown 시작을 수신하여 시스템 종료를 수행합니다.

라즈베리파이용 SafeShutdown 코드

라즈베리파이에서 아두이노와 시리얼 통신을 통해 safe shutdown하는 코드는 파이썬으로 작성했습니다.
시스템 부팅시 safeShutdown.py를 백드라운드로 구동하기 위해 autostart.sh 파엘에 실행명령을 추가하였습니다.

safeShutdown.py 는 다음과 같습니다.
라즈베리파이 시스템 종료를 인식하면 아두이노로 “S” 라는 문자열을 전송하고, 15초 뒤에 아두이노에서 전원을 Off합니다.

참고사항

Mario Melody

Detect Shutdown

UART Communication

Notice

  • 이 저작물은 크리에이티브 커먼즈 저작자표시-비영리-변경금지 2.0 대한민국 라이선스에 따라 이용할 수 있습니다. 크리에이티브 커먼즈 라이선스
  • 저작권과 관련된 파일요청 및 작업요청을 받지 않습니다.
  • 댓글에 대한 답변은 늦을 수도 있습니다.
  • 댓글 남기기