Threat level? DEFCON? Who cares, the nukes are coming anyway!
To make the experience fit your profile, pick a username and tell us what interests you.
We found and based on your interests.
5.pngPortable Network Graphics (PNG) - 12.96 kB - 03/22/2024 at 10:55 |
|
|
inky_display.pypy - 1.45 kB - 03/22/2024 at 10:55 |
|
|
3.pngPortable Network Graphics (PNG) - 11.12 kB - 03/22/2024 at 10:55 |
|
|
1.pngPortable Network Graphics (PNG) - 9.79 kB - 03/22/2024 at 10:55 |
|
|
connecting.pngPortable Network Graphics (PNG) - 11.70 kB - 03/22/2024 at 10:55 |
|
|
This project assumes you have already installed the Raspberry Pi OS onto the SD card, and have attached the Inky to the headers. Once booted into RPi OS, configure your wireless settings according to your particular setup, as we need the internet for this project to work.
Next, open terminal and type:
sudo apt update && sudo apt upgrade -y
Now we need to install various dependencies in order for the script we’ll create later to run properly.
Still in terminal, type the following:
sudo apt install python3-requests -y
We use the requests library to fetch data from an external website.
sudo apt install python3-bs4 -y
The BeautifulSoup library is used for parsing HTML content.
Now for the all-important InkyPhat library:
git clone https://github.com/pimoroni/inky.git cd inky sudo python3 setup.py install
With that taken care of, we can create our script. Here in the UK, MI5 publishes and updates our current threat level, which we amusingly call the Bikini State. It’s our version of the US DEFCON. There are five levels - Low, Medium, Substantial, Severe and Critical. While working out my code, I connected to the MI5 threat level RSS feed so much, they blocked my IP address, so I have to get the level by parsing text on the main .gov.uk website instead. It’s exactly the same information, just from a different website.
Anyway, here is the code:
import requests from bs4 import BeautifulSoup import inkyphat import time # No need for schedule module in this version def update_image(): url = "https://www.gov.uk/terrorism-national-emergency" response = requests.get(url) soup = BeautifulSoup(response.text, "html.parser") sentence = soup.find(text="The threat to the UK (England, Wales, Scotland and Northern Ireland) from terrorism is ") if sentence: next_word = sentence.find_next("strong") if next_word: next_word = next_word.text.strip().lower() print(f"Retrieved sentence: {sentence}") # Debugging print print(f"Next word (image indicator): {next_word}") # Debugging print if next_word in image_paths: inkyphat.clear() # Clear the display inkyphat.set_image(image_paths[next_word]) inkyphat.show() inkyphat.set_colour("red") # Specify the color of your Inky pHAT inkyphat.set_image("/home/pi/inky/images/connecting.png") inkyphat.show() time.sleep(15) # Wait 5 seconds on boot image_paths = { "low": "/home/pi/inky/images/1.png", "medium": "/home/pi/inky/images/2.png", "substantial": "/home/pi/inky/images/3.png", "severe": "/home/pi/inky/images/4.png", "critical": "/home/pi/inky/images/5.png" } # Continuous loop to check for updates (alternative to schedule) while True: update_image() time.sleep(43200) # Update every 12 hours (43200 seconds)
Save this as inky_display.py.
This code loads the initial image (connecting.png), waits a few seconds, then checks the website for the text
"The threat to the UK (England, Wales, Scotland and Northern Ireland) from terrorism is ".
The very next word after this text defines which image to update the display with. It will either say low, medium, substantial, severe or critical, with each word having a defined image attached to it.
Low = 1.png Medium = 2.png Substantial = 3.png Severe = 4.png Critical = 5.png
The code then goes into a continuous loop, checking the website every 12 hours, and updating the image accordingly.
To help you make sure it is displaying the correct image, you can run the code directly from terminal.
python3 inky_display.py
The code outputs the sentence and threat level word to the terminal every time it runs in this way. At the time of creating this tutorial, the threat level is Substantial, so you should see this in terminal:
Retrieved sentence: The threat to the UK (England, Wales, Scotland and Northern Ireland) from terrorism is Next word (image indicator): substantial
To get the script to run at boot without any user interaction you’ll need to edit your rc.local file:
sudo nano /etc/rc.local
Add this to the end of the text in the file, changing the script name if you need to:
python3 /home/pi/inky_display.py &
My images are stored in the /home/pi/inky/images/ folder. If you store yours anywhere else, you’ll need to update the code as appropriate.
I have linked my github repo where you can find all the project files.
Finally, I don’t own a 3d printer, but here is a decent case I’ve found for this project on Thingiverse: Pi Zero E-Paper Pwnagotchi case by Ray1235225 - Thingiverse
This was a fun, and sometimes frustrating, little project for me. I hope someone else finds it useful!
Create an account to leave a comment. Already have an account? Log In.
Become a member to follow this project and never miss any updates