I spent way too long trying to build a solution out of parts I had readily available before I discovered that Adafruit had exactly the thing I needed: the piOLED, tiny screen to attach to my Raspberry Pi Zero W. One of the examples even included what I was after; a way to display the ip address, in
The script doesn't exit as cleanly as I'd like, so the first thing is to put the
The tutorial also has instructions on how to run the script on startup; by putting it in
And add the call to the script, before
Save and exit.
Cool, now we have a way to display the ip address of the pi so we can ssh in. But, there is nothing to turn it off again.
First thing needed is a python script to blank the screen. You can take a copy of
So, we write a script to do that. (Here I ran into some dash versus bash problems. Damn you dash, damn you.)
Something like;
Great, this works wonderfully, when we manually invoke it. We're going to want it to run at shutdown too though. (Because, while power is still supplied to the pi, even though it's off, and the screen isn't updating, the old data is still displaying.)
This is not as easy as it should be. I basically wanted a
Summary;
* Copy
* Edit
* Delete the old
* Pick up the new;
But, this alone isn't enough for Debian/Raspbian to pick up the changes. Enter
And add this line just after
Save and exit.
Now, stop the daemon, reload it, and then start it.
One final thing, edit
Finally, when you reboot, startup, and all the other fun things the screen should behave nicely. Enjoy.
stats.py
.The script doesn't exit as cleanly as I'd like, so the first thing is to put the
while True:
loop into a try:
and put the cleanup in the catch:except KeyboardInterrupt:
disp.clear()
disp.display()
The tutorial also has instructions on how to run the script on startup; by putting it in
rc.local
sudo vim /etc/rc.local
And add the call to the script, before
exit 0
, pushing it into the background;sudo python /home/pi/Adafruit_Python_SSD1306/examples/stats.py &
Save and exit.
Cool, now we have a way to display the ip address of the pi so we can ssh in. But, there is nothing to turn it off again.
First thing needed is a python script to blank the screen. You can take a copy of
stats.py
and strip out everything except the setup code and the cleanup code. Cool, this works, kinda. It clears for a moment and then starts displaying again. This is because we haven't killed the processes doing that yet.So, we write a script to do that. (Here I ran into some dash versus bash problems. Damn you dash, damn you.)
Something like;
#/bin/sh
pids=$(ps -ef | grep 'python .*examples/stats.py' | awk '{print $2}')
echo $pids | while read -r line;
do
sudo kill -9 $line
done
sudo python /home/pi/Adafruit_Python_SSD1306/examples/blank.py
Great, this works wonderfully, when we manually invoke it. We're going to want it to run at shutdown too though. (Because, while power is still supplied to the pi, even though it's off, and the screen isn't updating, the old data is still displaying.)
This is not as easy as it should be. I basically wanted a
rc-local
for shutting down. I'm not the only person who has had this idea, so have a look here for a way to add shutdown functionality to rc-local
.Summary;
* Copy
/etc/rc.local
to /etc/rc.local.stop
* Edit
/etc/init.d/rc.local
, adding in extra info to # Required-Stop:
, # Default-Stop:
, edit the case
statement to call do_stop
in event of stop)
, and add the do_stop
function (which is a copy of the do_start
function changed to point at rc.local.stop
).* Delete the old
rc-local
daemon; sudo update-rc.d -f rc.local remove
* Pick up the new;
sudo update-rc.d rc.local defaults
But, this alone isn't enough for Debian/Raspbian to pick up the changes. Enter
systemd
.sudo vim /lib/systemd/system/rc-local.service
And add this line just after
ExecStart
;ExecStop=/etc/rc.local.stop stop
Save and exit.
Now, stop the daemon, reload it, and then start it.
sudo systemctl stop rc-local
sudo systemctl daemon-reload
sudo systemctl start rc-local
One final thing, edit
rc.local.stop
to use the stop script instead of the start one. And don't push it to the background. Something like;sudo /home/pi/Adafruit_Python_SSD1306/examples/kill_SSD1306.sh
Finally, when you reboot, startup, and all the other fun things the screen should behave nicely. Enjoy.