DispatchPi
Share and queue e-ink images through Gmail
Send pictures from your phone to a Pi-powered screen
I built DispatchPi to share pictures with my fiancée, who was working in Québec's remote Nunavik region, where internet is unreliable. The project consists of a pair of e-ink frames that fetch images from a Gmail inbox.
Each frame is powered by a Raspberry Pi Zero and hooked up to a 7.5 inch Waveshare e-ink screen. Their job is to pull an image from a fixed URL at regular intervals. To exchange images, each sender uses a custom shortcut on iPhones.
DispatchPi is built for a pair of picture frames, which we’ll call Satellite frame and Earth frame. The satellite frame displays images received from any sender, while the earth frame only shows from a specific sender. This filtering happens in the web app which serves each audience on a different URL endpoint.
Each frame is powered by a Raspberry Pi Zero and hooked up to a 7.5 inch Waveshare e-ink screen. Their job is to pull an image from a fixed URL at regular intervals. To exchange images, each sender uses a custom shortcut on iPhones.
DispatchPi is built for a pair of picture frames, which we’ll call Satellite frame and Earth frame. The satellite frame displays images received from any sender, while the earth frame only shows from a specific sender. This filtering happens in the web app which serves each audience on a different URL endpoint.
The code for DispatchPi is available here on GitHub. and you can start the tutorial here.
Full Schema
Sharing images, step by step
- You open an iOS shortcut to send a recent picture to a dedicated shared Gmail inbox.
- Every day, each frame pings a fixed URL (server.com/satellite or server.com/earth) This kicks off a series of events:
- The Flask app on Google Cloud run spins up:
- It authenticates into the Gmail inbox
- It filters by sender, to only fetch the image intended for it.
- Brings up the latest email received that contains an attachment
- Converts the image to bitmap and grayscale, overlays the email body text on top
- Publishes the transformed image at the fixed URL
- The Pi attached to the frame downloads the image from the URL and pushes it to the e-ink screen.
- Done!
What you need
- A Google Cloud Platform account with billing enabled
- A pair of Raspberry Pi Wero W with empty microSD cards
- You can find the Pi Zero board on Amazon here, although the price might be better at smaller local retailers, such as here on PiShop.ca
- I bought the board without headers and added GPIO headers with a solderless hammer header kit, as I didn’t feel like fussing over soldering
- This pair of Sandisk 32GB microSD cards should work fine for the project
- Two Waveshare 7.5” e-ink screens for Raspberry pi
- A computer to configure the Raspberry Pi microSD cards and run terminal commands (I’m using a Macbook)
A note on cost
Using Google services like Gmail API and Google Cloud Run is not free. But pinging our lightweight Cloud Run server once a day entails minimal costs. With daily calls to the web app from both frames, I pay about 7 Canadian cents per month. There are usually free trial credits available for new GCP users.
The tutorial
This tutorial covers the whole installation process, which is divided in four parts. For any direct questions, write me on Github or on Reddit.
- Part 1 : Build a local app
- Part 2 : Host your app online
- Part 3 : Setup the e-ink frame
- Part 4 : Create an iOS shortcut