New firmware release 1.6.7.b1 (LoRaWAN Nano Gateway with TTN example!!)
daniel last edited by Fred
We are very excited about this one. I know that many around here have been waiting patiently to see the LoPy work as a LoRaWAN Nano Gateway and connect it to servers like TTN, but guess what? we did it :-)
The Nano gateway script is located here: https://github.com/pycom/pycom-libraries/tree/master/examples/lorawan-nano-gateway
For the Nano Gateway itself you need nanogateway, config and main. The other 2 files are examples on how to setup the nodes either with ABP or OTAA join methods.
Before trying the nano gateway make sure to update the LoPy to firmware version 1.6.7.b1 first!
Features/characteristics of the Nano Gateway:
- Single channel and single datarate (for now, multiple datarates on a single channel will come soon).
- Support for Downlinks on any channel and DR.
- OTAA and ABP.
- Semtech packet forwarder protocol version 2.
- NTP sync.
The script uses multithreading and callbacks heavily, so it's a very nice example of the capabilities of the LoPy and MicroPython. The total RAM consumed is only around 22KB.
Features to be added soon:
- Ability to receive packets sent on any spreading factor.
- Add an option to enable and disable debug messages.
- Implement the .stop() method to gracefully stop and start the nano gateway at any moment.
All comments and suggestions are more than welcome.
researcher last edited by researcher
Hello guys, regarding this code here at https://github.com/pycom/pycom-libraries/tree/master/examples/lorawan-nano-gateway
When I am trying to use the config for both, node and nano-gtw, with the AU915 configuration and change the following parameters into:
LORA_FREQUENCY = 915200000
LORA_GW_DR = "SF10BW125"
LORA_NODE_DR = 2
Because on LoraWAN Regional Parameters v1.1rb it says on page 37 that for OTAA procedure, the JoinReq message should be sent with DR2 data rate when BW = 125 kHz.
But when uploading the code, it outputs an error regarding that the following function has an error:
lora.join(activation=LoRa.OTAA, auth=(dev_eui, app_eui, app_key), timeout=0, dr=config.LORA_NODE_DR)
However, it works when I change the config file into:
LORA_NODE_DR = 0
LORA_GW_DR = "SF12BW125"
Am I doing something wrong? Maybe not understanding correctly the technical specification?
Thanks in advance
bilou7 last edited by
Did you add the functionality : "Ability to receive packets sent on any spreading factor" to the lopy gateway ?
Thanks in advance
Malaysia uses the AS923 plan:
Vicky_ last edited by
@jmarcelino I live in Malaysia. May i know what frequency should i use? i have tried to search but i couldn't find.
@jmarcelino thank you again. This makes much sense. I was looking on the wrong end.
Glad you managed to receive data.
Yes, that's exactly what LoRaWAN gateways are :) They don't send or receive anything on their own, that's the job for the network server.
@jmarcelino thank you for your reply!
When I add some data in the downlink field in the TTN backend, this data is received by the node. This is already one more step forward :-)
Should I see the gateway as a "dumb" packet forwarder, and do the logic on the node and the TTN side?
jmarcelino last edited by jmarcelino
In LoRaWAN with TTN (Class A) you must send data from the node in order to receive any messages back.
But if you queue a downlink with TTN you should receive it in your node - for example with
data = s.recv(64)- once you've done an uplink (an s.send(...) ).
I have a setup with a node and a nano gateway with the latest default script from Github. The data is received in the TTN backend, so that part is working.
I want to update the date and time on the nodes over Lora (no wifi) I discovered that no rx data is received on the node. Could you give me a hint how to configure the gateway to send back the current time to the node?
@livius Thanks. I was looking into docs and I found the examples. Though they needed modifications, it worked perfectly.
livius last edited by
@devang-sharma said in New firmware release 1.6.7.b1 (LoRaWAN Nano Gateway with TTN example!!):
look at examples
and sources on git
Devang Sharma last edited by Devang Sharma
@jmarcelino, KotahiNet does not provide free connectivity in India. Also, they provide private LoRaWAN network only to the larger companies.
Is it possible to connect one LoPy(acting as a node) to connect with another LoPy(acting as a Gateway) without such LoRaWAN network?
If yes, can you guide me how to achieve it?
My question might not seem a good one, but I'm really new to LoRa.
@jmarcelino, thanks. I've sent them an e-mail in order to get a free network connection. I hope they'll reply soon.
jmarcelino last edited by jmarcelino
India has a unique Frequency plan:
I recommend setting your config.py for the nano gateway and nodes to
LORA_FREQUENCY = 865062500
and make sure your nodes use this 865062500 frequency as well:
# set the 3 default channels to the same frequency lora.add_channel(0, frequency=config.LORA_FREQUENCY, dr_min=0, dr_max=5) lora.add_channel(1, frequency=config.LORA_FREQUENCY, dr_min=0, dr_max=5) lora.add_channel(2, frequency=config.LORA_FREQUENCY, dr_min=0, dr_max=5)
@daniel, I live in India. While registering the gateway, which frequency plan I should choose? Can I choose Europe or do I have to choose Asia?
I've updated the Nano-gateway documentation to show how to generate a Gateway ID and also to reflect the changes in the TTN interface: https://docs.pycom.io/chapter/tutorials/lopy/lorawan-nano-gateway.html
Thanks again for your suggestion!
Thank you very much for your suggestion, TTN changed their language and gateway registration process recently - we'll update our documentation to reflect this.
fredg last edited by
I'm coming from this tutorial: https://docs.pycom.io/chapter/tutorials/lopy/lorawan-nano-gateway.html
You should update it probably to mention the "I'm using the legacy packet forwarder" for TTN network, and update the code to make it easy to extract the GATEWAY_ID.
Or maybe update the code to allow any GATEWAY_ID for TTN? I'm not sure how it really works...
@daniel Excellent! Seems no need to directly alter the join command since the 'dr' parameter also uses a config parameter, 'LORA_NODE_DR'. I'm looking at the latest example on Github.