LoRa Mesh Radio



This is a fairly simple add-on for mobile phones to enable SMS-like messaging in a group when outside cell coverage, or in disaster scenarios. It utilises Semtech LoRa radios, for low-power/long-range communications. There are a lot of hardware options, and I am still trying different devices and manufacturers, but for now this tutorial will show how to assemble and setup one of the following boards:

  • TTGO ESP32 Lora with OLED
  • Adafruit Feather M0 RFM96


The hardware can be purchased here:

Optional items, but recommended are:

Teacher Notes

Teachers! Did you use this instructable in your classroom?
Add a Teacher Note to share how you incorporated it into your lesson.

Step 1: TTGO ESP32 Setup

This board is quite nice in that it includes a nice OLED screen and Bluetooth radio. Unfortunately, the LoRa radio is not as good as the Feather, and only seems to get about half the range.

With this board you can choose whether to connect to handset via UDB OTG cable, Bluetooth Classic or Bluetooth LE. You simply flash the board with the appropriate firmware image (there are three different firmware binaries for each connection type).


  • flash the board with the Ripple firmware image: Follow ReadMe on GitHub
  • wire up battery and switch
  • wire up the piezo buzzer to GND and Pin 25
  • optional: 3D print the case

I have also designed a 3D-printable case for this, which you can download from here: https://www.thingiverse.com/thing:3865750

Step 2: Adafruit Feather Setup

These boards are nice quality, but a bit more expensive. There is a bit more involved with these, as you need to do some more soldering to install a LoRa antenna.


  • flash the board with the Ripple firmware: Follow ReadMe on GitHub
  • wire up the piezo buzzer to GND and digital pin 11 . (EDIT: NOT pin 13 as previously stated)
  • solder a u.fl antenna connector to underside, connect antenna to u.fl
  • Optional: 3D print the case. See here for the files: https://www.thingiverse.com/thing:3879020

(Optional) Soldering the Dipole Antenna

The 3D printable case is designed for use with this dipole antenna: https://www.banggood.com/T-Type-900MHz-Long-Range-Receiver-Antenna-IPEX-4-for-FrSky-R9-Mini-R9-MM-p-1361029.html

It's a good antenna, but doesn't have the right connector, so you need to cut IPEX4 one off, then separate the coax braids and solder to the antenna ground pads (see end pic above). To do this, you need to strip about 10mm of the outer plastic off the end of the cable, then separate the very fine surrounding coax wire mesh then put some solder onto this. Then remove about 1mm of the plastic from the inner active wire and put a small amount of solder on this.

Next, pre-tin the antenna ground pads on the Feather, and the active antenna pad in the middle, then solder the antenna to these pads (separated coax to ground pads, active inner wire to antenna pad).

Step 3: Setup the Ripple Messenger App

The companion app for this is called Ripple Messenger. Currently there is only an Android version, which you can download from the Play store: Ripple Messenger

Each person in your group must be allocated a unique numerical ID, between 1 and 254. You need to sort this out among yourselves. There's no central server for coordinating.

You can also (optionally) organise into sub-groups by assigning yourselves with different Group-IDs (again, between 1 and 254). By default you can all just stay in group zero. The groups are like 'channels', and will form separate mesh networks.

Adding Friends

Once you have entered your own details in the Setup screen and selected SAVE, you can then be added as a Friend to other user's handsets by scanning each other's QR codes. This exchanges public keys so you can send messages to each other privately. Other devices in your group will silently relay your messages, but cannot 'open' them up.

Connecting Radio

The radio board can be connected to the tablet/handset either via USB OTG cable, or via Bluetooth. You must set your preference for this by selecting the 'Preferences' menu from the top action bar. There is an icon on the top action bar which will go solid white when it has detected your radio board is connected.

For Bluetooth Classic, you need to make sure bluetooth is on and you need to Pair your handset/tablet with the board manually. Go to Bluetooth setting, and select scan/refresh and tap on 'Ripple Device' when it comes up. Go back to the Ripple app then tap the 'Choose Device' button and select 'Ripple Device' from the list.

For Bluetooth LE you shouldn't need to pair. Just make sure you select 'Ripple Service' in the 'Choose Device' screen.


From the main screen you just tap on the friend you want to chat with, which transitions to the conversation screen (as pictured above). The action bar will show their name, and to the right is a signal indicator which will show whether that user's device is currently reachable, and how strong the nearest signal is.

Just type messages, or tap on the 'pin' icon to the left of the text box to send your current location.

When other users send their location you will see it underlined, and with a calculation of how far away they are and at roughly which compass heading. You can tap on the link to see the location on Google Maps.

Step 4: Feedback

This is just something I have done as a hobby, and because I enjoy this kind of work. It has been an interesting challenge, and is ongoing.

I'm still looking for better radio modules and hardware combinations, along with 3D printing designs to make it more like a consumer device.

There are likely still a number of bugs to iron out. Let me know if this has worked for you, or if you encounter problems. The feedback is very welcome.



Scott Powell.

Be the First to Share


    • Made with Math Contest

      Made with Math Contest
    • Multi-Discipline Contest

      Multi-Discipline Contest
    • Robotics Contest

      Robotics Contest

    25 Discussions


    8 days ago

    Any chance we could get a 868Mhz version? I have a lot of these TTGO LoRa32 boards, but they are all 868 :/
    Also, make sure you check your antennas on the TTGO boards, they are notorious for sending really crap antennas or putting the same antenna for multiple frequencies.. Might account for the range issue, but it might just be that it doesn't have a PA.

    2 replies

    Reply 7 days ago

    OK, I've uploaded an 868MHz build to the github repo.


    Reply 7 days ago

    Sure, I'll try to get an 868MHz build out soon. Yeah, the TTGO stock antennas are rubbish! I put some nice dipoles on, and got over 4km range.


    Question 9 days ago

    Very great idea!
    I am a dummy and i got stack in flashing the Ripple firmware.
    Not a lot of istruction on the github.
    It say ".. and from the command-line, use one of the following command incantations to flash the firmware to your board:"

    If I copy and paste the lines in windows cmd i get "~" not recognized as internal or external command

    And i don't know how to flash this firmware using a cli

    1 answer

    Answer 8 days ago

    Ah, the '~' is a Mac/Unix thing. Means the user's home directory. You would probably need to find which directory Arduino was installed, and replace the '~/Library/Arduino15' with that.


    4 weeks ago

    good prject!
    .. possible to have all the code?

    1 reply

    Reply 4 weeks ago

    No, not at this stage.


    4 weeks ago

    never mind, i see it now,,, 868 MHz is not amateur radio use, however, the 900MHz version is, and would require a license. Just so you know. You might add this into description somewhere

    4 replies

    Reply 4 weeks ago

    OK, will do. All the firmware images at present are for 915MHz, although I'll be preparing a 433MHz one soon for the Heltec boards.


    Reply 4 weeks ago

    Not necessarily, Lora uses ISM license-free bands
    900MHz is a license-free in North America, 868MHz in Europe and 433Mhz Worldwide.


    Reply 4 weeks ago

    Unless radio transmitting devices are designed to meet Part 15 (no license required), then 902MHz to 928MHz use requires a license. Amateur Radio stations are permitted to use power levels up to 1500 Watts. This means any device using 902-928 MHz must put up with interference as well as not interfere with licensed stations. Same goes for the 433 MHz band. - just saying.


    4 weeks ago

    I like the concept of this. Is there any chance you will be porting over to IOS?
    Thank You

    2 replies

    Reply 4 weeks ago

    Eventually, yes. But I don't have the time or resources to do it at this stage.


    Reply 4 weeks ago

    I am looking forward to that time.
    Thank You.


    Question 4 weeks ago

    I'm wondering if you send a message to someone, but they are out of range, when they come back in range, will the message be delivered?

    1 answer

    Answer 4 weeks ago

    No, the sender's app will attempt a number of retries, but then timeout.


    4 weeks ago

    I don't see a reference to any frequencies that are used by this radio. Can you provide this info please? If it is in the amateur radio bands, it will require a license to use, even for data only communications. I would hate to see anyone build this little gem only to get fined for unlicensed use of amateur frequencies. But it is a sweet idea that I might build myself and demo to our emergency services group.


    Tip 4 weeks ago

    A magnet mount antenna would really be great for getting the antenna up higher and possibly outside, vastly increasing range. If possible mount the radio to the magnet mount and weatherproof it, eliminating loss from coax or connectors.