Introduction: 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:

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: TTGO V2 -> to GND and Pin 13, other boards -> 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:

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:

(Optional) Soldering the Dipole Antenna

The 3D printable case is designed for use with this dipole antenna:

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.

If you find this project useful and feel like throwing some Bitcoin my way, I'd be really grateful: My BTC address: 1CspaTKKXZynVUviXQPrppGm45nBaAygmS