Introducing Inkyshot: an inspirational e-ink display delivering a daily shot of encouragement through a quote or personalized message for you or your loved ones. Based on a Raspberry Pi Zero and e-ink display, Inkyshot is a perfect weekend project whether you’re completely new to IoT or an experienced developer.
Follow this guide to build your own Inkyshot for yourself or someone to whom you’d like to send heartfelt messages of inspiration and encouragement!
Before you start
Using the project
Almost a year ago, after initially joining balena, I deployed my first code using balena with the help of my onboarding buddy. We pushed the game Snake onto a sense HAT, and once Charlie (the unicorn that shows up in the CLI) appeared, my buddy said to me, “And now, we can play snake.”
Not having ever built hack projects myself, discovering and experiencing the ability to remotely deploy containers represented a whole new way for me to connect in personal relationships, which fuels the inspiration behind Inkyshot.
When a tiny message means a lot
My sister and I share an extremely close relationship, despite living in different countries since I left home for college. Throughout the years, we’ve sent each other countless care packages, along with handwritten letters intimating the endless chats hanging out in each other’s rooms at home.
When I first saw the e-ink displays for Raspberry Pi Zero, I fell in love with it, and came up with the initial idea of this project: I wanted to send personal, encouraging messages to my sister that were more intimate than a text message, and faster than our handwritten letters. I mentioned the idea to our Hardware Hacker, Chris, who also wanted to build one for his partner living in another country. Together, we built Inkyshot: an e-ink message display that can pull an inspirational quote of the day, or send messages of your choosing.
Running on balena, the device variables such as message and font can be updated from anywhere in the world, so long as the device is connected to WiFi somewhere. It does not need to stay plugged in - the beauty of this e-ink display is that it will continue to display the message even without being powered!
It’s the perfect way for me to stay connected with my sister, and give her a shot of inspiration and encouragement wherever I am in the world, letting her know that I’m always thinking of her. You can also build a number of these and send them to anyone who needs some daily encouragement (scaling is easy with balena, and free for up to 10 devices)!
- Raspberry Pi Zero WH (make sure it is WH, this means ‘wireless with headers’)
- InkypHAT e-ink display - black & white variant
- Micro USB Power supply
- 8GB (or more) SD Card (we recommend SanDisk Extreme Pro SD cards)
Optional (but very nice to have):
- 3D printed case
- Female Micro USB to DIP Adapter (minimal soldering required!)
The links above are to vendors in the UK; if you’re in the US, Adafruit provides the InkypHAT and Raspberry Pi Zero WH, and here is a link to a Female Micro USB to DIP Adapter
The hardware set-up is pretty straightforward-- you will need a Raspberry Pi Zero WH (with WiFi and the pre-soldered header, unless you’d like to solder a header on yourself), on top of that, the InkypHAT e-ink display, and a Micro-USB power supply to power the Pi Zero. You’ll also need a solid SD card: I recommend the SanDisk ExtremePro, at least 8GB.
The 3D-printed case is optional. If you don’t have a 3D printer, you can consider ordering the print from Shapeways - we’ve provided the STL files here.
In addition to this guide, we’ve also created a build video that shows everything described below in a bit more detail.
For the software, you will need:
Once you’ve created your balenaCloud account, click the ‘deploy with balena’ below:
Select ‘Raspberry Pi (v1 / Zero / Zero W)’ as device type, and ‘Create and deploy’.
At this point, balenaCloud is automatically copying all the software for Inkyshot from the GitHub repo to your application in the background. If you’re already familiar with balenaCloud you can also deploy the code with the CLI.
Next, add your device to the application by flashing your SD card. Within the application, select on the upper left corner ‘Add device’ being sure to select ‘Wifi + Ethernet’ to set up the wireless network. Enter your WiFi SSID and password - this injects the details into the downloaded OS so that the device will automatically link up to the WiFi when it starts up.
Once you download the OS image, use balenaEtcher to flash the image onto the SD card.
Once the flashing is completed, insert your SD card into the Pi and power it up. It will take a few minutes to show up on your balenaCloud account.
After the device appears online in the dashboard, it will start to download the Inkyshot application; your dashboard should then look something like this, showing the service running.
Once you have the software running properly, you will have to fit it into the case and set up the female micro USB to DIP Adapter so that you can plug it in from the back of the case.
This can be set up in various ways depending on the case you’re using, but in either case you’ll have to solder wire from the Pi Zero onto the PCB of the adapter. Chris created a build video demonstrating and explaining how to assemble the case here.
Using the project
We’ve created the Inkyshot message to be updatable via the balenaCloud dashboard. There are default settings if they are not defined, however, if you’d like to customize and change things, you have to set up the variables.
Go into the device through Application and select the device (it will have a unique name). On the left bar you’ll see ‘D(x) Device Variables’ select it and add the following variables if you need them:
- For changing fonts (there’s a list of fonts available):
FONT(value must be one of the preset fonts, see GitHub Readme)
- For adjusting the font size:
FONT_SIZE(value must be a number)
- For changing the message:
INKY_MESSAGE(value must be a string of words)
- For changing the test character1:
TEST_CHARACTER(value must be a letter)
- For rotating the screen:
ROTATE(value must be a number)
If using Inkyshot for the quote of the day feature:
- For setting when to update the Quote of the Day message:
UPDATE_HOUR(value must be a number between 0 and 23)
- For setting timezone:
TZ(value must be from the TZ database names)
1: The test character determines where the line breaks happen based on the width of a character. If you have an ‘l’ as a test character, it’s likely not going to fit on the screen. If you have an ‘m’ as the character, the margins will likely be too large. The default test character is ‘a,’ which seems to be a good choice of an average character width for most fonts.
And that’s it! Your Inkyshot will now display the Quote of the Day from the They Said So ® REST API, and you can now update your Inkyshot message through the balenaCloud dashboard!
You can use Inkyshot to…
- Start your day with an inspirational quote that changes every day
- Send personalized messages to your partner in a long distance relationship
- Send personalized messages to your family and friends living in other countries
- Send special occasion messages, like ‘Happy Birthday!,’ ‘Happy Mother’s Day,’ ‘Happy Anniversary!’
- Use it to post reminders to yourself
- Make it into a refrigerator magnet to remind you what you need to buy
- Post a daily affirmation to repeat to yourself throughout the day
- Put it at your office desk as a message or status for others, like, ‘Out of office! Leave message with Chris!,’ ‘In a meeting, returning at 3:30PM,’ ‘Welcome to the balena London office!!’
- Put up a word of the day you’d like to learn - new SAT vocabulary, language study, terms you need to learn
The possibilities are endless! Share below your favorite use-case for Inkyshot or idea you have for it!
Until next time
Among the many things I could have built for my Hack Friday project, Inkyshot inspired me the most - it’s something that could make use of technology to create a positive impact on my relationship with my sister by keeping us connected.
Seeing it go from an idea to completion has been a magical feeling that I hope is shared by everyone who builds this project. It is my intention that Inkyshot will bring the same joy to you and your loved ones, wherever in the world they might be, and that it inspires closer connections in our most cherished relationships.
Build this project
If you end up building this project, please let us know on Twitter, Facebook, Instagram, or on our Forums. We'd love to meet other folks who find Inkyshot useful. If you get stuck anywhere along the way, or have any questions or recommendations on how to improve the project, please let us know.