Skip to content

davidchilin/raspberry-pi-single-button-multi-function

 
 

Repository files navigation

Raspberry Pi single button multi-function

Script can be used to give a single button on the Raspberry Pi multiple functions (with PWR led1 and ACT led0 feedback) depending on how many presses, for example 2 presses to pause a docker service, 4 presses to stop a docker service, and 6 to power off. Its setup for a Raspberry Pi 3 Raspbian or Dietpi (use dietpi_button.sh), but can be used for other Pi models as well, just doublecheck which gpio pins to use. Depending on your button, one button presses may sometimes register as 2 or 3 presses, if this happens just press a few more times and wait, the script will clear out button presses count when more than 6 is counted. LED0 and LED1 are set to give feedback on which function (2,4 or 6) was chosen.

Some items, images/text are from Howchoo Raspberry Pi power button guide.

Installation

  1. Connect to your Raspberry Pi via SSH
  2. Clone this repo: git clone https://github.com/davidchilin/raspberry-pi-single-button-multi-function
  3. Raspbian follow all instructions as normal. (If using Dietpi use dietpi_button.sh as led names are different, install gpiod, also it uses way less resources than multifunction_button.py version). Edit lines 25, 30, 35 to perform the functions you want, default is set to pause a docker service with 2 presses, 4 will stop the docker service, and 6 will power off the Pi. Optional: Edit line 9 in multifunction_button.py to your preferred pin (currently set to pin 5/gpio 3 which has power ON functionality)
  4. Either:
    • Create a new systemd service
      1. with a new "multifunction_buton.service" file in /etc/systemd/system with contents:
        [Unit]
        Description=Multifunction Button Thread
        [Service]
        Type=simple
        ExecStart=/file/path_to/multifunction_button.py
        Restart=always
        [Install]
        WantedBy=multi-user.target
        
      2. add execute permission with command: sudo chmod +x /file/path_to/multifunction_button.py
      3. enable and start the service: sudo systemctl enable multifunction_button then sudo systemctl start multifunction_button
    • OR Run the setup script, to install and use init.d: ./raspberry-pi-single-button-multi-function/script/install

Uninstallation

Uninstall the way you installed, either:

  • stop the service 'sudo systemctl disable multifunction_button' and delete relevant files
  • run uninstall script: ./raspberry-pi-single-button-multi-function/script/uninstall

Hardware

A full list of what you'll need can be found here. At a minimum, you'll need a normally-open (NO) power button, and some jumper wires.

Connect the power button to Pin 5 (GPIO 3/SCL) and Pin 6 (GND) as shown in the diagram:

Connection Diagram

Is it possible to use another pin other than Pin 5 (GPIO 3/SCL)?

Yes, if you do not need power on functionality for the Pi, you can use gpio 21/pin 40 or gpio 7/pin 26.

There are three main features of the button using Pin 5/GPIO 3:

  1. Wake functionality: Turn the Pi back on when the button is pressed again - only with Pin 5/GPIO3.
  2. Shutdown functionality: Shut the Pi down safely when the button is pressed 6 times. The Pi now consumes zero power.

The wake functionality requires the SCL pin, Pin 5 (GPIO 3). There's simply no other pin that can "hardware" wake the Pi from a zero-power state. If you don't care about turning the Pi back on using the power button, you could use a different GPIO pin for the shutdown functionality and still have a working multifunction_button button. Then, to turn the Pi back on, you'll just need to disconnect and reconnect power (or use a cord with a physical switch in it) to "wake" the Pi.

Of course, for the GND connection, you can use any other ground pin you want.

About

raspberry pi single button with multiple functions

Topics

Resources

License

Stars

Watchers

Forks

Languages

  • Python 52.1%
  • Shell 47.9%