HandShakeTec

Using HandShake

Built: 2026-10-09 16:01:22 BST

This page shows how to use the Lilygo T-Watch S3 and the Lilygo T-Embed to work as the handshake project. This page assumes that you have already programmed both devices with the HandShake firmware.

Summary

Turn on the watch using a long press on the button.

Shake the watch gently and check that this is detected as a switch by the receiver unit.

Adjust the level of shake that will trigger a switch action using the jog dial on the receiver, followed by a long press on the button in the middle of the jog dial. This sends the new shake detection threshold to the watch.

HandShake components

The HandShake system comprises two parts, a smart watch (Lilygo T-Watch S3) and a receiver unit that sends a keystroke to a communication device (Lilygo T-Embed) through a USB cable. The two devices are shown in the photo below.

Lilygo T-Watch S3 and Lilygo T-Embed

When the watch starts, it shows its firmware version, a date such as 2026-10-09, for about two seconds. The T-Embed does the same. The Firmware changes page lists what changed in each version.

When the watch has booted up, which takes a few seconds, you will see the display below:

Watch default display

The screen has two sliders:

  • The top slider (yellow) shows the trigger level, the amount of shake needed to operate your communication software. Its value is also shown on the watch screen as ‘shake trigger: xxx’ where xxx is a number that varies from 525 to 1000 (these limits may change). The lower the number, the softer the motion required to trigger a shake detection. This slider only changes when you send a new trigger level from the receiver.
  • The bottom slider (green) shows how close the latest movement came to triggering. It updates in real time.

The bottom slider runs from the watch at rest (empty) to the trigger level (full). Once it reaches the right-hand end, the shake detection is triggered. If you change the trigger level from the receiver, the green slider rescales to match, so a full bar always means a trigger.

The green slider keeps the strongest movement of the last moment and then falls back over about a second, so even a short sharp punch is visible. If the watch is set to detect a roll rather than a punch, the green slider shows the strength of the roll.

When an intended shake is detected this display is shown on the watch:

Shake detected display

The line below the battery reading is the watch’s status line. It shows *** SHAKE *** or *** NO LINK *** briefly after a gesture, and is otherwise empty. If the watch has a lasting problem, the message stays there and comes back after each gesture:

  • – NO SAVE –: the watch cannot store its settings. It runs with the built-in trigger level, and a new level sent from the receiver is lost when the watch restarts. Reflash the firmware.
  • - TASK FAIL -: the watch could not start one of its internal tasks. Restart the watch. If it comes back, reflash the firmware.

Watches with firmware older than 2026-10-09b lose these messages after the first gesture.

To charge the watch, attach a USB cable to the micro USB socket in the side of the watch and connect to a USB socket or charger. For whatever reason, once the watch battery is at 0% it stays at 0% for an age while charging then starts ramping up to 100% fairly quickly. I don’t know how to improve this yet.

Charging the watch

Setting up the receiver unit

The T-Embed receiver unit is powered from the USB-C socket on its side.

The receiver has a jog dial around the button. This dial is used to adjust the trigger threshold. Use the dial to set a new trigger threshold then send this new value to the watch by giving a long press (about 2s) to the button in the middle of the dial. Turning the jog wheel clockwise will increase the amount of shake needed to send a trigger to your communication device, turning the jog wheel anti-clockwise decreases the amount of shake needed to send a trigger to your communication device. The updated trigger will not take effect in the watch until you give a long press on the button though. Check the watch to see that the new shake value is shown on the watch display.

The button on the receiver can be used to adjust the sensitivity of the gesture detection algorithm running on the T-Watch:

A short press: The receiver asks the watch for the largest shake it measured over the last 5 seconds and shows that value on the receiver display. Ask the person wearing the watch to make the gesture you want to detect, then give a short press to see how strongly that gesture registered. Set the trigger threshold a little below the value you see, so the gesture is detected reliably without every small movement triggering it.

A long press: The receiver sends the trigger threshold shown on the receiver display to the watch.

This allows the sensitivity of the gesture that is detected to be adjusted without having to touch the T-Watch.

Comments

Comments are public. Please don't name anyone who uses HandShake, or say that someone took part in our research, unless it is you and you are happy for everyone to read it. You can comment with just a name, or sign in with GitHub. Our privacy notice explains what is stored.