Python driver for the Taranis (and Futaba ?) SBUS protocol


This allow you to connect an FRsky receiver to your raspberry pi (or any UART compatible port) and decode values
It supports 16 standard Channels plus 2 digitals. (to be confirmed)
It has been tested only on the below FrSky receivers:

  • X8R
  • XM+

Git :


You will need a physical signal inverter like this :

3 thoughts on “SbusPythonDriver

  1. Donald,
    I’ve been trying to create a drone with a Jetson Nano (basically a RPi) as the flight controller. I would like to control the drone manually through the use of a taranis qx7 controller and the x8r receiver. I found your library but I cannot get any information out of the SBUS signal. I connected it up with the inverter circuit as described but still nothing. Any new developments since you finished the project or ideas on how to troubleshoot? (I’m very new to python and Linux)

    1. First of all you got to be sure that you x8r sbus is getting out data. (use oscilloscope or any other serial device to test it). Then you can create the small electronic phase inverter and use, another time, an oscilloscope to test if you signal is rightly inverted. Then you can use Rpi to get the data.

      As always in electronic, you need 3 things : 1) Take measure of what you doing because you can’t see or feel electricity 2) Test at each step 3) if it’s not working, try simpler things on test bench.

  2. Hi Donald,

    I am trying to get your code to work. I was hoping I could get some help with setting it up. Are you connecting your inverted signal to GPIO15 like Sokrates80?

    I am using a Taranis Q X7 transmitter, FRSKY R-XSR receiver and a RPi 3B+.

    This is how far I am getting:
    – I was able, by using code found here:, to read out the receiver channels via a hacky way. I do have to press the F/S button on the receiver to get one reading at the time. Looking through the code it seems there are some mistakes with resetting the _latest_tick. I tried fixing it, but am no bitarray guru, so I started looking further and found your repo. What I learned here though: binding between receiver and transmitter works, the SBUS signal is okay.
    – I checked everything on the oscilloscope including the inverted signal. It is a nice inverted signal.
    – after fixing the print statement and the port (ttyAMA0) I am able to run your code. Unfortunately, it only enters the first if statement once and after that it just loops past it. Output:
    2 array(‘H’, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 0023 1654082581.3739958
    2 array(‘H’, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 0048 1654082581.3792858
    in first loop
    2 array(‘H’, [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) 0000 1654082581.3847132

    Any ideas what could be going wrong?

Leave a Reply

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