Wearable MIDI

I have started to build a BLE MIDI connected wristband (watch) that I intend to use as a controller and metronome with Zynthian. I have created a GitHub repo for the project. It is early days (day zero to be precise!) so it isn’t fully functional yet but if you happen to have a TTGO Watch 2020 V3 (or similar) you may be able to try it out.

So far it can:

  • Connect as a BLE MIDI device and indicate connection status
  • Act as a KAOS style X-Y pad sending MIDI CC for each axis
  • Indicate when it receives a particular MIDI CC visually and with haptic feedback (vibration)
  • Display a 4x4 grid (not yet doing anything useful but will interface with Zynpad)
  • Turn off screen after 20s of inactivity
  • Turn on screen when button pressed, screen touched, rotated (e.g. move wrist), connect to Bluetooth device or receive relevant MIDI command

Planned functionality:

  • Drive Zynpad with status feedback / indication
  • Show tempo and allow adjustment
  • Act as visual, audible and physical / haptic metronome
  • Allow configuration of parameters
  • Use accelerometer as MIDI controller, e.g. CC / Note-on / tempo
  • Integrate with CUIA to allow remote control of Zynthian

This is a toy I got for Christmas and it may not be the ideal device. Its battery life is likely to be short (a few hours) due to the inefficiency of it processor (ESP32). It is awkward to charge, using a micro USB connector behind an awkward to remove cover. It may not look pretty having a fairly low resolution screen (240x240) but it is cheap (about $30) and pretty easy to program and it may be just right for the targetted purpose.


I have done some more on this. There is a settings menu with ability to enable/disable BLE, set MIDI channel and CC numbers and adjust screen brightness / sleep timeout. The pads now update their colour to reflect sequencer group and state, like in ZynPad. There is a status bar showing battery and BLE connection status. I think that is probably as far as I will go with this firmware. (I might try to get accelerometer acting as a MIDI controller if I have some spare minutes but that requires some consideration of what to send and when - you probably don’t want every movement of the wrist to be shaking your maracas!)

The LILYGO TTGO T-Watch-2020 V3 has lots of useful features and is really easy to program. You can use PlatformIO, e.g. in VSCode and the Arduino framework for fast, easy programming. One lesson I learned was to use a single sprite as a display double buffer to avoid flicker. It offloaded all the individual screen handling but at the expense of a continual refresh cycle (which I set to 50Hz). The big problems with the device are that the battery life is terrible (I got 5 hours 20 minutes of it doing nothing much other than being connected to Zynthian via Bluetooth - screen was off) and it is charged via a micro USB connector behind a plastic cap that is awkward to remove. Also the rubber strap is not (easily) replaceable. I also suspect the button will break at some point - it feels a bit loose and projects a bit too far.

So, for these reasons (and with some encouragement from @Baggypants) I have ordered a Pine64 PineTime which uses the nRF52832 SoC which is far more energy efficient than the ESP32 when running BLE. (FYI Bluetooth Low Energy should run with very low power requirements but the radio in the Espressif devices consumes a lot of energy, even when only running BLE.) The PineTime is not as easy to program. It is not supported by PlatformIO and does not seem to have integration with Arduino framework. Due to its low energy usage with BLE enabled it may be used as a normal smart watch so I am likely to add my code as an app to the standard firmware and use it as a full-time watch rather than just a Zynthian extension. I will update when I have something to show.


Somebody else doing Bluetooth MIIDI from a PineTime watch:

That’s interesting. I didn’t see anything in the forum or chat about this. It may have been useful to collaborate. I wonder how similar Simon’s BLE MIDI implementation is to mine?

[Edit] Not very! It is a very simplistic implementation without stuff like running status or most MIDI commands. Just note on and CC. I may link up with them.