blueprint | ||
include | ||
lib | ||
res | ||
src | ||
.gitignore | ||
EPaperAnalog.code-workspace | ||
platformio.ini | ||
README.md |
E-Ink Analog Display
Best of both worlds: E-Ink display with analog clock face.
Introduction
I got a very very cheap multimeter a while ago at school and I didn't have any leads that fit and I already had a multimeter so it was somewhat useless to me. However, the size of it's analog face did closely match the size of the 2.13" E-Ink display commonly found on cheap development boards like the T5 E-Ink from LilyGo.
I am a big fan of displays, had several T5 E-Ink displays laying around doing nothing and love the look of old (analog) display tech so I decided to combine the two and make a analog display that has a changeable face. It connects to Home Assistant through MQTT and the value can be updated using the included automation. It can display any numeric value with a little configuration.
Of course, the arm is not all that accurate and the display is always going to be slightly off but it's a quite a fun display piece while still being useful.
Hardware
- LilyGo T5 E-Ink
- MF-110A Multimeter
- Lithium Ion Battery
- Power Switch
- 10k potentiometer
- 660 Ohm Resistor
- 2 Buttons 10k pull-up resistors (Optional)
- 2 LEDs with 220 Ohm resistors (Optional)
I would include a schematic but to be very honest I never made one myself and it's pretty straight forward. The T5 has the E-Ink display connected and includes everything needed to use and charge a Li-Ion cell as well. I replaced the power switch on the board to an external one so I could include it in the case.
The pointer is controlled by a voltage divider using the potentiometer and 660 Ohm, the potentiometer is connected to DAC pin 25 and the 660 Ohm is connected to ground. The program will always do a test run and set the pointer to both extremes of the display where you will be able to calibrate it. Double clicking the left button will also start the calibration routine.
Buttons and LEDs are on a small part of prototype breadboard under the faceplate of the case. Buttons are connected to 20 and 21 with 10k pull-up to 3.3V, shorted to ground when pressed. Finally I added some LEDs to light up the display in the dark, these are always on and connected straight to the 3.3V rail with a 220 Ohm resistor.
Models
I've included the F360 models for this case in res/models
, I'm still learning CAD modelling so it's far from perfect but it works well enough. I made the window from an old CD case and glued it in place.
The paint job on this particular case was an experiment for another project still in the making. I also tried to do some ABS smoothing to get that old bakelite plastic feel; But it turned out I didn't have normal ABS and it ended up warping the case and not smoothing it at all, whoops.
Software
All software is written using PlatformIO, the display and the faceplate are all generated by the class einkanalog
and MQTT is handled by the class mqtt
.
The display will listen for any MQTT values in the /homeassistant/ead/unique_id
topic. The value needs to include the following:
- Name
- Value
- Unit
- Min value
- Max value
- Amount of segments in face
The automation can be setup using the blueprint in
/blueprint
The display can switch between topics using the buttons, the current max is 10 but this can be easily changed in /src/helpers/mqtt.h
I didn't really keep others in mind when building this project so it's not very user friendly to setup. Keep the following in mind if you choose to build this project:
- MQTT credentials need to be setup in
/src/helpers/mqtt.cpp
- WiFi credentials need to be setup in
/src/main.cpp
- MQTT IP and Port need to be setup in
/src/global.h
Thank you for reading!
Arne van Iterson, 2024