One of the things I want for my IoT devices is a smart power button. When off or in low power I would like to be able to press the button and have the device power on. If the device is on I want to press the power button and have the device shutdown safely and either power off or indicate that power can be shut off.
The PI has built in support for the seed of my solution in the form of device tree overlays (dto) that can activate kernel support for a shut down signal and a powered down signal. I will be using these two features to implement a simple shutdown button and running indicator led. Not quite the feature set I am looking for, but this may be useful to pull out for some circumstances. Besides, if I can control an led at shut down I could send a signal to put the PI in low power or have it’s UPS shutdown.
There are many sources on the web that detail these two dto’s . The two I found most helpful were:
For shutdown signal:
For toggling GPIO at shutdown:
It should be noted that specifying the gpio pin to use is different in these two overlays. My implementation looks like this (in /boot/config.txt):
With this configuration I am monitoring pin 17 for a low signal to initiate system shut down. When the system has halted, pin 19 will go low. Pin 19 will go from low to high on startup.
When pin 19 signals shut down there are two low to high transitions that look like this:
So — using this line to control a running led would have the led on while running. When the system shuts down the led will blink once and then go out indicating it is safe to power off. Keeping the led lit adds 10 ma to the measured current draw of the PI. If this is a concern the logic could be reversed and the led could be made to illuminate at system shutdown. I’m going to be using the led as a running indicator, so it will be on while running.
This simple circuit is all that we need to implement our running indicator and shutdown switch.