collection of GNU Radio blocks for receiving LoRa modulated radio messages using a Software Defined Radio (SDR)
 
 
 
 
 
 
Go to file
Pieter Robyns ee39370457 Merge branch 'Wosser1sProductions-master' 2017-04-21 14:04:37 +02:00
apps Default GRC threshold and freq_grad_idx improvement 2017-03-31 16:49:22 +02:00
cmake
docs Default GRC threshold and freq_grad_idx improvement 2017-03-31 16:49:22 +02:00
examples Quick improvements 2017-03-29 13:04:04 +02:00
grc Default GRC threshold and freq_grad_idx improvement 2017-03-31 16:49:22 +02:00
include/lora Quick improvements 2017-03-29 13:04:04 +02:00
lib Fixed missing ctor arg in lora_receiver 2017-04-18 12:41:19 +02:00
python Fixed missing ctor arg in lora_receiver 2017-04-18 12:41:19 +02:00
swig Test rebuild 2017-02-17 18:34:21 +01:00
.gitattributes Change default linefeed handling 2017-02-20 20:20:12 +01:00
.gitignore
AUTHORS Additional improvement in synchronisation 2017-03-21 18:03:44 +01:00
CMakeLists.txt
LICENSE
MANIFEST.md
README.md Additional improvement in synchronisation 2017-03-21 18:03:44 +01:00

README.md

gr-lora

The gr-lora project aims to provide a collection of GNURadio blocks for receiving LoRa modulated radio messages using Software Defined Radio (SDR). More information about LoRa itself can be found on the website of the LoRa Alliance.

alt text

Features

Though there is no official reference implementation of LoRa, the protocol is described in various patents and blog posts (for a good resource, see this RevSpace page). The following features are fully supported by gr-lora:

  • Synchronizing to LoRa frames transmitted with any spreading factor
  • Deinterleaving
  • Dewhitening
  • Decoding + Hamming error correction of the LoRa PHDR length field
  • Decoding + Hamming error correction of frame payloads (all coding rates)

Not supported yet:

  • CRC checks of the payload and header
  • Decoding multiple channels simultaneously
  • Clock drift correction for very long frames

This feature set is enough for basic, experimental usage with SDRs.

Installation

The installation procedure is the same as for any GNURadio OOT module:

mkdir build
cd build
cmake ../  # Note to Arch Linux users: add "-DCMAKE_INSTALL_PREFIX=/usr"
make && sudo make install

The following dependencies are required:

Testing

To test your installation, you can download one of the sample LoRa signals at rpp0/gr-lora-samples. Configure apps/lora_receive_file.py to use the sample and run the script. You should see the decoded sample data:

$ ./lora_receive_file.py

Bits per symbol: 7
Bins per symbol: 128
Header bins per symbol: 32
Samples per symbol: 1024
Using Volk machine: avx2_64_mmx_orc
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 b8 73 af 81 69
88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 88 fd e5 af 81 69
12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 12 a3 69 af 81 69
...

Alternatively, if you have a LoRa transmitter, you can configure/modify /examples/_examplify.py to generate example files and add them to /examples/qa_BasicTest_Data.xml to run them automatically with python/qa_BasicTest_XML.py (xmltodict module needed). Note that this script should be run with its shell script in build/python. This is to ensure compatibility with make test.

Contributing

Contributions to the project are very much appreciated! If you have an idea for improvement or noticed a bug, feel free to submit an issue. If you're up for the challenge and would like to introduce a feature yourself, we kindly invite you to submit a pull request.

Hardware

Primarily, gr-lora was developed using a USRP and RN2483 LoRa chip. The following LoRa modules and SDRs were also tested and work with gr-lora:

Transmitters: Pycom LoPy, Dragino LoRa Raspberry Pi HAT, Adafruit Feather 32u4, Microchip RN 2483 (custom board) Receivers: HackRF One, USRP B201, RTL-SDR

Usage

See the LICENSE file for the license of this project. If you are working on a project that involves the usage of gr-lora, we would appreciate it if you can acknowledge gr-lora by linking to this page.

Changelog

  • Version 0.5 : Major overhaul of preamble detection and upchirp syncing
  • Version 0.4 : Support for all spreading factors, though SFs 11 and 12 are still slow / experimental
  • Version 0.3 : Support for all coding rates
  • Version 0.21: Fixed some issues reported by reletreby
  • Version 0.2 : C++ realtime decoder, manual finetuning for correcting frequency offsets of the transmitter.
  • Version 0.1 : Python prototype file based decoder, SF7, CR4/8