EDIT [2018-06-05]: I have updated the code with the Firmware 1.18.+ releases. The code is available at our Growing Data Foundation Github.
These notes are to assist Australian IoT enthusiasts to get started in connecting a LoPy to The Things Network as it is unfortunately (not yet) straight forward to make them work with the current AU-915 TTN Channel plans. As the initiator of the local Adelaide Community of The Things Network I have been experimenting with a number of devices to connect sensors to #TTNADL. One of my personal favourites is the Pycom LoPy as a nice middle-ground between capabilities and technical complexity.
However I ran into a problem where the LoPy would not get a signal back from the TTN network when joining over OTAA even though the TTN Console (http://console.thethingsnetwork.org/) the device showed as connected. With some friendly help from Jose Marcelino at the Pycom Forum this turned out to be an issue with the 915MHz frequency regions. Since there is no actual a standard governing which of the channels are used by TTN gateways, what is outlined here is what is implemented by most TTN communities down under (I know that at least ADL, BNE, SYD and WOL adhere to those). This is the typical Sub-band 2 (Channel 8-15) implementation of AU ISM 915 with TTN Gateways.
This channel plan is also implemented by the install script for the MultiTech Conduit Gateways which are currently the most common gateways installed across Australia (see https://github.com/TheThingsNetwork/gateway-conf/blob/master/AU-global_conf.json)
|Channel#||Direction||Frequency MHz||Bandwidth kHz||Data rate|
|8||up||916.8||125||DR0 – DR3|
|9||up||917.0||125||DR0 – DR3|
|10||up||917.2||125||DR0 – DR3|
|11||up||917.4||125||DR0 – DR3|
|12||up||917.6||125||DR0 – DR3|
|13||up||917.7||125||DR0 – DR3|
|14||up||918.0||125||DR0 – DR3|
|15||up||918.2||125||DR0 – DR3|
|0||down||923.3||500||DR8 – DR13|
|1||down||923.9||500||DR8 – DR13|
|2||down||924.5||500||DR8 – DR13|
|3||down||925.1||500||DR8 – DR13|
|4||down||925.7||500||DR8 – DR13|
|5||down||926.3||500||DR8 – DR13|
|6||down||926.9||500||DR8 – DR13|
|7||down||927.5||500||DR8 – DR13|
To set the LoPy unit up it needs to have the set frequency plan removed and the region specific frequency plan loaded (even though they were bought as 915Mhz units). I have created some quick Python code to set up the LoPy with the above channel structure as the default settings for those devices do not work. Note that you have to remove the default channel settings and add the correct ones before you can successfully register and send data.
Below is my adaptation of the LoPy LoraWAN example to work with TTN in Australia. Please note that the LoPy Lora class only accepts DR values from 1-7. Suggestions more than welcome.
|from network import LoRa|
|pycom.heartbeat(False) #needs to be disabled for LED functions to work|
|#Set AppEUI and AppKey - use your values from the device settings --> https://console.thethingsnetwork.org/|
|app_eui = binascii.unhexlify('1234567890ABCDEF')|
|app_key = binascii.unhexlify('1234567890ABCDEF1234567890ABCDEF')|
|lora = LoRa(mode=LoRa.LORAWAN, public=1, adr=0, tx_retries=0)|
|# Remove default channels|
|for index in range(0, 72):|
|# Set AU ISM 915 channel plan for TTN Australia|
|for index in range(8, 15):|
|lora.add_channel(index, frequency=915200000+index*200000, dr_min=0, dr_max=3)|
|lora.add_channel(65, frequency=917500000, dr_min=4, dr_max=4)|
|for index in range(0, 7):|
|lora.add_channel(index, frequency=923300000+index*600000, dr_min=0, dr_max=3)|
|#Join TTN Network via OTAA|
|lora.join(activation=LoRa.OTAA, auth=(app_eui, app_key), timeout=0)|
|# wait until the module has joined the network|
|while not lora.has_joined():|
|print('Trying to join TTN Network!')|
Hope this helps other LoPy owners in Australia to connect to The Things Network. And if you are in Adelaide why don’t you come along to our OpenData and IoT Meetup ? Let’s build this thing together.