Lessons learned from creating my first device

Posted on May 16, 2026

Introduction

My goal was to create a device with a display which would be able to show the agenda from the CalDAV server and weather forecast. I wanted it to be small so it can stay on a desk and not occupy too much desk space. I decided to use the following hardware for it:

  1. Raspberry Pi Pico W
  2. Waveshare 2.13" e-ink display with a shield
  3. Tactile button
  4. White LED

Here is the final result together with a 3D printed case:

Final result 1

Final result 1

Final result 1

Final result 2

Final result 3

Lessons Learned

a.k.a. mistakes that I made

a.k.a. things I would do differently if I were to do this all over again.

  1. Buying e-ink display module with fixed layout bespoke for plugging in Raspberry Pi Pico.

E-ink display module

This was bad a bad idea for a few reasons.

  • It requires you have a pico with a soldered headers in order to plug it in which is not very concenient to work with when you want to connect other things to the Pico, like buttons or LED.
  • The black extension for plugging in the Pico actually takes some precious space. When I was designing the case for it, this created quite some headache, how to make everything fit inside the case.
  • Following the above point, this forced me to place Pico in a specific position fixed to the screen, instead having this in a more accessible place inside the case.
  • Finally, it forced me to use Pico. During the development whenever I felt like switching to another microcontroller (for different reason, e.g. power consumption) having this display module prevented me from doing it

What I would do differently next time? I would try to buy an e-ink display module that is independent to the microcontroller and works with Arduino, Raspberry Pi Pico, or any ESP32. It should also allow me to plug it in using jumper wires easily.

  1. Using MicroPython

Let me start with stating that MicroPython is great. It really is. But. It has its own limitations. As long as you keep things simple it works great and is super easy to start. But as soon as you dive a bit deeper into the hardware, trying to reduce power consumption or debug certain aspects of the code, you realize that this abstraction layer is getting in your way.

If I were to start the project from scratch, I would choose the native SDK to develop the firmware.

  1. Not thinking about power consumption early enough

I used Li-Po battery with 1700mAh. That’s quite a big battery for a device that uses e-ink display and in theory should consume close to none power when idling. However, due to how Pico is constructed, this battery will only last for about a month. I’ve only learned that there are much better devices suited for low power consumption tasks when I was neck deep into this project. I could have squeezed much more time on a much smaller battery for this one.

If you know your project will be battery powered, do a proper research on power consumption for your microcontroller and modules you are going to use.

  1. Trying to do too much on the device itself.

The device is supposed to display the agenda from my calendar and show the weather forecast. In order to do the first one, I implemented simple HTTP server using flask (Python web framework). Using this web abb, I created simple API which I’m calling from the Pico and getting the result I can display. This is great first step, but now thinking about this what I could do, is I could have used the Pico itself purely as a viewing device, and use the backend to send the entire content to it. What do I mean by that exactly:

  • Server creates a packet with text, font name, X and Y coordinates
  • Pico receives the above, unpacks it and renders on the display

What this would allow me to do is updating and fixing potential bugs without ever touching the firmware again.

If you are creating backend for your device, make full use of it. This will simplify making any updates to the device in the future without disassembling it.

Summary

I think this is all for now. The list might grow if I think of anything else.