Show us your zwift setup!

It’s a iPAD tripod mount
With any-ol-tripod.

I built it out of 2 parts

  1. the actual stand

  2. and an ‘arm’ that does the ‘kitty corner’ and has a more proper sized tablet shelf

Thanks for this!

Doh! Found your build info here. :wink:

hi chris, i’m trying to create a BLE server the sends speed and incline to zwift using an ESP32.
at that time were you able to transmit incline data from the esp32 to zwift?
I use FTMS Service with TreadmillData Characteristics. Speed (in km/h) is correctly reported in zwift but I do not see any elevation information.
for the treadmill data char. I used flags as:
uint16_t flags = 0x3800; // b’00111000
and trying to set incline, angle and total positive elevation …
inst_speed = kmph * 100; // kilometer per hour with a resolution of 0.01
inst_incline = incline * 10; // percent with a resolution of 0.1
inst_grade = grade_deg * 10;
inst_elevation_gain = elevation_gain * 10;

//treadmillData[0,1] -> flags
treadmillData[ 0] = (uint8_t)(flags & 0xFF);
treadmillData[ 1] = (uint8_t)(flags >> 8);

// speed
treadmillData[ 2] = (uint8_t)(inst_speed & 0xFF);
treadmillData[ 3] = (uint8_t)(inst_speed >> 8);

// 6,7,8 total_dist

// incline & degree
treadmillData[ 9] = (uint8_t)(inst_incline & 0xFF);
treadmillData[10] = (uint8_t)(inst_incline >> 8);
treadmillData[11] = (uint8_t)(inst_grade & 0xFF);
treadmillData[12] = (uint8_t)(inst_grade >> 8);

// 13,14  6: Positive Elevation Gain 16 Meters with a resolution of 0.1
treadmillData[13] = (uint8_t)(inst_elevation_gain & 0xFF);
treadmillData[14] = (uint8_t)(inst_elevation_gain >> 8);
TreadmillDataCharacteristics.setValue(treadmillData, 34);

afaik zwift should be able to receive incline information for running (as people using the runn report) but I wonder if this would be the correct way to achieve this… do you know?
any hint would be highly appreciated, thx

oh I got the flags wrong … checking with nRF Connect app I can see that I send power output nistead of incline

for (own) reference … this works for me:
uint8_t treadmillData[34] = {};
uint16_t flags = 0x0018; // b’000000011000
// 119876543210
// 20
// get speed and incline ble ready
inst_speed = kmph * 100; // kilometer per hour with a resolution of 0.01
inst_incline = incline * 10; // percent with a resolution of 0.1
inst_grade = grade_deg * 10;
inst_elevation_gain = elevation_gain * 10;

// now data is filled starting at bit0 and appended for the
// fields we ‘enable’ via the flags above …
//treadmillData[0,1] → flags
treadmillData[0] = (uint8_t)(flags & 0xFF);
treadmillData[1] = (uint8_t)(flags >> 8);

// speed
treadmillData[2] = (uint8_t)(inst_speed & 0xFF);
treadmillData[3] = (uint8_t)(inst_speed >> 8);

// incline & degree
treadmillData[4] = (uint8_t)(inst_incline & 0xFF);
treadmillData[5] = (uint8_t)(inst_incline >> 8);
treadmillData[6] = (uint8_t)(inst_grade & 0xFF);
treadmillData[7] = (uint8_t)(inst_grade >> 8);

// Positive Elevation Gain 16 Meters with a resolution of 0.1
treadmillData[8] = (uint8_t)(inst_elevation_gain & 0xFF);
treadmillData[9] = (uint8_t)(inst_elevation_gain >> 8);

// flags do enable negative elevation as well but this will be always 0

TreadmillDataCharacteristics.setValue(treadmillData, 34);

My set up!

1 Like

Mine is kind of boring next to all that. Just put a 40" TV above my Tread and use a Styde foot pod. It works.

(Oh, it has a u700 micro PC with Ant+/BT)


1 Like

1 Like

Hi Andreas, could you somehow share your full .ino code? And maybe share a few tips about adding heart rate , as i’m trying to build a Csafe BLE adapter for my treadmill , i know nothing about BLE but have some arduino programming background…For now i can (sort of) read speed, incline and heart rate via Csafe but i don;t know how to send them via BLE ,thank you in advance!


i have that code now here in github: lefty01/ESP32_TTGO_FTMS
as mentioned above and in the repo this is based on the esp32.
so I don’t know anything about the Csafe adapter (and very brief search did not reveal much;) therefore I’m not sure if I can help. do you have some spec on the device what is its use case and are you able to program this via arduino?
or is it more the idea to transmit data from an esp32 towards csafe ???

the way I use the ESP now is that it connects to the treadmill reed switch (speed sensor, to be precise I I installed an additional one next to the original reed switch triggered from the same magnet)
it also measures incline via MPU-6050, then only incline and speed is transmitted towards your device that runs zwift (android phone or pc both works for me).
heartrate and cadence I do get from my watch (garmin fenix6) so no need to have that included.

so checkout the git repository and either comment here or on github (gitter chat) if there is anything useful for you


I prefer rowing, my husband prefers cycling. If we both want to zwift at the same time I have to place my laptop next to the rower. Always great fun when we attend the same group ride :smile:

Looks awesome, what treadmill is that?

Living room looking over Steven’s Creek Canyon, Skyline Boulevard, Palo Alto, with Apple TV and 4K Samsung Monitor, Blue Tooth to Sony Headphones, Apple TV to play mindless music videos, Tacx Neo, I-pad mini on bike. I need to work on my Music Video Playlist. Thinking about an Assault Treadmill but do not want to crowd the space.

What treadmill is that? It looks like it has a great form factor.

1 Like

It’s a Woodway 4front. Best treadmill I’ve ever had. Previously had a True. Which was great, but my knees started bothering me. The Woodway is designed to make it feel like you are running outside. No knee issue after getting the Woodway.


That’s a really nice treadmill. I find it interesting that Zwift is so hyper focused on competition because of the training background, that there is such a low focus on collaboration and fun in game. I am surprised there is no lap feature that is displayed in the biking, you have a route, it is not a long route, and you ride laps, and it record the laps, and you have the expectation of riding for less than an hour. I am interested in a high end treadmill for short runs, say 3-5 miles for training, to augment my outside running, and same with biking. I can bike on Skyline Boulevard everyday in the nicest conditions for 20 miles, 40 miles, 60 miles, with climbing, and I think the real world climbing is easier than Zwift. But the reality, I am not in it to compete or race, it is the last concern for me, I am in it to have fun, to enjoy my time at home, and to share my experiences with friends.

Here’s mine:

NordicTrack 1750
TrueForm Runner
RUNN on each
55” 4K with an old Intel NUC i5 running Win10
Companion on my iPhone

I just roll the Tv in front of the treadmill I’m going to run on

1 Like