SMS over LoRa: Long distance SMS without 4G // Project

Do you want to be able to send an SMS over 20kms without using a mobile phone network? Here’s one small project you can knock up in less than a day allowing you to send an SMS over LoRa.

Or check out the video on YouTube.


LoRa is a great technology allowing you to send messages over very long distances. We’ve seen several attempts reaching over 200kms, (Andreas Spiess), and even 700kms using low altitude balloons.

However, around the suburbs, with a decent antenna, you should be able to reach 20kms comfortably.

How does it work?

So, how can you use LoRa to send messages long distances?

The idea is pretty basic.You have two or more devices with on-board ESP32 and LoRa module.

Each of the ESP32s will create a WiFi Access Point. On your mobile phone or PC you join to either one of the networks. Then point your browser at a web server running on the ESP32.

This will give you a web interface allowing you to send messages over LoRa to the other module and back again. Easy!


So, what do we need for this?

I chose DFRobot’s ESP32 based FireBeetle. It’s similar to AdaFruit’s Feather, so you can use either. Whatever you choose, just make sure it has LiPo support.

The LoRa module I used was from BangGood which was the Ra-02 module from AI-Thinker. This one has a handy uFL connector for external antenna.

Then there’s the header pins that come with the FireBeetle and the strip-board or vero-board, external antenna,

and since the LoRa module has 2mm pitch castellated solder points I needed a converter to standard pitch.

Oh, and there’s also a LiPo battery.

The circuit

So, I need to plan where to place all these components to make it as small as possible with the minimum amount of soldering.

Placing the ESP32 here and the LoRa module here, means we have the SPI interface on the right side.

Allowing easy connection of all the required signals and then I can cut the board to size here. Although it turned out to be smaller than that.

Then all that’s needed is to dremmel out this bit.


So, first solder up the FireBeetle. As always, I don’t solder the modules directly to the PCB, but use headers so I can re-use parts later if needed.

The 2mm to 2.54mm pitch adapter board was a little tricky. As this particular board was designed for XBee modules, but I managed to get all the important bits soldered up.

Then on to mounting up temporarily on to the strip-board so I can mark out where to Dremmel.

Then solder, solder, solder… solder, solder, solder, and you should be left with something like this.

Then cut the excess board off. You’ll have to repeat this for the second module, but I won’t bore you with that.

Then on to soldering up all the signal wires, which is pretty easy as there’s no cross-overs. I could have soldered up all the other DIO lines from the LoRa module here, but since there’s plenty of spare GPIOs, I can do that later. I only need DIO0 and SPI signals.

Then chuck on the LoRa module, FireBeetle and lastly the external antenna.


Next I wrote up some simple Firmware using several Arduino libraries. Check out my website for details. Once I went through a whole lot of boring testing I came up with some basic firmware that I flashed to both devices.

Which allowed me to connect to one of them from my phone and the other on my Mac. Then I could type in messages on one side and have them send over LoRa to the other side.

Cool, eh?


Now bear in mind that this is a direct device to device link and it doesn’t use LoRaWAN.

I wanted to keep it as simple as possible.

Note also that it’s a pretty simple application. I plan to update the firmware to make it more robust and add features like Low Power modes, flash storage of messages and maybe a mobile app instead of using a browser.

So, stay tuned for updates on this project…

Linky links

If you like this YouTube channel please subscribe by clicking the in-video button, or the little red "Subscribe" button in your browser or app. You can also get updates by subscribing to me on Facebook, Twitter, Google+, Pinterest, and also Tumblr.

Forum comments to this post...

  1. To be honest, I really like to this project. Using a browser interface would allow cross-platform compatibility and ease of use. Maybe the mobile app could tap into the various sensors of the device it is installed on to feed data from GPS, barometer, altimeter etc? This could (with marketing, funding, and passion) be the best off-grid communications solution available.

  2. good project, Can you recommend a good external antenna to use in this module (433Mhz)?

  3. Very useful project!
    Low power + long distance, so perfect after the zombie apocalypse.
    Should be paired with a solar power source.

  4. hi sir…
    i was tried this project, but have a problem with crc16.h . No such file or directory.
    maybe you can help me to fix this problem?


  5. Thanks Sir,
    its will help me on my first project in LoRa.
    And stay for your another project…

  6. Hey Mick,

    So I’m confused on which pieces of firmware we should be using. Do we need to just upload the files in your GitHub project page under “Project-LoraSMS” via arduino - and we are all set to go from there?

  7. Cool, I’ve ordered the parts - I’ll let you know once I get started!

  8. Has anyone gotten this project to work? I spent all weekend on it, but kept hitting roadblocks and still can’t get anything to compile in Arduino. Here’s what I did:

    • Added FireBeetle board to Arduino here:

    • Downloaded the Project Files here:

    • Then opened and tried to compile LoRaSMS-D2D.ino in Arduino, got library errors & “PRINT” + “PRINTLN” issues.

    • I download these libraries as zip folders, then added the zip folders via Arduino into my sketch:
      RadioHead: https:// github DOT com/hallard/RadioHead
      FastCRC: https:// github DOT com/FrankBoesing/FastCRC
      RingBufCPP1.1.0: https:// github DOT com/wizard97/ArduinoRingBuffer

    • I then compiled and got CRC16 errors, so I added this library: https:// github DOT com/vinmenn/Crc16

    • The library errors went away, but then saw that “PRINT” & “PRINTLN” threw up errors, I noticed the debug file showed this - BUT I decided to replace PRINT with Serial.print, and PRINTLN with Serial.println, after compiling those errors went away.

    • I then compiled and saw the error “util/atomic.h” as non-existing - this was in RadioHead.h. I then realized there was no util folder and hashtagged that line out.

    • I compiled and got errors talking about “ATOMIC_BLOCK” and similar items within RadioHead library files … .this is where I gave up.

    So my questions are:

    1. Did anyone else see these issues?
    2. Mick, can you supply a step-by-step setup for the firmware process?

    PS - I could only post two links - so the library links have “DOT com” which = .com

Continue the discussion at

7 more replies