First step in LoRa land – microchip RN2483 test

Microchip RN2483 Lora
Microchip RN2483 Lora

After spending some time reading and writing about LoRa it was a good time to make some real test of this technology.

As actually there is no network for LoRa, as much as I know, in my town, I expected to start a simple LoRa test (point to point and not as part of a WAN). I just bought some RN2483 LoRa module from Microchip online and also get some from Avnet (thank you Guillaume)

 

The module is easy to solder on a prototype board and get its command over a serial port. I choose to make two modules :

  • The first one is connected to a FTDI cable and will stay at home as a basestation
  • The second one is connected to an Arduino and will be a mobile device for my test

Create the test board

The RN2483 module have a lot of pins but most of them are GPIOs and power supply. To make my board simple, I decide to not connect all the GND and it sounds to work as expected, so at the end my schema looked like this.

RN2483 Lora simple circuit
RN2483 Lora simple circuit

The FTDI cable provides 5V so you have to add an LDO regulator to get 3,3V as module power supply. I just plug RX/TX from FTDI to the module and that is all what you need. The RF antenna I use is a half wave antenna centered on 868 Mhz. Once soldered, the test board are looking like :

LoRa on FTDI
LoRa on FTDI
LoRa on Arduino
LoRa on Arduino

Make the first communication ready for LoRa

For communicating with the module, the default serial port setting is 57600 bps. Once set on your terminal, you can communicate with the module. The list of available command can be retrieved here.

There are 3 level of commands :

  • sys for system command
  • mac for LoRaWan protocol related command
  • radio for low level radio transmission

The command sys get ver returns the firmware version, it is a good way to ensure the circuit works.

sys get ver
RN2483 0.9.5 Mar 24 2015 14:15:33

Then to get a communication between the two device, based on a point to point LoRa link, you must start pausing the mac level. The mac level is managing the LoRaWAN protocol we do not want to use at that point.

So you have to run on each of the board: It returns a long pause duration when you do not specify your expected duration.

mac pause
4294967245

Now we are ready for communicating, we can check the default configuration : this document from Semtech is a great help to understand these parameters.

radio get mod
lora
radio get freq
868100000

These 2 first command indicates that the module is configured as LoRa device by default with a rx/tx frequency of 868.1Mhz

radio get sf
sf12

The spread factor parameters defines the sensitivity of the reception, with a such value (sf12 is the more sensitive) the SNR can be up to -20dB. This also impacts the duration of the transmission that becomes longer.

radio get bw
125

The used bandwidth determine time on air and sensitivity. With 125KHz the sensitivity is better but time on air is longer. Chip is capable from 125KHz to 500KHz. The time on air is doubled from 125KHz to 250KHz.

With a 125kHz bandwidth and a spread factor of 12, the time on air duration is about 1 second

radio get cr
4/5

The CR (Coding rate) parameter determines an error correction mechanism by adding some information to the message. 4/5 is the best correction mechanism especially when the signal is low.

radio get prlen
8

The prlen gives the preamble length in symbol.

radio get pwr
1

Power level gives the power in dB of the transmitter ; values are from -3db to 15dB

With these setting, you can get the all the information about sensitivity and bitrate from the LoRaCalculator. With the default configuration we have the following configuration:

  • bitrate : 292 bps
  • time on air for 12 byte : 991ms
  • link budget : 138dB
  • power consumption : 23mA/h

Now we can change the power to 14dB to get more power and better link budget (this will consume 44mA/h and get 151dB as link budget)

radio set pwr 14
ok
radio get pwr
14

Any change to the radio level can’t be saved, so you have to reconfigure it on every reboot.

Let’s send the first message over LoRa

Now we can send a message over the air. The first thing to do is to configure one of the device for reception : the parameter 0 indicates that reception is blocking until getting a message.

mac pause
4294967245
radio rx 0
ok

On the second device we can now sent a message :

mac pause
4294967245
radio set pwr 14
ok
radio tx 123456789012
ok
radio_tx_ok

On the receiver we get :

radio rx 0
ok
radio_rx  123456789012

Now let’s make a keyapp testing device

The next step will be to test LoRa performance in real environment (even if my RF design is not really nice regarding my soldering stuff !! By the way, let’s make something. The system will be based on a transmitter always sending a message every 30 seconds and a receiver making a led blinking every time the message is received. (Ok this is not respectful of the duty cycle … so let’s say 100 seconds instead of 30)

#!/bin/bash
# LoRa loop send a message in loop over LoRa medium at default frequency
# module is connected to /dev/ttyUSB0 device
dev=$1

startRet() {
   (if read -t 3 ret < $dev; then echo $ret ; return 0 ; else return 1 ; fi) &
   wf=$!
}
checkRet() {
   wait $wf
   return $?
}


stty -F ${dev} 57600 cs8 -cstopb -parenb -echo

startRet ; echo "sys get ver" > $dev
if checkRet ; then
  startRet ; echo "mac pause" > $dev
  if checkRet ; then
     startRet; echo "radio set pwr 14" > $dev
     if checkRet ; then
        i=0
        while true ; do
           echo emiting $i
           startRet ; echo "radio tx 123456789AB" > $dev
           sleep 100
           i=$(( $i + 1 ))
        done
     else echo "error setting power"
     fi
  else echo "error setting mac in pause"
  fi

else echo "cant establish communication"
fi

Now, on receiver, we simply want to wait for a message, check if the message is the expected one, then blink a led a couple of time to indicate a message has been received. This is based on Arduino.

String str;
void setup() {
  Serial1.begin(57600);
  while (!Serial1);

  pinMode(3,OUTPUT);
  digitalWrite(3,HIGH);

  // reset the module
  pinMode(2,OUTPUT);
  digitalWrite(2,LOW);
  delay(500);
  digitalWrite(2,HIGH);
  delay(2000);

  Serial1.setTimeout(2000); 
  str = Serial1.readStringUntil('\n');
  Serial1.println("radio set wdt 105000");
  str = Serial1.readStringUntil('\n');  
  Serial1.println("mac pause");
  str = Serial1.readStringUntil('\n');  
  digitalWrite(3,LOW);
}
void loop() {
  // switch recieve mode
  Serial1.println("radio rx 0");
  str = Serial1.readStringUntil('\n');
  if ( str.indexOf("ok") == 0 ) {
    int ok=0;
    while ( ok == 0 ) {
       str = Serial1.readStringUntil('\n');
       if ( str.length() > 1 ) {
          if ( str.indexOf("radio_rx") >= 0 ) {
            if ( str.indexOf("0123456789AB") >= 0 ) {
              int j;
              for ( j = 0 ; j < 10 ; j++) {
                 digitalWrite(3,HIGH);
                 delay(100);
                 digitalWrite(3,LOW);
                 delay(100);
              }
            }
            ok = 1;
         }
      }
  } 
}

Some little modification compared to initial schema :

Pin2 is connected to RN2483 reset PIN and Pin3 is connected to a LED for showing result : blinking 10 times when the message is received.

The command radio set wdt 105000 set a reception timeout to 105s to ensure being in the expected transmission windows.

Make the test, get the map

With this solution done, I did some tests driving in my city. The result is not a really good benchmark for many reason, the first one is that the emitter was on my roof but not on top of it, so part of my roof was hiding the western part of the city what can can easily see on the graph below. The blue point from where the arrow are starting is the emitter position.

LoRa coverage zone
LoRa coverage zone

The emitter was in the city downtown and the 1,3Km is really going on a city environment with a lot of building. The longest distance have about 2km of city and 2km of country side. The part on the top left of the map is a mountain that is limiting the coverage in this area.

On the map, the red part are location where I did a test and get nothing. The blue one the location where I did the test and it was working well, the uncolored parts are where I did no tests.

By the way, I’m very impressed by these results as my emitter is really not optimized for transmission : standard internal antenna, connected as you can see on the photo… The transmitter was limited to 14dB on the 15dB available to keep an acceptable power consumption.

Next step will be to put an emitter on top of our mountains to make a better test !

This entry was posted in IoT, Networks and tagged , , . Bookmark the permalink.

62 Responses to First step in LoRa land – microchip RN2483 test

  1. Simon says:

    Very interesting “first step”! But I think when you write “The blue one the location where I did the test and it was not working” you actually mean “and it *was* working” – correct?

  2. pierre says:

    Hi,

    Could you detailed how you connected the antenna to the board to match the 50Ohm ?
    Did you simply connected the antenna+ground pins to a SMA connector ?

    Thanks,

    Pierre

  3. Vikram Kriplaney says:

    Thanks a lot for this!
    Could you please upload a better diagram? It’s hard to read the one you posted, especially the pin numbers.

  4. Philipp says:

    Hi,

    First of all, this is an interesting post, thank you for that!
    However, I’m a bit confused because of your statement regarding the Coding Rate: As far as I understood Semtech’s LoRa Design Guide, coding rate 4/5 is the lowest and 4/8 is the highest value, since:
    4/5 means 4 bytes payload = 5 bytes transmitted => 1 extra “spare” byte containing error correction data
    4/8 means 4 bytes payload = 8 bytes transmitted => 4 extra “spare” bytes
    Please correct me if I’m wrong. Currently, I’m searching for the “best” operating parameters and any help / hint is welcome!

    Thanks, Philipp

  5. Martin says:

    Hi!, thanks a lot for the information!
    I think you’ve made a mistake on the coding rate selection (or explanation). The stronger code should be 4/8 which is more redundante. It reduces the effective bit rate and it increases the time on air but you get better link margin.

  6. Manuka says:

    Thanks for the info & testing experiences with these RN2483 LoRa™ modules ! I ‘ve done a lot with Chinese HopeRF & Dorji LoRa™ modules to good effect (as outlined in my popular Instructable), & also have explained the Lora™ config. terms. Hope this helps ! Stan. in New Zealand

  7. JC says:

    Hi, Thanks a lot for sharing!

    Could you plese share which terminal program you are using (Putty)? I can connect to the module and send “sys get ver”, but no feedback. Also, for the FTDI, are you using USB-to-TTL or USB-to-Serial (RS-232/UART)?

    Thanks

    • Paul says:

      I’m using putty and some other terminal tool equivalent. Did you check if hardware flow control has been disable, it is better if it is disable.

      • Abdul Hakeem says:

        Hi Paul ,
        Your post is very helpful to me,but i have one question .
        How can i make the “radio rx 0” free after once it was used.

        when i am using “radio rx 0” in infinite loop few times only i am getting data ,mostly i am getting “busy” sate so if you know any alternate way to make “radio rx 0” command is free after once it was used.

        Thanks in Advance.

  8. Ravi says:

    Hi Paul,

    Greetings from India.
    It is a nice detailed post. Got an idea of the range capability and interfacing complexity of the modules, Now can think of using this in my next projects. Was suspecting whether these modules really give such long range as advertised. Your post cleared my doubts.

    Also i see that you disabled the WAN/MAC part, does it mean that anything that we send from the modules it will be received by any modules listening in the area like a broadcast?

    Regards,
    Ravi

    • Paul says:

      The LoRaWan stack require to have a LoRa baseStation. For my first test, I only had devices so I bypassed the WAN stack. In point to point connectivity any device can hear any other device like a broadcast.

  9. abdul hakeem says:

    Hi Paul ,

    Your post is helping me so much…..
    but i have one question ?
    when i am receiving data i need to skip the “ok” status just i need to receive the what data i received..how is it possible ..if u know please help me…

    for example i send data like “radio tx 12345”

    Actual result is in receiver side:
    *****************************
    ok
    radio_rx 12345

    But i need:
    ********
    radio_rx 12345 (is it possible,i need skip ok)

  10. Riccardo says:

    Hi Paul,
    I’m Riccardo from Italy, I have a question, RN2483 works at 3,3 V, and it’s ok that you put a ams1117 for the regulation of 5v from FTDI cable, but RX pin of RN2483 can have 5v input from TX pin of FTDI cable without a voltage divider?

  11. Pingback: Simple LoRa GPS tracker based on RN2483 and L80 » disk91.com – technology blog

  12. Riccardo says:

    Thank you, for this step, I’ve make some test and create a DIY breakout board for RN2843.
    Work very well, now we have to do some test to verify coverage area.. You can find here our experience..
    http://www.smartcityzen.it/iniziano-i-test-di-portata-per-il-lora-network-di-brescia/?lang=en

  13. Pingback: Start tests for Brescia LORA NETWORK - SmartCityZen

  14. Andrew says:

    Great article, thanks for that.
    I bought two Lora Mote RN2483. Following these istructions it was very easy do a communication between the devices.
    But i have a little problem, there is a way for creating a continuous communication between the 2 modules, without that every time the receiver ask for a sending?

  15. Andre Cramer says:

    Great article, sure helps with first steps.
    Still wonder why the 433MHz antenna is not used. Is it because of the firmware version that does not use it or ???

    • Paul says:

      not sure performance is as good as 868 and both are possible in Europe. 433 is the only solution for APAC. Any other idea ?

      • Andre Cramer says:

        Thnx for your comment paul.
        I thought that the module automatic switches between 433 and 868.
        Is the 868 the only freq being used in your app?

      • Paul says:

        yes

  16. David says:

    I think you have been lucky and that you actually should also make sure the power of the RX an TX datalines equals the power supply of the RN2483. I followed your instructions and fried a RN2483: the TX line is not working anymore. So to everybody who wants to repeat these steps: without properly adjusting the voltage on RX and TX with (for example) a voltage divider, you may destroy your RN2483!

  17. Charly86 says:

    Paul,
    thanks fo sharing this article, I’m also testing these modules but I did not wanted to have a serial connection for my testing and wanted to be able to talk with them other Wifi and web interface.
    For this I created a WeMos (small ESP8266 board) shield and a WebSocket2Serial proxy sketch based on WebSocket
    Works fine for those are interested, all design (soft and hard) is located on github here
    https://github.com/hallard/WeMos-RN2483
    Thanks again for sharing

  18. Armel says:

    Hi Paul,

    Thanks for this great article !

    I was wondering if you had had trouble with the RN2483 sometimes not responding after Arduino sketch upload, and needing a reset to work again.
    It happens to me sometimes, is that the reason why you added a connection to the reset pin in your full setup and code ?
    Best,

    • Paul says:

      For sure RN2483 serial communication is a mess … I experienced a lot of problem and a lot of de synchronization. For this reason in some code I had to manage command re-execution to ensure the cmd is well executed (sometime you get K instead of OK…) Another way is make it more stable is to reduce the bitrate (56Kbps does not have any interest in many case) this can be done following the procedure documented in the manual after a hard reboot.

  19. Pingback: Messing About with LoRa - ResourceKraft

  20. ramesh says:

    i currently on working on lora rn2483.. its working fine for me, but i want set parameters for coverage of
    3 to 4 km…will any one help me in setting those parameters…thanks in advance

    • Paul says:

      Not sure to understand if you want to reduce coverage or get higher coverage …
      To reduce you can reduce power transmission, read the doc, it is well described
      To get higher coverage, use a 180bits/s transmission 125KHz_SF12, or tune your antenna.

      Basically you should reach more than this distance with an antenna correctly installed.

  21. Jun Chun says:

    Nice post. Do you mind if I translate it to Korean language and post it in my blog?

    • Paul says:

      Not a problem if your are indicating, linking the source and introduce your post to present it as a translation.

  22. Kar says:

    Hi Paul,

    Like many others have said, great post. Definitely helped me a lot.
    However, i face an issue with range. I have now tested a few different RN2483 modules with different SMA connectors and even swapping different antennae. But i dont get more than a few hundred metres range. Any thoughts on what i might be doing wrong? Any help is much appreciated.

    The only change i have done to the default module setting is increasing the radio power to 15 and disabling the wdt by setting it to 0, which i think is inline with what you have done.

    Thanks!

  23. Daniel says:

    Hi Paul, I recently started a new project and need to communicate two arduinos and your post really helped me to get started. At this time I am sending data between them but the problem is that the arduino that works as receiver gets blocked after a while, ¿Do you know what can be happening?.

  24. Semih says:

    Hi,
    Lora normally designed for star network include gateways, modems. In all documents about Lora, the technology does not used for p2p communication. However, I want to use Lora for p2p communication for two devices such as Rx device and Tx device. Is it right? or is it illegal for Lora definition?

  25. Usman Asghar says:

    Nice post and great effort. However what i understood is that the packet is broadcast to the channel so every other lora device on the same channel will be receiving it. How to ensure that be specific about one node using LORA not LORAWAN. device addressing possible in LORA ? I know it is in LORAWAN but what if i am using LORA only

    • Paul says:

      Nothing prevent this if receiver does not filter on emitter address. That is why LoRaWan implements encryption to ensure only expected receiver can understand the message. You can do the same on LoRa and for sure your receiver must manage message reception from non expected device (you may receive noise and be able to process it correctly)

  26. Hossein says:

    Hi, very nice post you made. I try to increase the range. I set all parameters to optimal values. I use RN2483 (868MHz), Power 15dBm, SF12, Lora BW (125), RX BW(2.6), BR (50000), Error Coding (4/8), I use LoRa Evaluation kit.
    But, the maximum range is 1km if I put RN Module and Gateway in front each other in a direct road without any obstacle. Can you help me to increase this range?

    • Paul says:

      Looks strange, with standard configuration, device to device in LoRa mode I was able to reach 4km, no tuning.
      I assume you have a lot of noise on your receiver location or you antenna can be really poor.

  27. Viren says:

    Hi Paul, a very helpful post you made. I tried the same with arduino mega ,that is perfectly working with all standard parameters. But how can I use RN2483 in full duplex mode or continuous communication between modules?

  28. Ramesh Kumar Sah says:

    Really Nice post, with this I was able to test the RX and Tx part with the LoRa modulation. I also found out that it is possible to do FSK modulation with RN2483. I got the device setup but I was not able to transmit and receive.

    I wonder but do you have used FSK with the RN2483 and if yes can you help me with this. I will really appreciate it .

    Thanks.

  29. sandy says:

    Hi Paul…….Im using LoRa module RN2483 for point to point communication .Here Im transmitting the Latitude and longitude data using LoRa with the help of arduino Mega.But Im not able to receive the data its showing me “busy”always.I don’t why,Please say me the solution.

  30. abhinash v says:

    Hi Paul…. Im using LoRa RN2483 for point to point communication.
    I don’t have an antenna right now.
    Can I use these modules without antenna for small distance applications ?
    Where will i get this antenna?
    Can you share me some link or something with exact specifications?

  31. sandy says:

    Hi Paul………Im interfacing LoRa RN2483 and GPS with Arduino Mega,it transmit the Latitude and Longitude values but in the receiver end Im receiving only “busy” all the time no data is received.Could u say me the reason and give me the solution also………

  32. Yjo_ says:

    Hello,
    Thank you so much, your article allows me to save a big amount of time ! Very helpful !

  33. Pingback: Raspberry PI: cheap LoRa gateway

  34. Uma says:

    Hi Paul,

    We are Working on LoRa RN2483 with Gate way ,we are getting only 300 meters Range communication.
    Please help me to Increase the Range of LoRa RN2483 up to 2km.

  35. sjayaram says:

    Hi Sir,
    I am using Microchip Lorawan Kit 800.
    I am able to see the MOTE RN2483 temperature and Light sensor reading at MoTE display.
    How can I fetch the temp. and light sensor data from MOTE RN2483 from an PC.
    How can I keep send the light and temp. sensor data at particular time interval.

    Thanks ,
    S.Jayaram

  36. Jayarams says:

    Hi Paul,
    I bought microchip Lora development kit 800 for exploration of LoRa technology.
    One RN2483 MOTE (which have USB connect with PC), Gateway (Have USB and Etehrnet to PC) and Server.
    I checked all LORA MOTE values like
    sys get ver, radio and mac commands using their java gui tool.
    But I need to get temp. sensor value (GPIO13 PIN in RN2483) at regular time interval.
    How to enable rn2483 mote to send sensor reading at particular time interval to PC via serial USB connection.
    Any code example or suggestion on this.

    Thank you,
    Jayarams

Leave a Reply

Your email address will not be published. Required fields are marked *