라즈파이로 코드를 작성하지 않고 종료 및 전원 버튼 만들기

라즈파이에 물리적인 셧다운 버튼 전원 버튼을 만들려고 하면 GPIO에 버튼을 연결하고 파이썬에서 버튼을 눌렀을 때 shutdown 명령을 실행시키는 코드를 써 상주시키자는 이야기가 자주 나오지만 코드를 작성할 필요는 없습니다. 설정 파일을 1 행 편집하는 것만으로 실현할 수 있습니다.

준비하는 것


  • Raspberry Pi (4B에서 검증됨)
  • 스위치
  • 외형을 신경 쓰지 않는다면 아키즈키에서 얻을 수 있는 1개 10엔 정도의 택트 스위치로 충분합니다

  • 브레드 보드 등

  • 준비할 환경


  • Raspberry Pi에서 구성 파일을 편집할 수 있는 환경
  • SSH나 VNC의 리모트 접속이어도 되고, USB나 HDMI를 유선으로 접속한 환경이어도 상관없습니다.


  • 1. 배선하기



    스위치를 누르면 GPIO 3 (핀 번호 5)과 GND (핀 번호 6)를 단락시킬 수 있습니다 (연결되도록). 이것만으로도 괜찮습니다.
    디폴트는 GPIO3이므로, 그 이외의 핀을 사용하고 싶은 경우는 설정에서의 기술 내용이 늘어납니다.

    브레드보드에서는 다음과 같습니다.



    2. 설정 파일 편집



    nano 등으로 /boot/config.txt를 열고 편집하십시오. 표준 pi와 같은 일반 사용자로 작업하는 경우 루트 권한이 필요하므로 sudo를 추가하십시오.
    sudo nano /boot/config.txt
    

    마지막 줄에 다음을 설명합니다.
    dtoverlay=gpio-shutdown
    
    Ctrl + OEnter 로 저장하고 Ctrl + X 로 nano 를 닫습니다.
    그런 다음 다음 명령으로 종료합니다.
    sudo shutdown -h now
    

    3. 시작 및 종료



    전원 케이블이 연결되어 있고 셧다운 상태에서 택트 스위치를 누르면 기동합니다.

    시동 후 택트 스위치를 누르면 종료됩니다.

    1개의 버튼을 기동・셧다운으로 겸용할 수 있으므로 편리합니다.

    이게 뭐야?



    표준으로 제공되는 장치 트리 오버레이을 이용하고 있습니다.

    Raspberry Pi OS(구: Raspbian)에 존재하는 README를 보면 다음과 같은 정보가 기재되어 있습니다.
    위와 같이 특별히 파라미터를 전달하지 않으면 GPIO 3과 GND가 단락되었을 때 셧다운이 실행됩니다.

    파라미터를 변경하면 다른 GPIO 핀에서도 셧다운을 할당할 수 있다.

    /boot/overlays/README에서 일부 인용
    Name:   gpio-shutdown
    Info:   Initiates a shutdown when GPIO pin changes. The given GPIO pin
            is configured as an input key that generates KEY_POWER events.
            This event is handled by systemd-logind by initiating a
            shutdown. Systemd versions older than 225 need an udev rule
            enable listening to the input device:
    
                    ACTION!="REMOVE", SUBSYSTEM=="input", KERNEL=="event*", \
                            SUBSYSTEMS=="platform", DRIVERS=="gpio-keys", \
                            ATTRS{keys}=="116", TAG+="power-switch"
            This overlay only handles shutdown. After shutdown, the system
            can be powered up again by driving GPIO3 low. The default
            configuration uses GPIO3 with a pullup, so if you connect a 
    button between GPIO3 and GND (pin 5 and 6 on the 40-pin header),
            you get a shutdown and power-up button.
    Load:   dtoverlay=gpio-shutdown,<param>=<val>
    Params: gpio_pin                GPIO pin to trigger on (default 3)
            active_low              When this is 1 (active low), a falling
                                    edge generates a key down event and a
                                    rising edge generates a key up event. 
                                    When this is 0 (active high), this is
                                    reversed. The default is 1 (active low).
    
            gpio_pull               Desired pull-up/down state (off, down, up)
                                    Default is "up".
    
                                    Note that the default pin (GPIO3) has an
                                    external pullup.
            debounce                Specify the debounce interval in milliseconds
                                    (default 100)
    

    또한 라즈파이는 셧다운된 상태에서 GPIO 3 과 GND 를 단락함으로써 기동하게 되어 있습니다 (이것은 설정은 불필요합니다).
    이 두 가지 조합은 단일 버튼으로 종료 및 시작 버튼을 제공합니다.

    주의사항



    GPIO3은 I2C 용 핀을 겸하고 있습니다. 따라서 설정 화면에서 I2C를 켜면 종료가 정상적으로 실행되지 않을 수 있습니다.
    그 때는 /boot/config.txt 로 아래와 같이 dtparam=i2c_arm=on 를 코멘트 아웃해 주세요.
    #dtparam=i2c_arm=on
    

    또, 이 버튼은 라즈파이에의 전원 공급을 차단하는 것은 아닙니다 ( shutdown -h now 를 두드리는 것과 같은 거동을 한다).
    전원 자체를 다시 켜고 싶다면 코드를 꽂거나 뽑아야 합니다.

    좋은 웹페이지 즐겨찾기