LoRa Repeater

Sometimes it’s handy to have a repeater to extend the range of a radio transmission. The particular usage I have in mind is to be able to receive telemetry from a landed payload that is too far away (or hidden by buildings or geography) to receive directly, but could possibly be received via a repeater up on a mast or flying on a drone. LoRa makes it easy to make a repeater, so that’s what I’ve done here. And to make it more generally useful, the repeater is programmable for frequency etc. via a Windows program, with the configuration stored in the repeater’s EEPROM.

Hardware

One of these can be made in about an hour if you’re handy with a soldering iron, using these parts:

  • Arduino Mini Pro
  • LoRa module
  • Small 3.7V LiPo battery
  • USB LiPo charger
  • LiPo –> 5V step-up converter

I used a long/slim LiPo but you can use whatever you like. If like me this is just for lifting up on a drone, something small and light is ideal. Even a tiny LiPo will have plenty of capacity for this use.

I connected the charger and step-up converter one side of the LiPo, with the -ve terminals soldered together and to the LiPo. On the +ve side, I placed a 2-pin header between the modules to work as a simple power switch, or you could use a small slide switch. The LiPo +ve wire then goes to the charger +ve terminal. Finally, the +5V output terminals have red/black wires that go down to the Arduino on the other side of the sandwich.

First job on the Arduino Mini Pro is to solder on a programming header. Then connect the +5V from the step-up converter to the Raw pin, and 0V to GND. The Arduino then connects to the LoRa using these connections:

  • GND – GND
  • Vcc – Vcc
  • 4 – RESET
  • 7 – DIO0
  • 8 – NSS
  • 11 – MOSI
  • 12 – MISO
  • 13 – SCK

Finally, solder a suitable length (164mm for 434MHz) wire to the LoRa ANT terminal.

Firmware

The firmware is Arduino source so you will need an Arduino IDE installed. No extra libraries are used. Get the source from github. Connect the assembled repeater to a suitable programmer and program it.

Software

The configuration program is for Windows only at present. Download the executable from my dropbox.

Connect the repeater to your PC via a USB-serial programmer, then run the configuration program. Select the appropriate COM port in the drop-down box at the top, and the program will automatically connect and display the current (default) configuration:

If you know the PPM offset for your LoRa device, then enter it in the PPM box. What I do to determine this is to set up a LoRa tracker accurately using a precision RF frequency counter, then set up the repeater to the same frequency, note the frequency error and then calculate the PPM figure from that. Once set, it means that you can set your repeater frequencies without having to calculate offsets manually.

“Enable Repeater” does what it says; when checked then the repeater will immediately repeat any telemetry packets that it receives. At present only such packets are repeated (ones beginning with a “$”).

Rx/Tx Settings

The receiver and transmitter are be configured separately so there is no need for them to have the same settings. Generally you just need to set the frequency and mode (pre-determined standard modes that most trackers use); the mode is selected from a drop-down box which has the effect of automatically filling in all of the other settings.

Settings are sent to to the repeater immediately, so you can see their effect immediately in the status section at the bottom, and any received packets on the right. Normally you would do this in the presence of the tracker you wish to repeat, so you can confirm that the tracker is being received OK and ideally with a frequency error less than 1kHz (adjust frequency or PPM till it is).

When everything is OK, click the “Save In EEPROM” button; all settings will then be stored in the Arduino processor’s internal EEPROM memory. You can now disconnect the repeater, and next time it is powered up it will automatically recall the saved settings.

This entry was posted in Weather Balloon. Bookmark the permalink.

9 Responses to LoRa Repeater

  1. DF says:

    Does the module you’re using have a TCXO? I’m asking because the example configuration is for a pretty narrow LoRa bandwidth.

    Similarly, why did you pick a narrow BW with a low SF? It would seem that you could get a higher datarate with BW=125KHz and SF=9 and enjoy more Rx sensitivity while having few frequency stability/accuracy issues.

    • David Akerman says:

      I generally use 20k8 bandwidth because it allows for 100% duty cycle here (UK) where higher bandwidths do not, so the average throughput is highest this way. Also the lower the bandwidth the better the range. Since these flights generally send down images then we need the highest throughput we can get.

      Drift hasn’t been a problem in flight, but besides the receiving software has AFC. What is a problem is that modules can be up to about 4kHz off nominal, so worst case a pair could be 8kHz off each other, which is twice the offset that LoRa will cope with at the low bandwidth used. Hence the PPM correction box.

      When I don’t need high throughput – i.e. then I’ll generally use 62kHz bandwidth which makes the offset issue disappear and still gives decent range from a balloon. Duty cycle is then limited to 10% but the resulting throughput is still plenty for telemetry.

  2. David says:

    Where did you buy the LiPo –> 5V step-up converter module? Thanks.

  3. Will says:

    would it work for lorawan? maybe with a bit more work…

  4. Pingback: OTA: DAB/DAB+ via ODR-mmbTools, IQ Server for a Pi, LimeSDR on a Nintendo Switch, and More – MyriadRF

  5. Wiam says:

    Hi Dave,

    I have a lora GPS working on 868mhz to 915mhz, do you perhaps know of someone that does make a repeater for this freaquency?

  6. trevor says:

    Is the LoRa module just a generic one from EBay/Amazon ?

Leave a Reply to Will Cancel reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.