This page is about my attempt to build a low-tech smartwatch that would retrofit within these old 90s' Casio watches. I have a working prototype (PCB, BLE, Firmware (Rust), antenna: all functional) but I am missing the screen and haven't fully finalized the electronics (manufacturing issues, poor hiring choice, and because "money"). More on that at the end.
(By the way, I'm looking for a job)
The idea was to build something very simple. Do 10% of what a modern smart watch can do, for 10% of its price. Something cheap, hackable, that retrofits within a Casio watch, with a low-tech approach.
K8MOD is a piece of electronics that fits right inside a Casio watch. It's made to replace the Casio module.
The Casio model that I was targeting is named F91W. The most famous Casio, and according to Wikipedia, the most sold watch in the world.
The main idea is to upgrade what this watch can do, without losing its retro vibe. The K8MOD module is connected to a smartphone via Bluetooth (BLE), and it would run "apps".
There's enough memory in the watch to install ~20 apps. Those apps can control Spotify, display today's weather, show the price of Bitcoin, share your social media account with one tap on your friend phone (via NFC), track your workout, control your smart-light (or any IoT device you have), check phone notifications, etc.
Apps are built in C and sideloaded to the watch with a smartphone. An app has an optional JS counterpart
which runs on the phones, which can act as an internet gateway for the watch. Here is the full code for the weather app for example (
C file and
To control the apps, I re-purposed the 3 Casio buttons. There's a Top-Left button, and a Bottom-Left and a Bottom-Right button.
Pressing the Top-Left button would just focus the next app. Long press would turn on the back light.
The Bottom-Left and Bottom-Right buttons are dedicated to the currently focused app. For example, for the Spotify app, the 2 bottom buttons would act as Previous Track / Next Track buttons. For the Volume app, it decreases/increases the volume. For the Notification app it dismisses/keeps notifications. Etc.
To me, keeping the screen as simple as the original Casio was crucial. But the original screen was too limited. It was too difficult to display any readable text. So I redesigned the screen and doubled the amount of "segments". As you can see, the "pixels" on a Casio watch are not really pixels, but lines. We call them segments. A regular Casio watch has ~80 segments. The K8MOD screen has 164 segments. Most of these segments are used for the top row which would allow to display 9 letters, and a matrix of dots, which can be used to display little animations.
The screen comes with a backlight that would only turn on when the user would long-press on the Top-Left button.
And even though this is a simple segment based display, I managed to simulate some smooth-enough transitions:
The inclusion of a buzzer and a vibration motor turned out to be a lot more useful that I initially thought. There's so much I wanted to draw on the screen to give feedback to the user (looped through options, reached the end of a list, did a valid / invalid action, etc), but it was really stretching it. 164 segments is really not that much.
The buzzer/vibration is used for the alarm and notifications, but turned out it's also very useful for feedback. To signal "valid" action, I would use a short pleasant beep, and longer-lower-pitch noise for invalid actions feedback.
In silent mode, I would use the vibration only.
The original plan was to design a system that would not require a daily charge. Maybe once a week? It obviously depends on the usage. I considered using on a lithium coin battery as non-rechargeable batteries are smaller than rechargeable ones, and do not require the wiring to recharge them, and we could pack much more energy within the available space. That would allow the watch to run without recharging for a lot longer, and then the user would just install a new battery. This is not something I really had time to actually study. I don't know how realistic this is, and I'm not sure this would be great when it comes to environmental impact.
dlopen on bare metal). Also tried to run some bytecode + vm, but that was too much to ask for such a small platform.
This was my first time working on hardware, and it turned out to be a lot more complicated that I imagined :) I learnt a ton.
Working with factories and electronics engineers were invaluable experiences, but they came with a lot of frustration. Designing the screen, even with such a "basic" technology (segment-based LCD screen), turned out to be very expensive in time and money (tooling, MOQ, and work on the wiring design for the 164 segments) and required a lot of expertise I do not have.
If you can be of any help for that stage, feel free to reach out.
firstname.lastname@example.org / twitter.
And by the way, I'm looking for a job.