CycleOps Pro300 PT to ANT+, Part 5, Step by Step

This post will be a tutorial to building your own CycleOps Pro300PT to ANT+ Adapter. For anyone who may have purchased one of these bikes many years ago and finds it sitting unused in a corner this is a great way to bring new life to your bike for use with Zwift, Golden Cheetah or any other ANT+ compatiable application. If you bike looks like the photo below and came with the computer shown below, this tutorial is for you.


The version I have has the power meter welded to the fly wheel so there is no chance to have Cycleops upgrade the hub. If you happen to have the style that is bolted to the flywheel Cycleops will upgrade the Power Cartridge (part 18849) for $339. This wasn’t an option for me as I have the welded style hub shown on the right



This post assumes you have basic electronics knowledge including

  • Soldering of wires, though hole and 0603 SMT components to a PCB,
    • Don’t worry if you don’t, this is a great project to learn on as the PCB has large spacing and is very forgiving in part misplacement.
  • Programming an Arduino, specificly the Pro Micro, see Pro Micro & Fio V3 Hookup Guide
  • Downloading code from GIT hub. All the code, CAD models and PCB files are kept at GitHub Repository
  • Buying parts from electronic suppliers such as Mouser or Digikey

Some great tutorials can be found on Sparkfun and Adafruit

Parts Required:

  1. The complete parts list in excel format can be downloaded from the GIT here
  2. Molex Micro-Fit, 4 Circuit Plug Housing and Pins
  3. A few of the parts are non-standard mouser parts and needed to be ordered from ebay or AliExpress these included
    1. PCB – I am happy to sell some of my extra, just put a comment below otherwise the gerbers are in the GIT if you want to make your own boards
    2. NRF24AP2 Networking Module
    3. Arduino Pro Micro, Ebay or Sparkfun. Just make sure to get the 3.3V version
    4. Project Box, Ebay
    5. Optional OLED Display, Ebay
    6. Battery 14500 3.7V Li-Ion, DX or Amazon or Ebay

Full Parts List for those who just want to skim without going to GIT

PartValuePackageDescriptionMouser Part #LinkDevice
D2BAT20JSOD-323Schottky diodes in SFE's production catalog511-BAT20JFILMDIODE-SCHOTTKY-BAT20J
U$1NRF24AP2NRF24AP2 Networking ModuleAliexpressF10644_NRF24AP2
U$253375-0253375-022.50MM 2P VERT HDR FRCTN POS LOCK538-53375-021053375-02
U1MCP73831SOT23-5Charge management controller579-MCP73831T-2ACIOTMCP73831
U2AP2112K-3.3VSOT23-5Voltage Regulator LDO621-AP2112K-3.3TRG1V_REG_LDOSMD
U4TPS78223DDCRSOT95P280X110-5NLow-Dropout Linear Regulator595-TPS78223DDCRTPS78223DDCR
Power SwitchMountain SwitchToggle Switches SPST OFF-ON108-0041-EVX108-0041-EVX
Reset SwitchMountain SwitchPushbutton Switches METAL BODY BLK103-1013-EVX103-1013-EVX
Project CaseEbay
OLED DisplayEbay

Build Instructions

Prepare the Cable

I’m going to take a guess and say for most people this is going to be the most challenging part. I happen to have access to the proper crimping tools for working with Molex Micro-Fit connectors at work. For most, you have 2 options. Cut the existing cable off of your wired head unit or using some needle noise pliers and solder do your best to crimp the pin onto the wire. I have used the pliers and solder method for years for a non-mission critical application like this you should have no problem. I’m following the pin out numbering as used on the Molex Data Sheet for the 43020-0400 4 pin housing, The image below shows a 6 pin, we will be using a 4 pin version. Don’t forget the heat shrink to keep things nice and clean. The completed end can be see below.

Going off of the colors of the wire I happened to have on hand, wire the connector as follows, substitute the color of wires you use as needed. I didn’t find any function for Pin 3 but I happened to be using 4 wire cable so just to keep things clean I connected all of the pins. You will see later that this pin goes to nothing at the PCB side. I am also using shielded cable. This is not necessary at all but at the PCB side I was able to solder the shield directly to the PCB to help strain relief the data, ground and signal solder joints

PinFunctionWire Color

Solder the Components

Time to take out the solder iron and the 0.015″ solder or some solder paste and hot air and get soldering. The layout of the board puts almost all of the SMT components on the back with lots of room to place them with tweezers and even enough room to hand solder them if you prefer. I suggest doing all of the SMT parts first then the through hole components after the SMT. Last solder all of the wired switches and data line. I put a small rubber grommet on the line that runs to the bike to give it a clean look when going though the project box. You will notice a large pad just above the connection for the bike data line. I used a cable with a shield. While this pad is grounded and in theory will help protect the wires from radiated noise my primary reason was to use the shield as strain relief for the wire. I didn’t want to solder directly to the OLED display to make it easy to remove the cover and work on the PCB if needed at a later date. I found a Molex 0022162040 to be the perfect fit to the pins and provide a nice right angle pin to solder the wire to. You can see this is the right most picture, its the white connector.

Prepare the Case

The case I used for this project was brought on Ebay Electronic Project Box/ Enclosure Instrument Case. A few modification are required for mounting of the power switch, 0 force calibration button, OLED display and access to the USB port. The location and size of the holes can be taken from the CAD model. The OLED Display was attached to the cover with hot glue at the 4 corners. I then put a sheet of transparency plastic on the outside to protect the OLED from the inevitable sweat that will fall on on it. I held the plastic on with some scotch magic tape but really need to find a cleaner solution.



Program Arduino

Before programming there is 1 small modification that must be done to the code. I am not able to provide the ANT+ network key with the code. Getting one is free and quick

  1. Go to
  2. Create a free account
  3. After you are logged in go to
  4. Find the line “The ANT+ network key is 8 hex values and is shown below”
  5. You will find 8 hexadecimal number, put each of the 8 numbers in order into this section of the code, replacing the XX with the numbers you are provided

Follow the instruction on Sparkfun for setting up the Arudino Pro Micro Pro Micro & Fio V3 Hookup Guide

Upload the code and apply power, on power up, even if not connected to the bike the OLED display should look like this.


By default I have the following items displayed on the screen

  • O: Torque (counts)
  • R: Torque (counts)
  • T: Torque (in-lbs)
  • P: Power (Watts)
  • C: Cadence (RPM)

Selling extra parts

If anyone is interested I have 4 extra PCBs that I would like to sell for $5 each, PayPal would be ideal method of payment. If interested let me know in the comments below and I’ll get in touch.

23 comments on “CycleOps Pro300 PT to ANT+, Part 5, Step by Step”

  1. Matt, I believe I have the same model CycleOps Pro300PT as you described. I have a wire from a sensor near what appears to be a welded hub, up to the computer. I have a software engineering background that included circuit boards but most of that work was done about 30 years ago. In 2014, CycleOps did offer a flywheel+hub replacement for this bike for $800 which included Ant+ support (although in the recent reading maybe it was incomplete Ant+). Anyway, I contacted them recently to see if I could get that hub and they said parts were no longer available…which is when I turned to google and found your response on and the detailed instructions here. Wonderful detective work on your part across software and hardware.

    I see you offered to sell an extra PCB to posting comments. I’m wondering if you’d be willing to create the whole solution (for the lazy types like me), charge a fair price for your labor and parts, such that I could plug in your solution (preferably inline with the existing Joule head), and also have it broadcast Ant+? I have a Wahoo RFLT+ on my road bike which acts as an Ant+ receiver and can broadcast in BLE to an iPhone. My ultimate goal is to use this solid CycleOps bike to get into things like Zwift or otherwise. Let me know.

  2. Hi Matt, I’m interested in one of your PCBs if available or to have you make the same thing for me that you did for yourself. Happy to pay you for it.

    thanks, Larry

  3. Very interesting. A couple of questions –

    With the Cycleops hub upgrade you mention (which I assume is included with the Pro 400 indoor bike which transmits some sort of private ANT stream), how would this project be changed? Would it be possible to implement the “ANT receive/ANT+ send” code using a single PC? Maybe ANT+ dongles do not work in transmit mode, so the additional hardware would still be required?

    I have a Pro 400 bike which does work with Rouvy and Zwift, but not with, for example, Zwift on Apple TV because there is (seemingly) no way to get from the ANT stream being sent to the BLE stream required. If an ANT+ stream were available through a bridge like this, then one of the currently available ANT+ to BLE converting devices (Cable, for example) might do the trick..

    Thanks for any suggestions.

    • K.Riegel,

      As far as I know all USB ANT+ dongles support bi-directional communication. Anself USB ANT+ is a personal favorite of mine, great performance at a reasonable price. I have never looked at a CycleOPS Pro 400 so I don’t know exactly how they implemented the resistance control commands. Apple seems to have something against ANT+ and everything I have read says it just will not work on Appple TV. If Cycleops is using ANT+ FE-C as there method of communication for both power and resistance a product such as CABLE may work.

      I’m curious, does the resistance control from Zwift work with your Pro 400 or do you just get power and cadence and have to do manual resistance control?

      I have a side project to implement the ANT+ FE-C protocol on this existing hardware GITHUB ANTPlus_Arduino. I have the bi-directional communication working and have just started on the hardware design to add software controlled resistance to a 300PT bike. More to come later on this.

  4. Hi Matt:
    I’m interested to proceed and willing to do the soldering myself. Do you still have an extra board I can buy to get started? Also super interested in the ANT+ FE-C protocol for the older wired 300PT. Please keep me posted on your hardware ideas. Are you thinking of a servo-motor to turn the handlebar twist-knob cable tensioner?

    • Sadly I’m out of PCBs for now. However, the design and Gerbers for the V1 design are published in the GIT repository if you want to order them before V2 is ready. I’m working on a new design (V2) that should improve the ANT+ performance and allow for future expandability including support of FE-C. I have a few different ideas for how to implement the resistance control. That seems like a good topic for my next post (It’s been too long).

  5. Hi Matt: Fantastic information! Have you complete design on V2? If not, I’ll take a stab at making V1, but it will stretch my skills in every way – I would love to buy a completed version from you with fair compensation for your time(?).

    • Mark,

      I’m putting together an update right now. I’ve ditched the V2 design in favor of improvements to the code for the V1 hardware. I’ve been able to solve the memory problems and have also added several new features that protect against bad data packets that get sent from the receiver near the rear hub. If you were going to build a V1 unit, I’ll suggest you start. I will be continuing to develop the software and can help you along the way if you run into any issues.

  6. Very interesting post!

    I have a later Cycleops 300 which does transmit ANT+ but cannot be controlled by Zwift – resistance is changed via me twisting the manual knob when to need to hammer a virtual hill or whatever.

    I have thought about getting a better (smarter) trainer set-up, but I just love the physical stability of the Cycleops frame — so much more secure and solid feeling compared to any actual bike on indoor trainer.

    Very curious about the idea to add a servo-motor to control the brake-resistance shoe – with an interface to FE-C – wow – would be the best of all worlds!

      • I don’t have a 400 pro to validate this with but I would be very curious if given the chance to work with one. I don’t have any details on how the computer of the 400 pro connects to the variable resistance drive.

  7. Matt,

    This is brilliant – thanks for the hard work. I’ve already ordered parts to put my own together. Any recommendations on where to get boards made?

  8. Hi, I’m from France. I use a 400 PRO with Rouvy.

    All is functionnal : Power, Cadence and Speed readings. Power setpoint is also provided by rouvy. All controlled on my smartphone.
    If I need more resistance, Just put on “Plus” button like if I was shifting on a regular bike…

    So it seems PRO 400 use ANT+ proprietary channel to control the brake unit…
    But decoding this with regular Hardware (Smarphone with BT /ANT+) could be achieved : Rouvy only did it…
    (Source on this Zwift post :

    What I would like to to is using my 400 PRO directly with my Garmin Edge 530… Unfortunately, nothing is recognized by the Edge (Power sensor, Cadence/Speed, or brake unit), Even in the Home trainer section.
    Maybe Saris / Cycleops may ask Garmin money to provide protocol / keys to transceive these data… Or just Garmin don’t care about very few old trainer users !

    Best way would be to transceive proprietary ANT+ communication from CycleOps and broadcast it on regular ANT+ channel / Protocol as any other trainer… Simple Theory, complex to do without CycleOps/Saris cooperation.

  9. Hi Matt
    Many thanks for your post on this, I have an old PT300 languishing, unused due to conectivity issues and am keen to try to make it work. I have lots of time during lockdown!!
    Do you have any more of the circuit boards? I’m not sure I could make the board up myself.
    Many thanks


  10. Hi Matt,

    Thank you so much for all the hard work you put into this! Also, thank you for your assistance in trouble shooting my issues!

    To anyone else interested I have some extra PCBs, an extra screen, and some other miscellaneous parts. Shoot me an email if you’re interested: tregas11[at]


  11. Matt; You are genius. The solution is super cool and glad you were keen to share the instructions. I am wondering about the port on the side of the Cyclops computer that can connect to USB cable and go right into a PC. Is it not possible to get all of the signals from that USB cable and condition the signals to “look” like something Zwift could recognize ?

    Just wondering if you tried that as a possible hack.

    • At the very beginning I looked at this path. I spent a day or two looking to see if a real time stream was available over the USB port. While I can’t say I exhausted all options I didn’t see any real time stream data available over the USB port. From what I could see the USB port was only used to download saved rides. At some point I had a copy of CycleOps PowerLink software installed to see if it could stream data, it could not. At that point I moved on to what turned into the current solution.

Leave a Reply

Your email address will not be published. Required fields are marked *

Copyright blinkyme 2022
Tech Nerd theme designed by Siteturner