A sensor-packed "smartwatch" afflicted with poor wiring design choices, zero water/dust resistance, and massive feature creep.

Similar projects worth following
Originally built this watch to measure air quality (particle counts/PM2.5), as a way to debug my home air-filtration system, and to notify me what locations it might be wise to mask up (even while alone).

I had a few old parts from a previous attempt to build a sensor watch (had to add them because why not), and then I heard about the Hackaday cyberdeck competition, so the watch ballooned into the overbuilt rats-nest of components and wires it is today. The hardware is (probably) done, but I'm continually fixing and adding functionality through software.

  • Design Philosophy
    • Has to be *actually* wearable enough to wear every day.
      • Comfortable
      • doesn't interfere with my mobility 
      • Not just a nerd conversation piece that sits on my workbench.
    • Provides useful information that I reference often (at minimum hourly).
    • Enough battery life to maintain all sensor/logging functions continuously for ~12 hours before recharging.
    • Exposed wires and boards for that "cyberpunk" aesthetic. (Kinda conflicts with the "wearable" requirement, because as soon as it starts raining I got problems.)
  • (Kinda) Unique Features:
    • Three screens driven from a single ESP32-S3 microcontroller.
      • Circuitpython natively supports only a single display bus, but you can change a parameter that allows more than one, and custom build from source. Note: this is kinda buggy, and the buses aren't properly released upon reset (Hard Crashes), so I'm SOL if the watch crashes and I'm not near a computer to manually reset and reload the code.
    • It's a watch that reads out atmospheric particle counts (I haven't seen any other watch do this, at least in my limited search)
    • Can store and display all my QR/barcode IDs (memberships/bonus cards/ bed/bath/beyond coupons?) on a laser-scannable SHARP display.
    • Plug-and-Play I2C expandability- hot swap I2C devices (some add-on boards get mad when you do this, but it still generally works when I've got coroutines coded for the add-on in question)
    • Twin Clicky Rotary encoders for control!
  • Compact, light, and useful enough to wear daily. Not just nerd-candy, I actually rely on the data it gives me.
  • Currently Implemented (Functional) Capabilities:
    • Tells the time (it's a *watch*)
    • Reports PM2.5 particle concentrations (air quality)
    • Reports temperature (sensor is raised a couple centimeters above the wrist to avoid body heat/other electronics heat)
    • Reports relative humidity
    • Reports barometric pressure
    • Reports battery level (built-in voltage monitor on the ESP32-S3 doesn't play well with Circuitpython- known issue that is still unresolved on the adafruit github, but I just coded around intermittent failure with try/except.)
    • Scans and Reports list of nearby 2.4GHz Wifi APs
    • Displays Barcodes/QR Codes on SHARP display for laser barcode scanner compatibility
    • Plays a NyanCat animation on the TFT display 0_0
    • RTC time setting through GPS (currently manually actuated due to I2C buffer weirdness in PA1010D GPS unit)
    • RGBW Programmable Neopixel Flashlight 
  • Successfully Tested, but not currently implemented Capabilities:
    • Cycle through multiple different sprite animations on all 3 screens
    • connect to Wifi access points, parse web data
    • Datalogging onto an SD card from sensors
  • Planned Software Features that haven't been implemented/tested yet
    • Bluetooth stuff
    • remote control of IOT devices (probably MQTT)
    • Access Point emulation for file serving from SD
    • General Wifi shenanigans (Packet capture/logging, Deauth, etc.)
    • uploading log data through wifi
    • GPS waypoint setting/finding
    • IoT control through GPS localization + manual control
  • Features that I might try to add if I'm feeling crazy enough (unlikely)
    • LoRa messaging (kinda expensive to make peripheral devices though)
    • ToF distance measurement (not hard to implement, but I don't really have a daily use-case for a distance sensor.)
    • Reprogrammable NFC tags (also trivial to implement, but I have a Flipper Zero that fulfills this niche for me much more effectively).

View all 19 components

  • Additions, Solutions, and more Problems

    Rob10/08/2022 at 18:39 0 comments

    Slowly continuing to update code and add some functionality (updates on Github). Most recent additions are:

    • a 4W RGBW LED from Adafruit (I really needed a flashlight)
    • replaced the TP4056 lipo charger with another charger: ( ). Higher charging current (2A max as opposed to TP4056's 1A), and USB-A power output (if I ever need to charge a USB-A device, which is probably inadvisable due to my watch's power-hungriness). This new IC also properly negotiates voltage with USB-PD chargers, so I no longer have to use USB-A to USB-C cables.

    I also solved a reset problem I was having- before, if my watch crashed (which it does fairly often), I had to reconnect it to my computer and reload the code to get it out of its crash state. I think this has something to do with Circuitpython not being explicitly designed to support multiple display buses; on hard reset it fails to clear the SPI bus (SCK in use error). After a bit of digging, I tried coding in a try/except where if the bus isn't clear on startup, the microcontroller initiates a soft reset. This worked!

    Unfortunately, it seems that my RTC unit (in an Adalogger featherwing) has become quite unreliable, and stops working randomly. Whenever it stops working, I have to completely cut power to reset it- which means I also had to remove the coin cell backup timekeeping battery. I'm also seeing terminal outputs that suggest my rotary encoders connections are flaky, and I had to add some try/excepts to make them fail gracefully upon disconnect, and start back up on reconnect. I think it might be time to rip the hardware up and wire everything back together cleanly, just to eliminate as many potential sources of instability as possible.

View project log

Enjoy this project?



Tillo wrote 10/11/2022 at 20:24 point

This, for sure, is the most cyberpunk thing I saw in a while. Well done.  Even I'm not totally convinced you achieved that comfortable for wearing every day design goal.

  Are you sure? yes | no

hampus.seton wrote 10/09/2022 at 20:04 point

are there any build instructions available? I would love to build one

  Are you sure? yes | no

Timo wrote 10/05/2022 at 15:26 point

Rrrrrr... Me, like!

  Are you sure? yes | no

peter jansen wrote 09/29/2022 at 05:31 point

This is absolutely hilarious

  Are you sure? yes | no

gmathews wrote 09/28/2022 at 18:08 point

lol, this is awesome Rob! 

  Are you sure? yes | no

n0n4m3 wrote 09/26/2022 at 07:27 point

When can I buy one? This sexy watch belongs on my wrist. Free workout included, my left arm is gonna be so buffed!

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates