What Could Possibly Go Wrong: Remote Frame Part 0
A way to bring together my dabbles in hardware, low-level machine code, and some strong opinions on REST APIs

This project has been a long time coming. A way to bring together my dabbles in hardware, low-level machine code, and some strong opinions on REST APIs. With any luck, I'll have a working embedded device and a web service to power it, and you'll get to follow every step along the way.
So what am I building?
The eventual goal is to build a Power-over-Ethernet (PoE), Internet of Things (IoT) e-Ink photo frame with an API-first web application to manage devices.
There. Have I used enough buzzwords yet? (All signs point to no.)
The Software
The idea for this project actually started on the web service side. I've been in a ton of feedback sessions about APIs for work, and I've been thinking quite a bit about API design best practices. At some level, APIs can and should be treated as a core part of a software product and given the same level of thought and product attention as the user interface.
But with all that said, I've never actually built one from scratch. I wanted to find a concept for a web service, design its APIs, then string together AWS services to make it a reality.
Planned Software Features
- Oauth 2.0 Login, API Authentication, and Device Authorization
- REST API for uploading and managing images and devices
- Server-side image encoding and distribution
- Device APIs for retrieving images and configurations
- OpenAPI Documentation
- Infrastructure-as-Code (IaC)
The Hardware
As I started thinking through the idea of building a web service, it occurred to me that I had some interesting hardware to include. A few months ago, I ordered a few WIZnet W6100-EVB-Pico2 boards and matching WIZPoE-P1 modules. I was originally planning to use these for a remote temperature monitoring project, but this idea seemed like it would be more fun.
The W6100-EVB-Pico2 boards are pin-compatible with a standard Raspberry Pi Pico 2 and add an Ethernet port, dedicated network processor, and PoE support via expansion module. I added on a 4.2" e-Ink display and Pi Pico-compatible driver board from Waveshare. The display supports 4-color grayscale at 400x300 pixel resolution. After building out a proof-of-concept, I'm planning to upgrade the display to a bigger 7-color e-Ink screen.
Planned Hardware Features
At this point, I have no idea if I'll actually be able to shoehorn all the operations I need into the Pi Pico 2 microcontroller, but I won't know until I try.
- Device Authorization Flow with QR Code
- Network stack and HTTP client with ability to make API calls
- e-Ink screen driver with ability to display images from on-device storage
- Consistent polling for new images or support for push notifications to device
All of this will be wrapped in a 3D-printed enclosure, possibly inside of an actual picture frame.
What's Next
I'm currently working on proof-of-concept implementations of the device firmware. Keep an eye out for a post about the e-Ink display driver and grayscale image encoding in the next few days!
After that, I'll start working on network and internet access, with the goal of making basic API calls.
Once I've got a rough version of the firmware, I'll start sketching out the web APIs and defining the overall architecture.
This post is part of an ongoing series. Follow along here for more posts about the Embedded Photo Frame!