DIY 4 in 1 Module with ER9X
DIY 4 in 1 Module with ER9X

This is a setup guide for the 4-in-1 radio module from banggood.com

This radio module can speak almost every protocol on the market today. You can find the details of each protocol along with the full documentation and the firmware on the github page here: https://github.com/pascallanger/DIY-Multiprotocol-TX-Module#protocol-selection

Prepare the multi-module

When you get the multi-module, it comes without a case.

So I went ahead and printed this case by nebbian, download it here one from thingiverse.

Here's what the module looks like.

Then I made another case in purple.

You can see in the above photo I've upgraded the connector to a bottom-entry Molex 22172052 connector. Since this is a single point of failure, $1.20 seems like a small price to pay for some extra security.

You can also see I soldered some pin headers on the In System Programmer (ISP) header.

Multimodule firmware update

Download the latest release from https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/releases

Configure the firmware

You'll want to modify _Config.h to include only the radio protocols you need.

Here is my whole config file: https://gist.github.com/nathantsoi/a65b7baff0e044af05f6854e799c5fc5

Here are my changes:

diff --git a/Multiprotocol/_Config.h b/Multiprotocol/_Config.h
index eb075a1..9add3f8 100644
--- a/Multiprotocol/_Config.h
+++ b/Multiprotocol/_Config.h
 /****************************/
@@ -41,10 +41,10 @@
 //Bellow is the list of all available protocols. Comment the protocols you are not using with "//" to save Flash space.
 #ifdef A7105_INSTALLED
    #define FLYSKY_A7105_INO
-   #define HUBSAN_A7105_INO
+   //#define   HUBSAN_A7105_INO
 #endif
 #ifdef CYRF6936_INSTALLED
-   #define DEVO_CYRF6936_INO
+   //#define   DEVO_CYRF6936_INO
    #define DSM2_CYRF6936_INO
    #define J6PRO_CYRF6936_INO
 #endif
@@ -57,19 +57,19 @@
    #define BAYANG_NRF24L01_INO
    #define CG023_NRF24L01_INO
    #define CX10_NRF24L01_INO
-   #define ESKY_NRF24L01_INO
-   #define HISKY_NRF24L01_INO
-   #define KN_NRF24L01_INO
-   #define SLT_NRF24L01_INO
-   #define SYMAX_NRF24L01_INO
-   #define V2X2_NRF24L01_INO
-   #define YD717_NRF24L01_INO
-   #define MT99XX_NRF24L01_INO
-   #define MJXQ_NRF24L01_INO
-   #define SHENQI_NRF24L01_INO
-   #define FY326_NRF24L01_INO
-   #define FQ777_NRF24L01_INO
-   #define ASSAN_NRF24L01_INO
+   //#define   ESKY_NRF24L01_INO
+   //#define   HISKY_NRF24L01_INO
+   //#define   KN_NRF24L01_INO
+   //#define   SLT_NRF24L01_INO
+   //#define   SYMAX_NRF24L01_INO
+   //#define   V2X2_NRF24L01_INO
+   //#define   YD717_NRF24L01_INO
+   //#define   MT99XX_NRF24L01_INO
+   //#define   MJXQ_NRF24L01_INO
+   //#define   SHENQI_NRF24L01_INO
+   //#define   FY326_NRF24L01_INO
+   //#define   FQ777_NRF24L01_INO
+   //#define   ASSAN_NRF24L01_INO
 #endif


@@ -151,12 +151,12 @@ const PPM_Parameters PPM_prot[15]=    {
 /* 4   */  {MODE_HISKY ,   Hisky       ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
 /* 5   */  {MODE_V2X2  ,   0           ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
 /* 6   */  {MODE_DSM2  ,   DSM2        ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   2       },  // option=2=6 channels @ 22ms
-/* 7   */  {MODE_DEVO  ,   0           ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
+/* 7   */  {MODE_DSM2  ,   DSMX        ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   2       },  // option=2=6 channels @ 22ms
 /* 8   */  {MODE_YD717 ,   YD717       ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
 /* 9   */  {MODE_KN    ,   WLTOYS      ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
 /* 10  */  {MODE_SYMAX ,   SYMAX       ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
 /* 11  */  {MODE_SLT   ,   0           ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
-/* 12  */  {MODE_CX10  ,   CX10_BLUE   ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
+/* 12  */  {MODE_CX10  ,   CX10_GREEN, 0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
 /* 13  */  {MODE_CG023 ,   CG023       ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
 /* 14  */  {MODE_BAYANG,   0           ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       },
 /* 15  */  {MODE_SYMAX ,   SYMAX5C     ,   0   ,   P_HIGH  ,   NO_AUTOBIND ,   0       }
@@ -250,4 +250,4 @@ const PPM_Parameters PPM_prot[15]=  {
 // As an exxample, it's usefull for the WLTOYS F929/F939/F949/F959 (all using the Flysky protocol) which requires a bind at each power up.

 // Option: the value is between -127 and +127.
-// The option value is only valid for some protocols, read this page for more information: https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/blob/master/Protocols_Details.md
\ No newline at end of file
+// The option value is only valid for some protocols, read this page for more information: https://github.com/pascallanger/DIY-Multiprotocol-TX-Module/blob/master/Protocols_Details.md

Connect the Module

Connect the ISP header on the radio module to your programmer. Connect MISO to MISO, MOSI to MOSI etc, like so:

Flash

Open the Multiprotocol.ino file in the Arduino IDE.

Pick the ISP programmer

Then choose "Upload Using Programmer"

You'll get a success message when it completes:

Enable Serial

To enable the serial connection between your ER9X radio and the radio module for easy configuration, you'll need to do the following:

Depending on your board version either add resistors or a solder bridge as shown below:

1st revision, add 2 resistors as shown here:

For the 2nd version, like I have, just solder bridge the tx and rx pads:

Updating the Radio

Connect the programmer

I'm using a USB ASP programmer

Download Er9x

You can get ER9X, which is the bit you install on the radio, here: http://www.er9x.com/

Also, download the latest version of Eepe from the same page, which runs on your computer to flash the radio.

I'm using a beta version of the firmware, which includes the 4-in-1 module protocol. The beta version is available here: http://openrcforums.com/forum/viewtopic.php?f=5&t=4598

Backup existing firmware

I'm using avrdude which can be downloaded here or you can install on a mac with the terminal command: brew install avrdude.

avrdude -c usbasp -p m64 -U flash:r:opentx.bin:r

Write the new firmware

avrdude –c usbasp –p m64 –u –U flash:w:er9x.hex

Note that flashing with avrdude didn't work for me, but flashing with EEPE worked great.

Binding

Binding with ER9X using the serial protocol is awesome. After you get ER9X installed and the radio module in the back, setup a new model and open the protocol page:

Move to the BIND option, hit OK and you're in bind mode!

Plug in your RX in bind mode and you're good to go.

Spektrum RX

A couple notes on binding a Spektrum Satellite receiver.

Note that is it is easiest, when using a spektrum satellite receiver with a flight controller, to bind the satellite connected to the main receiver (not the flight controller) first. Then attach the satallite to the flight controller.

Alternatively, follow these steps:

  • Configure the flight controller for your receiver by setting the port for Serial RX and the protocol for Spektrum 2048 (DSMX) or Spektrum 1024 (DSM2).

  • In the CLI run:

set spektrum_sat_bind = 9
set spektrum_sat_bind_autorst = 0
save
  • Wait for the board to reboot, then unplug the USB (to remove power) and plug the USB back in.

  • The bind light should be flashing.

  • Turn on your transmitter, go into the model setup, protocol and go to bind then click and hold menu to enter bind mode.

  • The RX light should turn solid and you're good.

  • Final step is to turn of your transmitter and take the flight controller out of bind mode by running this in the CLI:

set spektrum_sat_bind = 0
save
  • Make sure to change to TAER channel order in BetaFlight.

The OPTION option sets the number of AUX channels.

Checkout my other guides at nathan.vertile.com/blog
comments powered by Disqus