F91 Kepler: Turning a $20 Casio F-91W Into a Bluetooth OLED Smartwatch

F91 Kepler completed build showing the Casio case fitted with glowing blue OLED display

TL;DR: F91 Kepler guts a 20 dollar Casio F-91W and rebuilds it around a TI CC2640 Bluetooth board with an OLED display, keeping only the original case. Open GATT firmware gives call and text notifications with about 15 days of battery, but there's no phone app yet and the project sits dormant. Full build tour plus an Ollee Watch comparison inside.

What F91 Kepler Is

F91 Kepler is an open source hardware rebuild that keeps only the case of a classic Casio F-91W and replaces everything inside with a custom Bluetooth Low Energy board and an OLED display.

Where most Casio mods swap a strap or add a light, PegorK went all the way. The original movement, PCB and LCD leave the case for good. In their place goes a two layer board of his own design carrying a Texas Instruments CC2640 Bluetooth SoC, a 0.83 inch SSD1306 OLED behind a custom adapter, and a resin 3D printed movement holder that makes it all fit the original case, caseback and battery clamp. The firmware exposes call and text notifications plus clock services over documented GATT characteristics, controllable today from generic BLE tools like nRF Connect. The repo holds the DipTrace PCB sources, the CCS firmware, the STL style holder approach and an unfinished phone app folder, all under MIT, free for anyone to finish. With 274 stars and 25 forks it is one of the most watched Casio brain transplant projects on GitHub, even though the author has openly set it aside.

Why the F-91W Is the Perfect Donor

The Casio F-91W has run in continuous production since 1989, sells around 3 million units a year for about 20 dollars, and runs up to 7 years on one coin cell. Presidents have worn it, soldiers trust it, and hams buy it as the beater that survives tower work. Its weakness was never the resin case or the pushers. It was the frozen feature set: drifting time, one alarm, no sync, no awareness of the phone in your pocket.

That combination makes it the ideal transplant patient. The case is cheap, standardized and comfortable, the parts supply is endless, and destroying a 20 dollar donor hurts nobody. If the mod fails, you buy another donor at any mall. PegorK understood this better than most builders. He kept every part of the watch that was already perfect and replaced only the parts that were obsolete.

F91 Kepler completed build showing the Casio case fitted with glowing blue OLED display
The completed F91 Kepler build in its original Casio case. Photo: PegorK, MIT licensed project repo.

Hardware Tour: Board, Display, Holder and Jig

Main Board on a Two Layer Budget

The main PCB was drawn in DipTrace, and the free version covered the whole design. It follows the TI CC2640 reference requirements rather than reinventing RF layout, which is exactly the right call for a first Bluetooth board. The first spin used FPC connectors for the display and for programming. The second spin replaced them with a Molex board to board connector for the display and small bare connection points for programming, saving room and removing the fiddly job of mating tiny FPC cables inside a watch case.

The boards were printed by OSHPark at 0.8 mm thickness. That's a touch thicker than the original Casio 0.6 mm board, but the price and turnaround beat Chinese 0.6 mm services once shipping time entered the math. Two layers, one MCU, conservative layout, ordered from a famously maker friendly fab. It's a template any ham comfortable with HF prototyping can follow into their first RF capable PCB.

Display Adapter From 28 Pins to I2C

The 0.83 inch SSD1306 OLED exposes 28 pins, far too many to route inside a watch. The adapter board collapses them to a simple I2C interface the CC2640 speaks natively. The first adapter revision paired with the FPC connector and proved too bulky. The slimmer second revision rides the Molex connector and fits. The honest build note in the README warns that hand soldering those Molex contacts is an absolute pain, which matches every builder report on fine pitch board to board parts. Hot air, flux and magnification aren't optional here.

Movement Holder Printed in Resin

The original plan was to reuse the Casio movement holder with sanding and cutting. After destroying a few holders the author bought an Elegoo Mars 2 resin printer, learned Fusion 360, and printed a holder that hugs the new PCB exactly while reusing the original battery clamp. The OLED edges needed light sanding to clear the case walls, but the case and caseback stayed original and unmodified. For collectors this matters enormously. Every change is reversible except the sacrificed donor movement, and the watch still closes with factory parts.

Programming Jig With Pogo Pins

Dropping the debug FPC connector meant programming needed another path. The answer is a resin printed jig holding tiny spring loaded pogo pins that press onto the ten connection points on the PCB, wired out to a TI Launchpad. From there TI SmartRF Flash Programmer 2 loads the image. It's a professional solution to a hobby problem, and the jig design alone is worth studying for anyone who programs bare boards regularly.

Firmware Tour: Documented GATT Services

The firmware builds on TI Simple Peripheral sample code under Code Composer Studio 10.1.1 with BLE-Stack 2.2.5 and ARM compiler 18.1, all TI supplied. Two custom services carry the whole feature set, and both are documented down to the byte in the firmware README:

Service and characteristic Properties Purpose
Notification Service, Notification Bar Read, write, uint8 Selects which notifications show in the top bar
Notification Service, Incoming Call Write, uint8 array Full screen incoming call with contact name
Notification Service, Incoming Text Write, uint8 array Full screen incoming text with contact name
Clock Service, Time Read, write, uint32 UTC time in seconds
Clock Service, Time Zone Read, write, uint16 Seconds west of UTC
Clock Service, Time Mode Read, write, uint8 12 hour or 24 hour display
Clock Service, DST Read, write, uint8 Normal or daylight saving flag

Because every characteristic is published, any BLE central can drive the watch. Today that means nRF Connect with hand typed values. Tomorrow it could mean a Python script on a Raspberry Pi pushing repeater alerts, a Node-RED flow mirroring shack notifications, or the unfinished phone app in the Software folder doing calls automatically. Open GATT tables are an invitation, and this one is unusually complete for a solo project.

F91 Kepler OLED showing an incoming text notification on the wrist
Full screen text notification on the tiny OLED. Photo: PegorK project repo.

Current State and Honest Limits

The author status notes are refreshingly blunt. As of mid 2022 the watch takes Bluetooth calls, shows full screen call and text notifications with a notification bar, wakes on one button, and runs roughly 15 days with several screen wakes a day. Fifteen days of smartwatch use from a watch sized cell is genuinely impressive next to commercial watches that die nightly.

The unfinished list is equally blunt. There's no phone app, only nRF Connect poking. Time can't be set from the buttons yet. Sound traces exist on the PCB but no buzzer code runs. Battery efficiency can improve, the programming jig wants a friendlier revision, and rechargeable operation is still a wish. The August 2025 header note says the project sits preserved for inspiration after the author burned out, moved from GitLab to GitHub, and opened everything for others to continue.

Build this with eyes open. It's a dormant advanced project, not a product. You need hot air soldering skill, TI toolchain patience, a Launchpad or XDS emulator, and tolerance for debugging BLE by hand. What you get is a one of a kind instrument and a complete education in wearable design.

F91 Kepler watch face lit on the OLED inside the original Casio case
Main watch face glowing in the stock case. Photo: PegorK project repo.

F91 Kepler Versus Stock and Ollee Watch

Item Stock Casio F-91W F91 Kepler Ollee Watch
Approach Factory original Full brain transplant, open source Drop in replacement board, commercial
Display Classic segmented LCD 0.83 inch SSD1306 OLED Original LCD retained
Radio None TI CC2640 Bluetooth LE Bluetooth LE with phone app
Notifications None Full screen call and text via GATT Calls, texts, weather, alarms via app
Battery life Up to 7 years coin cell About 15 days 10 months daily use
Time setting Buttons BLE only, buttons planned App plus buttons
Sound Beeper Traces only, no code yet Loud buzzer
Build skill None, buy and wear Hot air SMD, TI toolchain, jig Screwdriver only, no solder
Cost shape About 20 dollars Parts plus tools plus weekends 55 dollar board or 99 dollar watch
Project state In production since 1989 Dormant, open for contributors Shipping product with app
Best for Beater purists Builders who want OLED and open firmware Users who want features this week

Readers who want the full Ollee breakdown should see the companion guide to the Ollee Watch Bluetooth Casio mod. The two projects answer different questions. Ollee asks how much smart a Casio can gain without changing its soul. Kepler asks how much of the Casio can be replaced before only the case remembers.

Ham Radio Uses Worth Trying

A wrist notification mirror earns its place on a summit. Phone buried deep in the pack for warmth and battery, watch showing who is calling and whether that text is the summit to summit reply that matters. For net control at public service events, call screening without pulling out a phone keeps eyes on the course.

The open GATT profile invites shack automation. A Pi that watches the DX cluster or the repeater controller could push callsign alerts to the wrist over BLE. Contest loggers could mirror multiplier spots. APRS messenger bridges could vibrate the wrist when a message lands for your callsign. None of this exists yet, which is precisely the opportunity. The characteristics are documented, the toolchain is free, and the hardware fits in a 20 dollar case.

Time discipline is the quiet win. A watch that syncs UTC over BLE never drifts the 30 seconds a week that corrupts skeds, satellite passes and FT8 windows. Pair it with the phone GPS clock and the wrist becomes a stratum of the station time chain.

Builder Path If You Take This On

Start by reading the Hardware README end to end, then the firmware README, watching how the GATT services map to the UI. Order the OSHPark boards and the buydisplay OLED first since they set the mechanical constraints. Print the movement holder in resin, since FDM layer lines will fight the tight tolerances. Assemble the display adapter under magnification before touching the main board. Bring up the Simple Peripheral sample unmodified on the Launchpad, confirm BLE advertisement, then flash the Kepler app and poke characteristics from nRF Connect before writing a line of app code.

Finish what the author listed, in his order. Automatic call handling app first, since manual nRF poking is the current ceiling on usefulness. Button time set second, since a watch that can't set time without a laptop is a demo. Then sound, efficiency and rechargeable power. Each step is a self contained contribution the author explicitly invited.

Sources and Further Reading

73 de 9M2PJU

Post Comment