Ok, we can argue about the smart part, but let's call it that way ;).
The goal of this project is to build a DIY smartwatch (with WiFi + Sensors) that runs for a month. Key is to use an e-ink display (like a Kindle) and lots of deepsleep.
It is mainly based on
- a 3D printed case (PLA) and wristband (TPU)
- an ESP8285-M3 module
- an e-ink display
- a BME280 environment sensor
- a DS1307 for time keeping
- a custom PCB + additional parts for power and charging
The software/firmware is under code
, using the platformio framework to build. It currently is in ALPHA which means I'm playing around with adding features and functionality. The basic functionality of different watchfaces and refreshing every minute works, as well as sensor data and charts work ๐. An initial case already works, but might need further updates.
Everything else is still TODO. I am developing this in my spare time, so documentation is incomplete.
Click on the image below for a demo (there are more videos on my Instagram):
If you want to join this project and help developing the hardware + code, these are the links I used for ordering. You can contact me via instagram to check if there are free PCBs ;).
- PCB https://aisler.net/uvwxy/pauls-3d-things/esp-watch (You can solder this manually, but I highly recommend using a stencil, and a hot air gun)
- 1x Switch
- 2x Buttons
- 1x 4x30x35mm LiPo
- 1x micro USB Connector
- 1x ESP8285-M3
- 1x 200x200pix e-ink Display
- 1x BME280
- 1x DS1307 (I desoldered the ds1307 and oscillator from the board)
- 1x 3.3V LDO - MCP1700
- 1x LiPo Charger - MCP73831
- SMD 0603 capacitors and resistors (1k, 2x10k), (2x1uF, 2x4.7uF, 1x10uF)
- 1x SMD 1206 LED
PCB REV.10:
- the button footprints have been updated, they might fit now
- the pins 4+5 on the usb footprint are corrected
I know the schematics can be cleaned up. I haven't spent that much time with KiCad, so if you have advice, please let me know. The same goes for the PCBs.
Use the following LUT in u8x8_d_ssd1607_200x200.c
, starting at line 306. It has less flickering
/* orginal values without 0-0 and 1-1 transition */
U8X8_A(L(3,0,0,3)), // 0x02
U8X8_A(L(3,0,0,3)), // 0x02
U8X8_A(L(3,0,0,3)), // 0x01
U8X8_A(L(3,1,0,3)), // 0x11
U8X8_A(L(3,1,0,3)), // 0x12
U8X8_A(L(3,1,0,3)), // 0x12
U8X8_A(L(3,2,0,3)), // 0x22
U8X8_A(L(3,2,0,3)), // 0x22
U8X8_A(L(3,2,1,3)), // 0x66
U8X8_A(L(3,2,2,3)), // 0x69
U8X8_A(L(3,2,2,3)), // 0x69
U8X8_A(L(3,1,2,3)), // 0x59
U8X8_A(L(3,1,2,3)), // 0x58
U8X8_A(L(3,1,2,3)), // 0x99
U8X8_A(L(3,1,2,3)), // 0x99
U8X8_A(L(3,0,2,3)), // 0x88
U8X8_A(L(3,0,0,3)), // 0x00
U8X8_A(L(3,0,0,3)), // 0x00
U8X8_A(L(3,0,0,3)), // 0x00
U8X8_A(L(3,0,0,3)), // 0x00
Also, we speedup initialization by calling u8g2.initDisplay();
instead of u8g2.begin()
;
And, by disabling the line 370 with a comment: // u8x8_d_ssd1607_200x200_first_init(u8x8);