Using BT-210 on MKR ZERO

Lately, I have been working with the MKR ZERO and DXL MKR Shield and I missed the handy 4-Pin UART connector on the OpenCM-904 where I could plug in BT-210/410 receivers and then subsequently use Serial2 to connect the MKR ZERO to a PC or an SBC.

First, on the MKR ZERO, as Serial1 is already used up to control the Dynamixels, I needed to create Serial2 which can be easily done thanks to this handy post from

Next, the physical connections between the BT-210/410 Pins [ GND, VCC, TXD, RXD ] to the MKR ZERO Pins [ GND, VCC, TXD/D0, RXD/D1 ] are done as per picture below:

Lastly, I wanted Serial2 to have the RC-100 packet functionalities in addition to the plain ASCII text printing via Functions print() and println(), so I adapted the codes found in RC100.h and RC100.cpp (codes created for OpenCM-904 board) , see screenshot below for RC100.cpp:

into an Arduino sketch shown below:


This sketch will unpack the 6-bytes Remocon Packet and reconstruct the actual DataReceived in the same way used for the OpenCM-904 board.

Below is a screenshot at run time for Arduino IDE + its Serial Monitor (COM10) + TASK 2 Output Monitor tool (COM17) - so that I can use the Virtual RC-100 interface to send Remocon Packets from the PC to the MKR ZERO:

BTW, a note for @Tech_Support , for some reasons TASK 2 Output Monitor works very well for this project, but TASK 3 Output Monitor just would not connect to the BT-210 on the same PC - for reasons unclear to me.


Hi, @roboteer

According to our S/W engineer saying,

When R+Task 3.0 Serial monitor receives the packet, it checks some status of connected contorller such as a model number or something, unlike the R+Task 2.0 which just simply open the Serial port without condition check…

I see. Task 3 does not like to talk to “strangers”:roll_eyes::confused:

1 Like


But I guess, the following approach may work in my view point.


Yes. Remocon packets always worked well among CM controllers, and even between CMs and PCs and SBCs. That is the packet type that worked for all times, past, present and future (for short messages).

1 Like

Sorry for your inconvenience and for giving a limited help only at this time.

so that I can use the Virtual RC-100 interface to send Remocon Packets from the PC to the MKR ZERO:

Regarding this, I will get some time on finding any other solutions to channel between two ports by modifying the Dynamixel2Arduino library. If no solution, the only solution might be the change the policy of Serial Port at R+Task 3.0

Always appreciated your efforts and time on playing our products.

David Park,

It’s no rush as I can use TASK 2 in the meantime.

1 Like

Another possible approach. As I connect via BT-210 or BT-410 anyway, can Task 3 get some info from those devices to do its hardware check?


Hi @roboteer

Unfortunately, the approach may not be ideal option as you should check the controller status (Arduino MKR in this case, not BT-410).

After some thoughts, I think it would be worthy of manipulating the slave.ino example as it can emulate control table on your controller. (No all controller is supportive, but some only).

Below shows my testing result with editing slave.ino (slave_experiment.ino on Dynamixel2Arduino branch))by adding control table (Model Number 0x5005 and ID 200) uploaded to Arduino MKR Zero board (SAMD Based), and I can access the control table items (ping and read inst ) under the DYNAMIXEL Protocol rule.

Therefore, this approach could channel a port of Task 3.0 If I am right as it returns the ping to the serial bus.

The test was performed with my own MKR Zero board with USB connected to PC.

However, my own code is designed for USB serial only so that you might be required to touch the code according to a hardware serial (TX/RX or UART) access method. (See the comments in the code)

Check out my experiment branch for your reference

Hoping this work.

David Park,


Very interesting approach. I am going to try it out in the next few days. Basically, TASK 3 will be “fooled” into thinking that it is talking to a CM Controller with Model Number 5005 and DXL ID = 200, and DXL Protocol 2.0? Clever idea!

When I am looking more closely at your “slave_experiment.ino” sketch, you don’t use the MKR DXL Shield and set the MKR ZERO board as Slave/Peripheral DXL via the USB port (Lines 67 & 68 in the screen capture below).

For my case, I plan to use the MKR DXL Shield (so Serial1 and DIR_PIN = A6 are used) and I plan to associate the “Slave MKR ZERO” to Serial2 (via SERCOM3) - as shown previously, so I will have to use Line 66 for SerialPortHandler, so how should I set the 2nd argument DXL_DIR_PIN? Set it to -1? Or just do not specify the 2nd argument - which is really the same thing?

Many Thanks

1 Like

Hi @roboteer
The previous example maker commented:

  1. DYNAMIXEL::SerialPortHandler
  • note: If you do not want to use half duplex communication, do not enter the second parameter.

According to it, you can empty the second parameter if you are not using Halfduplex.dir_pin placehold of SerialPortHandler class will set -1 for a initializer automatically

Preassuming it, this will do packet communication through your hardware serial ports. (13,14)

DYNAMIXEL::SerialPortHandler dxl_port(DXL_SERIAL); 


I implemented the approach of assigning a fake Product Number and the default ID=200 in order to fake out TASK 3 - Debug Tool into thinking that it is talking to a real CM controller did not work out for my setup. The program did compile and uploaded OK to my MKR ZERO. But when I tried to connect TASK 3 to my BT-210 (via SERCOM3), the BT-210 blinked solid blue only for about 1 second, then it got rejected by TASK 3. So may be, Dynamixel Wizard can be fooled by this scheme, but not TASK 3, it looks like.

Luckily TASK 2 Output Monitor (previously mentioned), and even TASK 1 Output Monitor worked for me! (see pic below). So things are working out well enough for me.

Interesting exercise, though! This may be handy for other projects, but not for this one.

The main conclusion is that if one has a MKR ZERO, and some BT-210 or BT-410 available, then one can set up a wireless control feature for one’s robot as shown above.

1 Like