Application Library

Watch faces

Watch Face Chooser

A tool to select a suitable watch face.

_images/FacesApp.png

The app is intended to be enabled by default and has, therefore, been carefully structured to minimize memory usage when the app is not active.

Digital clock

Shows a time (as HH:MM) together with a battery meter and the date.

_images/ClockApp.png

Analogue clock

Shows the time as a traditional watch face together with a battery meter.

_images/ChronoApp.png

Screenshot of the analogue clock application

Digital dual clock

Shows a time (as HH and MM vertically) together with a battery meter.

_images/DualClockApp.png

Fibonacci clock

The Fibonacci sequence is a sequence of numbers created by the Italian mathematician Fibonacci in the 13th century. This is a sequence starting with 1 and 1, where each subsequent number is the sum of the previous two. For the clock I used the first 5 terms: 1, 1, 2, 3 and 5.

_images/FibonacciClockApp.png

Screenshot of the fibonacci clock application

The screen of the clock is made up of five squares whose side lengths match the first five Fibonacci numbers: 1, 1, 2, 3 and 5. The hours are displayed using red and the minutes using green. When a square is used to display both the hours and minutes it turns blue. White squares are ignored.

To tell time on the Fibonacci clock you need to do some calculations. To read the hour, simply add up the corresponding values of the red and blue squares. To read the minutes, do the same with the green and blue squares. The minutes are displayed in 5 minute increments (0 to 12) so you have to multiply your result by 5 to get the actual number.

Word clock

Shows a time as words together with a battery meter and the date.

_images/WordClockApp.png

Resistor Clock Face

Following https://hackaday.com/2021/07/15/a-perfect-clock-for-any-hackers-ohm display the time as HHMMSS DDMMYYY in 6+8 bands using the resistor colour code.

This is very good if you want to learn the resistor colour codes, you pick them up very rapidly.

Colours taken from https://people.duke.edu/~ng46/topics/color-code.htm (grey moved from CCCCCC to C0C0C0)

Code adapted from fibonacci_clock.py by Johannes Wache Display the time in using the resistor colour codes

_images/ResistorClockApp.png

Built-in

Step counter

Provide a daily step count.

_images/StepCounterApp.png

The step counts automatically reset at midnight.

Application launcher

_images/LauncherApp.png

Settings application

Allows a very small set of user preferences (including the date and time) to be set on the device itself.

_images/SettingsApp.png

Note

The settings tool is not expected to comprehensively present every user configurable preference. Some are better presented via a companion app and some particular exotic ones are perhaps best managed with a user-provided main.py.

Software

A tool to enable/disable applications.

_images/SoftwareApp.png

Most applications are disabled by default at boot in order to conserve RAM (which is in short supply and very useful to anyone wanting to write an application). This tools allows us to boot and conserve RAM whilst still allowing users to activate so many awesome applications!

Pager applications

The pager is used to present text based information to the user. It is primarily intended for notifications but is also used to provide debugging information when applications crash.

Applications

Alarm Application

An application to set a vibration alarm. All settings can be accessed from the Watch UI. Press the button to turn off ringing alarms.

_images/AlarmApp.png

Screenshot of the Alarm Application

Beacon application

Flash the relatively powerful HRS LED repeatedly, mostly for signaling purposes.

Frequency and intensity can be changed.

The blinking is handled by the HRS, so this app consumes very little power. With BLE and/or step counter disabled and blinking frequency set to the minimum, the watch’s battery will last for many days.

_images/BeaconApp.png

Calculator

This is a simple calculator app that uses the build-in eval() function to compute the solution.

_images/CalculatorApp.png

Logo demo for PineTime

This demo is simply an alternating sweep of the Pine64 and MicroPython logos. It cycles through a variety of colours and swaps between the logos every 5 images (so if you change anything make sure len(colors) is not a multiple of 5).

_images/DemoApp.png

The demo also includes code to keep the devie awake making it suitable to run as an always-on application to demonstrate wasp-os at conferences and shows.

Note

Due to it’s niche purpose and relatively large size this app is not included by default in the flash images. It must be separately installed and enabled.

DisaBLE

Disable BLE to save energy and enhance privacy.

This app shows the bluetooth status and provides a button to disable/enable it. Unfortunately, re-enabling bluetooth normally has some issues, so as a workaround the “enable” button restarts the watch.

_images/DisaBLEApp.png

Flashlight

Shows a bright screen that you can tap to change brightness or switch to redlight.

_images/FlashlightApp.png

Haiku viewer

These three lines poems are fun to write and fit nicely on a tiny screen.

_images/HaikuApp.png

If there is a file called haiku.txt in the flash filesystem then this app allows it to be displayed three lines at a time using the pager.

This application also (optionally) loads an icon from the filesystem allowing to be customized to match whether theme your verses are based around.

Heart rate monitor

A graphing heart rate monitor using a PPG sensor.

_images/HeartApp.png

This program also implements some (entirely optional) debug features to store the raw heart data to the filesystem so that the samples can be used to further refine the heart rate detection algorithm.

To enable the logging feature select the heart rate application using the watch UI and then run the following command via wasptool:

./tools/wasptool --eval 'wasp.system.app.debug = True'

Once debug has been enabled then the watch will automatically log heart rate data whenever the heart rate application is running (and only when it is running). Setting the debug flag to False will disable the logging when the heart rate monitor next exits.

Finally to download the logs for analysis try:

./tools/wasptool --pull hrs.data

Level application

This app shows a dot that moves depending on the orientation of the watch. A tap opens a menu with the option to calibrate or reset the level. To calibrate, place the watch on a flat surface, then tap the “Calibrate” button while ensuring the watch is stationary.

_images/LevelApp.png

Morse translator and notepad

This app is a simple morse translator that also doubles as a notepad. Swipe up for a line, swipe down for a dot, tap for end letter, double tap for end word. Swipe right for space, twice for newline. Swipe left to delete character. Up to 7 lines of translation will be displayed on a 240x240 screen, and old lines will be deleted. There is a preview of the next letter at the bottom of the screen.

_images/MorseApp.png

Music Player for GadgetBridge

_images/MusicPlayerApp.png

Screenshot of the Music Player application

Music Player Controller:

  • Touch: play/pause

  • Swipe UPDOWN: Volume down/up

  • Swipe LEFTRIGHT: next/previous

Phone finder application

An application to find a phone connected via Gadgetbridge.

_images/PhoneFinderApp.png

Screenshot of the Phone Finder Application

Pomodoro Application

A pomodoro app, forked from timer.py. Swipe laterally to load presets and vertically to change number of vibration. Vibration patterns are randomized if vibrating more than 4 times to make sure you notice.

_images/PomodoroApp.png

Sports timer

A combined stopwatch and step counter.

_images/SportsApp.png

Stopwatch

Simple stop/start watch with support for split times.

_images/StopwatchApp.png

Self Tests

A collection of tests used to develop features or provide useful metrics such as performance indicators or memory usage.

_images/TestApp.png

Timer Application

An application to set a vibration in a specified amount of time. Like a kitchen timer.

_images/TimerApp.png

Screenshot of the Timer Application

Weather for GadgetBridge and wasp-os companion

_images/WeatherApp.png

Screenshot of the Weather application

Games

Conway’s Game of Life

The Game of Life is a “no player game” played on a two dimensional grid where the rules interact to make interesting patterns.

_images/GameOfLifeApp.png

Screenshot of the Game of Life application

The game is based on four simple rules:

  1. Death by isolation: a cell dies if has fewer than two live neighbours.

  2. Death by overcrowding: a cell dies if it has more than three live neighbours.

  3. Survival: a living cell continues to survive if it has two or three neighbours.

  4. Reproduction: a dead cell comes alive if it has exactly three neighbours.

On 11 April 2020 John H. Conway who, among many, many other achievements, devised the rule set for his Game of Life, died of complications from a COVID-19 infection.

The Game of Life is the first “toy” program I ever recall seeing on a computer (running in a mid 1980s Apple Macintosh). It sparked something even if “toy” is perhaps an underwhelming description of the Game of Life. Either way it occupies a special place in my childhood. For that, this application is dedicated to Professor Conway.

Play 2048

A popular sliding block puzzle game in which tiles are combined to make the number 2048.

_images/Play2048App.png

Screenshot of the 2048 game application

Puzzle 15

A popular sliding block puzzle game.

_images/Puzzle15App.png

Screenshot of the 15 puzzle application

Snake Game

This is a classic arcade game called snake.

_images/SnakeApp.png

Screenshot of the snake game

You have to direct the white snake to the food block (blue dot) by swiping in the desired direction. You must not hit the border or the snake’s body itself. Every time the snake eats the food, its length increases by 1. (In the current version there is an error that the length of the snake is not increased by 1 when the snake gets the food for the first time. This has to be fixed).

Once the game is over, you can try again by tapping on the screen and then swipe in the direction you want to move. If you want to leave the game, simply wipe in any direction once the game is over.

And now: Have fun playing! :)

Four in a Row

This is the classic two player board game called Four In A Row or Connect4. You play against the computer.

_images/FourInARowApp.png

Screenshot of Four In A Row

There is in intro/menu screen which has very brief instructions, allows you to set the opponent level and gives some stats on the number of games you have won. Touching the screen sets the level from 0 to 6 which corresponds to the number of lookahead plies. Swiping down enters the main game. On your turn a red square counter will appear on the top row. Touch the screen to move to the desired column, optionally touch again if you don’t like your choice then swipe down to commit to playing that column. The computer will reply with a yellow counter after a delay (dependent on level). Your aim is to get four in a row before the computer does. At end of game swipe down to return to the intro/menu screen.

This app is powered by a compact version of the Alpha Beta pruning algorithm. For technical details see https://en.wikipedia.org/wiki/Connect_Four and https://kaggle.com/competitions/connectx/. There isn’t space for a transposition table in RAM, so MTDf isn’t implmented, nevertheless it can play a challenging game.