How to read RC signal with Arduino using FlySky iBus

Ricardo Paiva
2 min readMay 21, 2020

--

In my previous post, I talked about How to read RC receiver signal with Arduino. On that article I used a FlySky transmitter and receiver, connecting each channel to an Arduino port. In this one I want to show how to read all the channels using the serial interface, which requires only one Arduino port (and honestly, I think it's even simpler). I used this approach to control my small Tello drone using my RC transmitter, that originally could be only controlled by the cellphone.

The FlySky iBus is a protocol that uses the UART serial interface to transmit the value of each channel from the receiver. Data is transmitted at 115200bps and a new value can be read every 7ms. There is an iBus implementation for Arduino that can be easily installed though the Library Manager. Just search for 'IBusBM'. If you don't know how to do it, refer to this tutorial.

I'm using a FS-iA10B receiver, which contains 10 channels. In this case, using iBus protocol is particularly useful to avoid 10 different wires if I want to read all channels. I'm also using an Arduino Mega, in order to have 2 Serial ports, one for the communication with the receiver and another for debugging. The wiring schema is pretty simple. As we are only receiving data, we will use only the RX pin:

From the code, you need to initialize `IBusBM` that will be coupled to the Serial port. To read a channel you call `IBusBM.readChannel(channelId)`. It will return a value between 1000 and 2000 if there is any data, it will return 0, if the transmitter (the remote control) is off.

I added a method to read the 5th which is a two steps switch. I hope it helps you to integrate you RC to your Arduino project.

--

--

Ricardo Paiva

Nerd aficionado por ciência e entusiasta de fotografia e ciclismo. Atualmente DevLead na Criteo em Paris