In the last post we set up a small script to light up the Blinkt with beautiful purple-blue lights. In this post we're going to automatically run a script when we turn the Pi on and stop and clear the LEDs when we turn it off.
You can actually use the techniques in this tutorial for any other script or board.
There are many different ways to start running a script when the Pi is booting up. We are going to use
crontab we can automate running a script at a certain moment. There are different options, such as running a script
daily or on
reboot. We will be using that last option 😉.
Make sure to be logged into your Pi and in the terminal run:
$ crontab -e
This will open
crontab in your editor. At the bottom of the file add:
@reboot python /home/pi/Pimoroni/blue_purple.py &
@reboot to tell the
crontab that we want to run the script whenever the device reboots.
python is used to run the Python script and
& makes the script run as a background script so you can use your terminal while the script is running. Make sure to add the absolute path to the script you want to run when starting up.
Save and close the file, that's it for the first part. You can now restart your Pi with
sudo reboot and it should automatically start running your script in the background once it starts up again.
If for any reason you want to stop the script, all you have to do is find its Process Identifier (PID) by running
ps aux | grep python and finding the script in the list of processes. The output would look something like this:
pi 394 35.3 1.7 32420 16352 ? S 12:09 34:34 python /home/pi/Pimoroni/blue_purple.py pi 771 0.0 0.0 7348 492 pts/0 S+ 13:46 0:00 grep --color=auto python
The PID is the number right next to the
pi. In the example, it is
394 Once you have the PID run
kill 349 replacing
349 with the number of your PID.
Let's run a little test. Try shutting down your Pi while the LEDs are running. We can do that by typing:
$ sudo shutdown now
The Pi will shut itself down and the background script will also stop running. But you might notice that the LEDs did not clear. The Blinkt library has a function for clearing the LEDs when the script stops:
blinkt.set_clear_on_exit(). But that only works when the script is explicitly stopped by us. On shutdown, this will have no effect. And as the Blinkt pixels seem to have memory, they will not clear unless we tell them to, or turn off the power.
So, let's fix this.
Inside our Python script we are going to add a new library called
signal underneath our other libraries:
#!/usr/bin/env python import blinkt import time import numpy import signal # new one!
This will import the
signal library. This library listens for signals from the system and makes it possible to run a function when we receive a specific signal.
When our Pi shuts down, it will send a signal called
SIGTERM. This signal is sent whenever the system is doing a soft shutdown.
If our script receives this signal, we want to clear the LEDs and exit from the Python script. So in our Python file, add:
def clear_leds(signum, frame): blinkt.clear() blinkt.show() exit(0) signal.signal(signal.SIGTERM, clear_leds)
clear_led function has two arguments it automatically receives from the
signal.signal() function. We don't really need to use that so we just keep them there. The
blinkt.clear() clears the LEDs and the
blinkt.show() sets the new changes to the Blinkt so they can be seen. We then exit the Python script with
signal.signal(signal.SIGTERM, clear_leds) the script will listen for the
SIGTERM signal. Once it receives it, it will run the
And that's it! Reboot your system and once your LEDs are running again, try shutting the Pi off by using
sudo shutdown now. After a second or so the LEDs should clear.
I had to find different sources to create this flow, so hopefully, this helps out anyone who wants to set it up the same way. Have fun and if you have it running, please share pictures of your awesome Pi!
Check the finished script