LoRaWan Book
LoRaWan Book
LoRa is an RF modulation technology for low-power, wide area networks (LPWANs). The name, LoRa, is a
reference to the extremely long-range data links that this technology enables. Created by Semtech to
standardize LPWANs, LoRa provides for long-range communications: up to three miles (five kilometers) in
urban areas, and up to 10 miles (15 kilometers) or more in rural areas (line of sight). A key characteristic of the
LoRa-based solutions is ultra-low power requirements, which allows for the creation of battery-operated
devices that can last for up to 10 years. Deployed in a star topology, a network based on the open LoRaWAN
protocol is perfect for applications that require long-range or deep in-building communication among a large
number of devices that have low power requirements and that collect small amounts of data.
Consider the differences between LoRa and other network technologies that are typically used in IoT or
traditional machine-to-machine (M2M) connectivity solutions:
1 There is no one-to-one relationship between LoRa-based devices and gateways in a LoRaWAN network;
messages sent to and from end devices travel through all gateways within range. Deduplication is handled by
the network server.
2 Downlink messages broadcast over 500 KHz channels can use all six available spreading factors (SF7…
SF12).
Importantly, the LoRa modulation spreading factors are inherently orthogonal. This means that signals
modulated with different spreading factors and transmitted on the same frequency channel at the same time do
not interfere with each other. Instead, signals at different spreading factors simply appear to be noise to each
other.
LoRa signals are robust and very resistant to both in-band and out-of-band interference mechanisms. LoRa
modulation also offers immunity to multipath and fading, making it ideal for use in urban and suburban
environments, where both mechanisms dominate. Additionally, Doppler shifts cause a small frequency shift in
the time axis of the baseband signal. This frequency offset tolerance mitigates the requirement for tight
tolerance reference clock sources and, therefore, makes LoRa ideal for data communications from devices that
are mobile.
LoRa Modulation Characteristics
The LoRa modulation characteristics for each region are defined in the LoRaWAN Regional Parameters
document, available from the LoRa Alliance® (https://lora-alliance.org/resource-hub/rp002-100-lorawanr-
regional-parameters). In North America, there are 64, 125 kHz LoRa uplink channels defined, centered on a
200 kHz raster as can be seen in Figure 5. 11. There are eight 500 kHz uplink channels as well as eight, 500
kHz downlink channels defined. In North America, gateways can have up to 64, 125 kHz uplink channels as
well as eight 500 kHz uplink and downlink channels. This type of gateway is referred to as a carrier grade
macro gateway and is used for outdoor applications only.
Figure 6: LoRa modulation characteristics
Table 2 provides another way to understand these modulation characteristics.
Table 2: LoRa modulation characteristics
The LoRa physical layer is intended for low throughput, low data rate, and high link budget (i.e., “long-
range”) applications.
For a fixed channel bandwidth, the higher the spreading factor, the higher the processing gain, resulting
in an increase in sensitivity and, therefore, an increase in link budget. Subsequently, however, the time
on air will also increase.
Orthogonality between spreading factors allows for the transmission of multiple LoRa signals that are
both on the same channel frequency and in the same time-slot.
For a fixed SF, a narrower bandwidth will increase sensitivity as the bit rate is reduced.
LoRaWAN in North America uses 125 kHz uplink channels and 500 kHz uplink and downlink channels
The Code Rate is the degree of redundancy implemented by the forward error correction (FEC) used to
detect errors and correct them. This rate is fixed at 4/5 for the LoRaWAN protocol
As Stephan Hengstler asserts in his book, A Novel Chirp Modulation Spread Spectrum technique for Multiple
Access, “LoRa is a constant envelope modulation (very low cost, power efficient power amplifier
implementation) … [it] is the most robust, ultra-low power and long range RF solution available.”
Data Collisions and Spreading Factor Orthogonality
With LoRa, packets using different spreading factors are orthogonal, meaning that they are invisible to each
other: as mentioned earlier, they simply appear as noise to one another. Therefore, two packets that arrive at the
same time on the same receive channel at different spreading factors will not collide and, both will be
demodulated by the gateway modem chip. However, two packets with the same spreading factor arriving at the
same time on the same channel might result in a collision. However if one of the two packets is stronger by six
dB, it will survive.
The capacity of a LoRaWAN network is a function of its gateway density. To maximize the capacity of the
network, using an adaptive data rate (ADR) mechanism is essential. The main goal of ADR is to save the
battery power of the LoRaWAN end-nodes. By having the end-nodes closest to a gateway transmit using the
lowest spreading factor, their time on air is minimized, thereby prolonging their battery life. More distant
sensors transmit at a higher spreading factor. A trade-off is made between battery power and distance given that
a higher spreading factor allows for a gateway to connect to devices that are farther away.
LoRaWAN Network Fundamentals
To fully understand LoRaWAN networks, we will start with a look at the technology stack. As shown in Figure
7, LoRa is the physical (PHY) layer, i.e., the wireless modulation used to create the long-range communication
link. LoRaWAN is an open networking protocol that delivers secure bi-directional communication, mobility,
and localization services standardized and maintained by the LoRa Alliance.
Figure 11: Gateways receiving and transmitting messages from end devices
Furthermore, LoRa allows for scalable, cost-optimized gateway implementation, depending on deployment
objectives. For example, in North America, 8-, 16-, and 64-channel gateways are available.
The 8-channel gateways are the least expensive. The type of gateway needed will depend on the use case.
Eight- and 16-channel gateways are available for both indoor and outdoor use. Sixty-four channel gateways are
only available in a carrier-grade variant. This type of gateway is intended for deployment in such places as cell
towers, the rooftops of very tall buildings, etc.
Network Server
Figure 18: Session keys are shared with the network server and the application server
Figure 19 illustrates the security of data packet transmissions. The control traffic between the end device and
the network server is secured with a 128-bit AES Network Session Key (NwkSKey). The data traffic that
travels between the end device and the application server, is secured with a 128-bit Application Session Key
(AppSKey). This method ensures that neither the gateway nor the network server can read the user data.
Figure 19: Secure transmission of data packets
Device Classes: A, B and C
LoRa-based end devices may operate in one of three modes, depending on their device class. All such devices
must support Class A operation. Class B devices must support both Class A and Class B modes, and Class C
devices must support all three modes of operation. These modes of operation have to do with how the devices
communicate with the network.
Class A Devices
Figure 20 shows how the Class A mode of operation works.
Figure 22: Class A operation when a data packet is received in the first receive window
Figure 23: Class A operation when a data packet is received in the second receive window
Note: A device will not try to send another uplink message until either:
1. It has received a downlink message during Rx1, or
2. The second receive window following the last transmission is complete
Class B Devices
An enhancement of Class A, LoRaWAN Class B mode offers regularly-scheduled, fixed-time opportunities for
an end device to receive downlinks from the network, making Class B end devices suitable for both monitoring
sensors as well as actuators. All LoRa-based end devices start in Class A mode; however, devices programmed
with a Class B stack during manufacturing may be switched to Class B mode by the application layer.
End devices in Class B mode provide for regularly-scheduled receive windows, in addition to those that open
whenever a Class A-style uplink is sent to the server.
1.1.1.1 Class B Beacons
For the Class B mode of communication to work, a process called beaconing is required. During the beaconing
process, a time-synchronized beacon must be broadcast periodically by the network via the gateways, as
illustrated in Figure 24. The end device must periodically receive one of these network beacons so that it can
align its internal timing reference with the network.
Figure 24: Class B beaconing operations
Devices use beacons to derive and align their internal clocks with the network. Devices do not need to process
every beacon if the device is already aligned. In most cases, realigning several times a day is sufficient, with a
minimal impact on battery life, as illustrated in Figure 25.
In addition, for same data rate interference, when there is a signal level difference higher than 7dB, the
strongest frame is received correctly. This holds true when the coding rate is 4/5, normal interleaving, which is
the LoRaWAN default LoRa PHY configuration.
Next, we plot the measured RSSI distribution per data rate. On the same plot, we will also show the traffic load
versus time. While the traffic load varies over time, the data rate ratios remain constant, as does the RSSI
distribution per data rate. The set-up is tested with a single data rate (SF10), then the first load level is tested
from hours 7 to 18, a higher load from hour 19 to 30, and the highest load from hour 31 to 45.
Figure 3: RSSI Distribution per Data Rate and Traffic Load over Time
From this distribution, and the table above, we can compute the probability that a time overlap of frames yields
the loss of a frame. The distribution is simplified to four random Gaussian variables with same mean and Sigma
as the observed distribution. We report this in a matrix, with columns representing the aggressing data rate, and
lines the victim data rate.
Table 2: Orthogonality Matrix
This table shows that if a frame transmitted using SF8 is overlapped by an SF10 frame while being received by
a gateway, there is a six percent probability that the SF8 frame will not be received correctly. Thus, there is a 94
percent probability that the gateway will receive the frame correctly.
If the orthogonality were perfect, there would be a zero percent error rate for overlaps, except on the diagonal.
In this dataset, the RSSI measures are incomplete because we only have access to the best RSSI among all
receiving gateways of each frame. It is difficult to determine how different the orthogonality matrix would be
with a complete set of measures.
Orthogonality Factor Simulation
Let’s look at a slightly different scenario, one with indoor/deep indoor nodes, and outdoor gateways. The
simulation uses 660 gateways with a density of 1.5 gateways per square kilometer (950 m site distance).
100,000 nodes are spread on the grid, and propagation to each gateway is simulated using the Hata model1 for a
small-to-medium city, with shadowing, fast fading, and indoor penetration losses distributed from 20dB to
40dB. The path loss exponent value here is 3.6.
Spreading factors SF7 through SF12 are used in this example. Here, we apply an Adaptive Data Rate (ADR)
and Transmit Power Control (TPC) strategy with a margin of 8dB to account for fast fading. The range of TPC
is 20dB, i.e. once the fastest data rate is reached, the transmitted power can be reduced by up to 20dB.
1
https://en.wikipedia.org/wiki/Hata_model
To compute the orthogonality matrix, we consider the gateways in the center, and gather the distribution of
RSSI for each data rate. Then we proceed as with the measured data: for each couple of spreading factors,
(victim SF, aggressing SF), we derive the probability that the aggressing SF RSSI is too high for the victim
frame to be received. This probability is probability of (RSSI_aggressor > (RSSI_victim -
victim_required_sinr). For instance, if victim is SF12, and aggressor SF7, this is probability:
.
This probability is computed as:
This matrix is slightly different than that shown in Table 2, which relies on incomplete measures. We can note,
however, that if we remove the diagonal, the sum of each line is roughly the same. Given this information, we
can see that ADR and power control tend to give devices with a higher RSSI a higher data rate, which means
these devices have a better chance of creating errors in case of a collision.
In this MachineQ and Semtech trial, there is no ADR; each physical device emulates traffic from several virtual
devices, using the four data rates.
Interference Levels Inferred from Simulated Data
The measured data is generated from a relatively small network, with only 10 gateways in the same
neighborhood. Thanks to the simulation, we can estimate how much additional noise comes from devices that
are not in range of a given gateway. Collisions can be classified as one of two types: collisions from frames that
can be received by the gateway we consider, or collisions from frames that are out of the coverage area.
Next, using the simulation above, let’s consider a central gateway and count the devices in range, along with
the data rate at which they operate. We then define three channel load levels: 10 percent, 100 percent, and 400
percent. The 400 percent load means that on average, on each LoRa channel, four transmissions of in-range
devices occur. For each channel load, we derive the duty cycle required to achieve the load specified for the in-
range devices, assuming an identical rate of frames per device, whatever their data rate. Last, we apply the same
duty cycle to the devices that are not in range, and measure the average power received by the central gateway
from these devices. We compute this sum over different disk sizes, to check whether the integral converges.
The result is plotted in Figure 4. We compare this average interference level to the thermal noise floor. This
thermal noise floor is experienced by any receiver, and values at normal temperature are -114dBm/MHz + NF,
where NF is the noise figure of the receiver. In our case, the bandwidth is 125KHz, and typical NF is 3dB for a
gateway, so receiver noise floor is -114dBm/MHz+10*log10(0.125MHz)+3dB = -120dBm.
We cannot directly observe the offered load for each gateway because some packets are lost and because the
logs only provide the number of receiving gateways, rather than the gateway IDs. Figure 5 shows the total
number of received frames, without duplicates, over time. From these curves, we then derive the spreading
factor distribution, to check whether it is relatively constant over time.
From the load, we compute the probabilities of overlap. For each phase, there are four probabilities for each
data rate. Here, we take the example of Phase 3, and report the overlap probabilities in Table 6.
Table 6: Overlap Probabilities
Not all time overlaps result in reception errors. We can now use the pseudo orthogonality matrix to multiply,
term by term, the overlap probabilities. This gives the collision probability. The sum of each line is the total
probability of collision, from all data rates. We report the collision rate, for a single gateway, in Table 7. We
see that, compared to Table 6, the diagonal terms are slightly reduced, while the non-diagonal terms are reduced
a considerable amount, thanks to the orthogonality of the various spreading factors.
Table 7: Collision Rate Probability for a Single Gateway
1. Full details can be found in Application Note: Bluetooth® Immunity of LoRa® at 2.4 GHz. [6] A very
important consideration is that, unlike a real Bluetooth interferer, the unwanted interfering signal is always
“on.” This is not representative of the “bursty,” packetized nature of a true BLE interferer.
Far from the Wanted Frequency: Out of Band Interference
Where Lcoupling = 20 dB, Pimmunity is the absolute blocking immunity of Figure 3 and Ptx is 0 dBm.
Taking the resulting link budget, we plug it into a rearranged free-space path-loss equation to calculate the
separation distance, d at which our receiver would be overpowered by the BLE interferer.
Figure 13. LoRa Packet Format of the Purpose of our interference immunity study
At SF12, 200 kHz bandwidth, this equates to a time on air of 892.8 ms and a LoRa symbol time of 20.2 ms.
We compare this with an example of BLE time on air from BLE v4.2: Creating Faster, More Secure, Power-
Efficient Designs—Part 1 [8]. Here, I assume the worst-case data transfer possible in Bluetooth 4.2, i.e. a very
high data transfer from an interfering radio that is very close to our LoRa radio.
Assuming a hopping pattern over all 37 non-advertising channels of the BLE channel plan, we can expect 2.12
ms of transmission time, repeating every 277.5 ms.
Figure 14. The Duty cycle of the BLE interferer (red) versus a single LoRa packet (top) on a single channel
In the general case, the product of the probability of collision is used to determine the immunity. In our case, a
packet collision is guaranteed. Meaning that if we have a collision, and are within the range of power that will
cause interference, we will lose our LoRa packet.
A very important feature of the LoRa modem, is its ability to lose up to half of every LoRa symbol, and still
demodulate the incoming data.
Interferer Duty Cycle vs LoRa Symbol Time
In LoRa systems this is a frequent occurrence. LoRa allows us to trade-off time-on-air for increased sensitivity.
This implies interference with much lower time-on-air (higher data rate than LoRa). A very important feature of
the LoRa modem is its ability to lose up to half of every LoRa symbol and still demodulate the incoming data.
Recalling that the symbol time is given by:
In our 2.4 GHz example, we can see that 2.12 ms BLE packet duration versus our 20.2 ms LoRa symbol period
means we should still be able to recover a LoRa symbol that has been blocked by a BLE packet.
To demonstrate the immunity of the LoRa modem to “bursty” interference, I performed a LoRa co-
channel rejection measurement. Contrary to previous measurements, this is done with a pulsed interferer. On
the X-axis, instead of varying the frequency offset, I am varying the “on” time of the interferer. The timing
diagram in Figure 15 illustrates this.
Figure 15. Pulsed Interference with a Fixed Duty Cycle
In this example, the interferer will always be on the same channel, and it will have a fixed duty cycle of 10
percent. Instead of changing the frequency variable, we are changing the “on” time TON (so consequently also
the “off” time), and retaining our fixed duty cycle of 10 percent.
Duty cycle = TON / (TON + TOFF)
Although these specific measurements were performed with a pulsed CW interferer (no modulation) and in the
sub-GHz band, the measurement results apply to any LoRa modem. The exact settings used were:
LoRa SF12
FEC Coding Rate = 4/5
LoRa BW = 125 kHz
LoRa Symbol time = 32 ms
Given the time on air, it is clear that end devices (nodes) closer to the gateway do not need the high link budget
that goes along with SF12; nor do they need to stay on air as long. This being the case, using ADR can optimize
the SF used for each meter, and minimize the subsequent Time on Air.
ADR is a very simple mechanism that changes the data rate based on simple rules:
If the link budget is high, the data rate can be increased (i.e. the SF is increased)
If the link budget is low, the data rate can be lowered (i.e. the SF is reduced)
It tailors the node’s data rate to the available link budget.
Determining the Data Rate
How does the network server determine the appropriate data rate? Let’s take a look:
The end device’s application sends a message up through the gateway, which simply passes the message along
without acting on the data. The gateway in a LoRaWAN network is a simple, low-cost device that converts
LoRaWAN packets into IP packets which can be sent over a secure backhaul to the network server. These IP
packets include a small amount of metadata about the reception time and signal strength. Based upon the
strength of the received signal, the network server determines what the optimal node data rate should be (that is,
the spreading factor).
Figure 1
The Media Access Controller, also called the MAC layer, of the network server, talks to the same layer in the
LoRaWAN stack of the end-node. A MAC command is then issued from the server based upon its global view
of the strength of the signals received from all gateways. The data rate that the node should use, is sent back to
the device from the server through the gateway with the best signal strength.
Bit Rate vs. Energy Downlink
What is the influence of this ADR mechanism when there is only one gateway?
Figure 2 illustrates the result of a simplified case, in which we consider a free space path loss model to estimate
the attenuation between both antennas (that of the gateway, and that of the device).
Figure 2
Nodes close to the gateway use a high data rate (e.g. SF7). Therefore, they spend less time on air and exploit
the low link budget that they need. For more distant nodes, the data rate is lower (e.g. SF12) and the link budget
is higher. In reality of course, the path loss picture is more complicated. It will depend on the specific
environment around the gateway, as well as where and how the nodes are deployed.
The important point to keep in mind is that, because the communications are orthogonal to each other: multiple
data rates on the same channel can be received simultaneously.
Moreover, the amount of airtime required for a device to send its payload is optimized, which radically reduces
the device’s energy consumption.
Network Capacity Optimization
Consider ADR from the perspective of the network. Figure 3 shows a single gateway, G1, with a range of
devices in a variety of applications.
Figure 3
Here we can see that ADR has already been in effect and the nodes have all had their rates adjusted. Even
though the gateway can serve all of the nodes, because of the long range of the LoRa physical layer, we can end
up ‘seeing’ too many devices from a given gateway, and therefore need additional capacity.
This is easily done with LoRaWAN. Because there are no constraints on which gateway receives signals from a
given node, we simply add another gateway (G2). This gateway will also serve any previously-unconnected
nodes in the vicinity. More interestingly though, for nodes that are already connected to G1, ADR will do the
rest. The nodes closest to G2 will be instructed by the MAC command from the server to increase their data
rate, thereby reducing their link budget accordingly.
By reducing the available link budget, we reduce the range of the communication. This will render many nodes
invisible to G1 and add capacity to uplinks from, and downlinks to, the end-nodes.
Gateway Limitations
Before we can examine ADR in greater detail, we need to consider some important design trade-offs that come
into play because the gateways are being used in a license-free ISM band. The ISM band, although free, comes
at the expense of some practical constraints that are common to any Low Power Wide Area Network
(LPWAN).
The first considerations are legal. Some ISM bands, notably in Europe (which is governed by ETSI) restrict the
amount of airtime a license-free radio can use. For most applications, this is no problem. However for a
gateway that aggregates many applications and must acknowledge a fair portion of the uplink traffic, the legal
limit may become problematic.
The second consideration is that, even when not constrained by the law, ISM bands and available filtering
technologies do not permit full duplex operation of the gateway, at least not in Europe for instance. That means,
when a device sends an uplink, it cannot listen for a downlink.
The result is that downlinks, such as acknowledgements and ADR commands, are expensive when compared
with uplinks. A LoRaWAN network can support far fewer downlinks from a gateway to a node than it can
uplinks from the node to the gateway.
The other point to think through in the context of LoRaWAN is that end devices operating in Class A mode can
announce themselves at any time and then virtually disappear until the next communication. This is important
to consider when determining the link budget for a given node on a given application. A fairly conservative
ADR mechanism is required here because, while optimizing the data rate is generally advantageous, it must not
come at the cost of lost connectivity.
Given these considerations, it is clear that mobile devices cannot use ADR. Imagine a car-tracking application.
In such a case, by the time an ADR command reached the node, the propagation environment will have
changed so radically that the data rate, and therefore the link budget, would no longer be valid.
Acknowledgement Limits
To better understand which applications can make use of ADR, and which can’t, we need to look into the
control mechanism behind ADR.
While the actual data rate itself is determined by the network server, the ADR mechanism can be invoked from
either the network or the end-node. Regardless of which side of the communication triggers the ADR
mechanism however, whether or not using ADR is appropriate is determined by the application. ADR is
invoked simply by setting the ADR bit in the frame control header. Ordinarily, the end device application
decides whether or not using ADR is appropriate. If so, the bit is set – letting the network know that the end-
device can have its data rate determined by the network.
To understand this process, imagine a device is connected to the network and has announced itself as ADR-
enabled via an uplink (Figure 4). This uplink travels through one or more gateways that simply relay the
message back to the network server. By default, it will be sent at the lowest data rate, that is, the longest range
setting.
What does the network server do? It waits.
Figure 4
Once the network server has amassed several results, it calculates the median of those results and determines
both the available link budget and the highest data rate that can be supported, along with a margin for error, to
allow for fluctuation in the channel characteristics. Following the next uplink, a MAC command to change the
data rate is sent down to the end device, as appropriate. (Figure 5 shows a MAC command setting the ADR to a
data rate of SF7.)
Figure 5
The end device then switches to the new spreading factor and all future uplinks are set at this new data rate. The
network server remains aware of any degradation of the channel. It will issue new MAC commands the next
time it determines the data rate needs to be changed.
You might be asking yourself: “What happens if the link is lost?”
The entire time that the end device sends its uplink packets, it also increments the “ADR acknowledge
counter”. The counter can be incremented until it reaches a predefined limit, as illustrated in Figure 6.
Figure 6
When the node reaches the ADR acknowledgement limit, it sets the ADR acknowledge request bit in the frame
control header, shown in red:
For downlink frames, the FCtrl content of the frame header is
Acknowledgement Delay
After the ADR acknowledge request bit is set, there is a predefined delay, the ADR acknowledge delay, as
illustrated in Figure 7. During this time, the end device waits for the network server to respond to the
acknowledgement request. Because the network server might need to respond to several requests, or need to
send other downlink traffic, this delay helps make scheduling a given downlink easier for the network server to
accomplish.
Figure 7
Rather than being specified in terms of time, the ADR acknowledge delay is expressed as a number of uplink
messages. This keeps the implementation of a low-cost, low-consumption end device simple.
Any downlink packet can include the ultimate acknowledgement from the network server. No special bit needs
to be set in the header; the packet is simply treated as also being the acknowledgement.
If no answer is received from the network server by the time the acknowledgement delay period has expired,
the data rate will automatically be reduced by one step, as illustrated in Figure 8.
Figure 8
After this one-step data rate reduction, the end device continues sending messages to the server (at this new,
lower, data rate) requesting an ADR acknowledgement. Once an acknowledgement is received, the end device
uses the new, server-determined, data rate until it receives an instruction to change it again via the normal ADR
mechanism. However, if no answer is forthcoming, the end device continues to ratchet down the data rate, step
by step, until it gets a response or, assuming the device and network are in Europe, until it reaches SF12 (Figure
9).
Note: The highest spreading factor that can be used with LoRaWAN varies by region, for instance in the USA,
the highest SF is SF10.
Figure 9
Figure 10 shows very simplified picture depicting a situation wherein a single frequency channel is shared
among multiple data rates.
Figure 10
Conclusion
For static end devices, the ADR is managed by the network server, based on the history of the uplink packets
received. This is referred to as Network-managed ADR or Static ADR.
For mobile end devices, the network based ADR strategy does not work because of the unpredictable channel
attenuation which occurs as the device moves. Rather, with mobile end devices, ADR is performed “blindly” by
the end device. This is referred to as Blind ADR. For more information about Blind ADR, see the tech
paper An Introduction to Blind ADR.
LoRa® Device Mobility: An Introduction to Blind ADR
The LoRaWAN® adaptive data rate (ADR) mechanism slowly adapts the data rate between an end device
(“end node”) and a gateway depending upon the prevailing channel conditions1. Once established, the link is
periodically maintained and removes much of the need for downlink confirmation messages to the end node.
This makes it ideal for high capacity, static applications such as metering. However, for mobile applications
where the channel conditions will change rapidly, we cannot use ADR.
In this article, we introduce the notion of blind ADR its purpose, and its advantages.
Consumption, Link Budget and Airtime
To see how to strike a balance between these conflicting requirements, we will consider a GPS-plus-LoRaWAN
pet tracking application, where every 10 minutes the tracker wakes and sends its GPS status and coordinates,
comprising 17 bytes. Wrapped in a LoRaWAN frame, this equates to a total of 30 bytes of packet payload. We
assume that the battery will need to last for one year. If we were going to select a LoRa single data rate, we
would have to choose from among the compromises outlined in Table 1.
Table 1
1. For information on the standard ADR mechanism, network-based ADR, see the LoRa Adaptive Data Rate
tech paper.
An In-depth look at LoRaWAN® Class A Devices
Introduction
A LoRaWAN®-based network is made up of end devices, gateways, a network server, and application servers.
End devices send data to gateways (uplinks), and the gateways pass it on to the network server, which, in turn,
passes it on to the application server as necessary.
Figure 1: Uplink Transmission
Additionally, the network server can send messages (either for network management, or on behalf of the
application server) through the gateways to the end devices (downlinks).
Figure 2: Downlink Transmission
End devices in a LoRaWAN network come in three classes: Class A, Class B and Class C. While end devices
can always send uplinks at will, the device’s class determines when it can receive downlinks. The class also
determines a device’s energy efficiency. The more energy efficient a device, the longer the battery life.
All end devices must support Class A (“Aloha”) communications. Class A end devices spend most of their time
in sleep mode. Because LoRaWAN is not a “slotted” protocol, end devices can communicate with the network
server any time there is a change in a sensor reading or when a timer fires. Basically, they can wake up and talk
to the server at any moment. After the device sends an uplink, it “listens” for a message from the network one
and two seconds after the uplink (receive windows) before going back to sleep. Class A is the most energy
efficient and results in the longest battery life.
In contrast, rather than only waiting for one of its sensors to notice a change in the environment or fire a timer,
Class B end devices also wake up and open a receive window to listen for a downlink according to a
configurable, network-defined schedule. A periodic beacon signal transmitted by the network allows those end
devices to synchronize their internal clocks with the network server.
Finally, Class C (“Continuous”) end devices never go to sleep. They constantly listen for downlink messages
from the network, except when transmitting data in response to a sensor event. These devices are more energy-
intensive, and usually require a constant power source, rather than relying on a battery.
To illustrate the different levels of power consumption for each of the different end-device classes, see Figure
3.
Figure 3: Energy Consumption by Device Class
The default delay for Rx1 (RECEIVE_DELAY1) is a network parameter found in the LoRaWAN Regional
Parameters document from the LoRa Alliance®. The default delay may be region-specific, and can be changed
by the network operator through the MAC command RxTimingSetupReq. It is typically set to one second
The end device then waits one second after Rx1 closes before opening Rx2. This means that
RECEIVE_DELAY2 = RECEIVE_DELAY1 + one second.
Note: A device will not try to send another uplink message until either:
1. It has received a downlink message during Rx1, or
2. The second receive window following the last transmission is complete
Transmission Frequencies and Data Rates
The frequency used for Rx1 is a function of the uplink frequency. The data rate it uses is a function of the data
rate used for the uplink transmission. The default relationship between the uplink frequency and the Rx1
downlink frequency and data rate are defined in the LoRaWAN Regional Parameters document. The default
parameters can be remotely reconfigured by the network operator using the relevant LoRaWAN MAC
commands.
Rx2 uses a frequency and data rate that can be configured using a MAC command. The defaults are region-
specific.
MAC Commands
With respect to Rx1, the offset between the uplink transmission (Tx) data rate and the downlink data rate can be
configured using the Rx1DRoffset field of the RxParamSetupReq MAC command
To configure the Rx2 data rate, use the MAC command RxParamSetupReq.
The DiChannelReq MAC command allows the network to associate a different downlink frequency with the
Rx1 window. This command works for all regions that support the NewChannelReq MAC command. For
example, DiChannelReq applies in the EU and in China, but not in the U.S. or Australia, as described in the
LoRaWAN Regional Parameters document.
Class A Energy Profile
The duration of each receive window must be at least as long as the time required by the end device’s radio
transceiver to effectively detect a downlink preamble. If the device detects a downlink preamble during this
time, the radio receiver will stay open until the downlink data is demodulated.
If a downlink was detected and demodulated during Rx1 and if, (after the address and Message Integrity Check
(MIC)) it is determined to be intended for the end device that received it, the device will not open Rx2 in an
attempt to conserve energy. However, if the end device does not receive a downlink message during Rx1, it will
continue to open Rx2 on schedule.
When there is nothing for an end device to receive, it will still open its reception windows, but just long enough
to determine whether there is a preamble. At minimum, this is 5.1 milliseconds (ms) at a data rate of SF7. At
maximum, it is 164 ms at a data rate of SF12. If, on the other hand, there is a downlink coming to the device, at
SF7, it will take less than 100 ms to demodulate the message. At SF12 it can take more than two seconds.
Figure 7: Uplinks, Downlinks and Wake-up Times for SX126x Radios
The energy drain linked to Rx1 and Rx2 when no downlink message is detected is negligible compared to the
energy required for the transmission of the uplink
LoRaWAN Network Topology
Figure 8 illustrates the LoRaWAN network topology. The key difference between the LoRaWAN approach and
others is that end devices are paired with the network itself and are not exclusively tied to a single gateway.
Rather, end devices broadcast their signals to all gateways within range. Each of the receiving gateways pass
the data packet along to the network server, and then the network server de-duplicates the message and sends a
single version of it to the application server.
Figure 8: LoRaWAN Network Topology
There are several advantages to this topology:
No complicated network planning is required. Gateways can be added anywhere at any time.
Accurate message delivery is more robust, since multiple gateways receive the same data packet during
each uplink. This is called uplink spatial diversity.
There is no need to plan for different frequencies for each gateway, or to reallocate frequencies when
the number of gateways change. All gateways are constantly listening to all frequencies of the network.
Mobile devices can operate at low power thanks to the fact that any gateway can receive messages from
any device. This means that (in contrast, for example, to Cellular networks) the LoRaWAN network
does not notice or care that the device is moving; it simply receives uplinks from the gateways nearest
the device’s current location.
Unconfirmed and Confirmed Messaging
Messages from end devices to the network and application servers and vice versa may be unconfirmed or
confirmed.
When a device sends an unconfirmed message, it does not require an acknowledgement from the server. For
example, most of the time a smoke detector will send periodic, unconfirmed uplinks to the network server via
nearby gateways just to confirm that it is working. The gateways receive the data and pass it on to the network
server, which in turn passes it on to the application server.
When sending a confirmed message, the end device requires that the message be acknowledged as received by
the network server. Let’s look at our smoke detector again. When the smoke detector detects something, it will
continue to transmit alerts that need to be confirmed until the alert is acknowledged. The acknowledgement
informs the smoke detector that someone is responding to the alert. Because downlinks from the network are a
scarce resource, they should be used sparingly. Confirmed messages should be used only for very important
sensor data.
Figure 9 shows a smoke detector transmitting encrypted, unconfirmed messages (see the arrows pointing from
the device at the bottom of the diagram up to the Application Server at the top via the three leftmost boxes),
which are received by two gateways. The gateways add encrypted metadata to the messages and then forward
them to the network server. The network server decrypts the metadata and sends the data packet to the
application server, which decrypts the data.
In orange, we see the smoke detector sending an alert. These are confirmed messages, however, in the first two
instances, no acknowledgement has been received, so the device continues to broadcast the alert. Finally, after
the third transmission of the alert in our example below, the application server sends an acknowledgement to
the device via the network server and the most appropriate gateway.
Figure 9: Unconfirmed and Confirmed Messaging
Application Server Downlinks
In this next example, the smoke detector application server has data to transmit to a specific, sleeping, smoke
detector (the end device). However, since the smoke detector is a Class A device, the application server has to
wait until the smoke detector wakes up before the server can send the data. For smoke detectors, this is a
periodic message (e.g., sent every 8 hours) sharing status information—like battery status—with the application
server and not a real smoke-detection event. Receipt of this message by the end device may be either confirmed
or unconfirmed. Take a look at Figure 10. Here, the application server has data to send to the smoke detector,
but the device is asleep. The server must wait for an uplink from the device before it can send its data. As soon
as the uplink is received, the application server immediately transmits the downlink. In the case of an
unconfirmed message of this sort, upon receipt of the downlink, the device goes back to sleep.
Figure 10: Application Server Downlink
Summary
In short, all end devices must support Class A operation, which is the most energy efficient mode of
communication and supports the longest battery life. Class A end devices stay in deep-sleep mode until they
sense a change in their environment or some other event is triggered. When this occurs, the affected device
wakes up and sends its data to the network server (and eventually the application server) via one or more
gateways. Following the uplink transmission, the end device will open two consecutive receive windows,
during which they listen for potential downlink transmissions from the server.
An In-depth Look at LoRaWAN® Class B Devices
Introduction
In a LoRaWAN® network, end devices operate in one of three modes: LoRaWAN Class A, Class B, and Class
C. As described in An in-depth look at LoRaWAN Class A devices, the network can only send messages
(downlinks) to an end device in Class A mode during one of two short receive windows, which open just after
the device has sent a message (an uplink) to the network. These uplinks, however, are not prescheduled and
may be transmitted by the device at unpredictable times. While this is great for conserving power, that power
conservation comes at a cost. For example, end devices in Class A mode do not allow for a known reaction time
when the customer application or the server wants to send a message to the device.
This is where LoRaWAN Class B mode can help. An enhancement of Class A, Class B mode offers regularly-
scheduled, fixed-time opportunities for an end device to receive downlinks from the network. All LoRaWAN
end devices start in Class A mode; however, devices programmed with a Class B stack during manufacturing
may be switched to Class B mode by the application layer.
Class B: The “Beaconing” Class
End devices in Class B mode provide for regularly-scheduled receive windows, in addition to those that open
whenever a Class A-style uplink is sent to the server. For this to work, a time-synchronized beacon is broadcast
periodically by the network via the gateways, as illustrated in Figure 1. The end device must periodically
receive one of these network beacons so that it can align its internal clock with the network.
Based on the beacon timing reference, end devices can open receive windows (ping slots) periodically. Any of
these ping slots may be used by the network infrastructure to initiate a downlink communication.
Figure 1: Network beacon opportunities
The transmission of a downlink message from an application server to a Class B device is illustrated in Figure
2. Here is a summary of the flow:
1. The application server (AS) queues a downlink message (DL) into the network server (NS)
2. The network server computes the next ping slot schedule
3. The network server computes the best gateway to use based on the last uplink received from the device
and the current gateway’s transmission schedule
4. The network server queues the downlink into the selected gateway
5. When the selected ping slot start time is reached, the gateway transmits the downlink
6. At the same time, the device turns its receiver on and receives the downlink
When there is no downlink to be sent (roughly 99 percent of the time), the network does not transmit anything.
However, the device still opens its receiver at the beginning of the ping slot. When it does not detect a
preamble, it goes back to sleep as quickly as possible to conserve power.
Figure 2: Beacon flow
The reception of the synchronization beacons and the ping slots add additional power consumption overhead
compared to a Class A device; therefore, a device is allowed to toggle between the Class A (the lowest power
consumption mode) and Class B modes.
The decision to switch between the two modes is use-case specific and is left to the device’s application layer.
If the switch needs to be controlled from the network side, the customer application must use one of the Class A
uplinks to trigger a downlink to the application layer. The application layer on the end device must then
recognize and respond to the request to switch modes—this process is not managed at the LoRaWAN level.
For a LoRaWAN network to support Class B end devices, gateways must be able to synchronously broadcast a
beacon that provides a timing reference for the end devices’ internal clocks. The end devices then use this
timing reference to schedule when ping slots are opened to receive potential downlinks from the network.
Because all gateways broadcast the Class B beacon synchronously on the same channel and using the same
radio parameters, a device within range of several gateways will receive the superposition of multiple beacons,
all experiencing different attenuations and phase distortions.
In order for this end device to be able to demodulate the superposed beacons with as little interference as
possible, the gateways must synchronously transmit their beacons with a timing jitter smaller than one
microsecond.
This way, the various beacons that superpose at the antenna of the device actually look like a single beacon
packet suffering from radio multi-path, therefore they can be demodulated.
The Beaconing Period
Synchronization beacons are transmitted by network gateways once every 128 seconds.
The interval between two consecutive beacons is divided evenly into 4096 ping slots.
Figure 3: Ping slots
The 128-second beaconing period has been chosen as a trade-off between minimizing the gateway transmit
duty-cycle (saving the gateway transmit time budget for useful downlinks from the application server), while
minimizing the power consumption of the end device as it attempts to lock-on to and track the beacon. (To
acquire the beacon, the device must keep its receiver on for at least one beacon period.)
You can estimate the power consumption of a Class B end device by first calculating the time on air as well as
the time the receive windows are active.
Class B Power Estimation
Here is an example of how to estimate the power consumption for Class B end devices.
The power overhead of Class B operation is a function of:
The time-on-air of the beacon, which is region-specific
The periodicity of the ping slots (application driven)
The ping slot data rate (which sets the minimum duration of each ping slot)
The average Class B downlink periodicity
For this numerical example, we will assume the following hypothesis:
Beacon is transmitted using SF9/125kHz => beacon time-on-air ~ 160mSec
Ping slot periodicity: 32sec (the device opens a ping slot every 16 seconds)
Default ping slot data rate: SF9/125kHz
Device receives, on average, one 30-byte Class B downlink per hour.
The device current in Rx mode is 10mA (typical for SX1272/76 products)
Equation 1: Estimating Class B device power consumption
We can see from this example that for a ping slot periodicity of 32 sec (meaning that the device is reachable
with an average latency of 16sec), the power contribution is, roughly, split equally between the beacon
synchronization and the opening of the ping slots.
The table above takes into account a possible imprecision of +/-30ppm RTC XTAL. 30ppm over 128sec leads
to a +/- 4mSec maximum timing inaccuracy. The 32mSec ping slot duration is long enough to allow a +/-
4mSec misalignment between the transmitter (network) and the receiver (device). For more information about
this calculation, see Application Note AN1200.23.
What Does the Beacon Look Like?
All beacons are transmitted using the LoRa modulation in a mode known as implicit header mode; that is,
without a LoRa® physical header, and without CRC appended by the radio. This is possible because the beacon
uses a fixed coding rate and a fixed payload length. The beacon therefore only consists of a preamble and a
fixed-length payload.
The beacon preamble is longer than the default. This allows end-devices to implement a low-power, duty-
cycled beacon search. This helps to minimize the power consumption of the device during beacon acquisition.
The beacon payload, BCNPayload, consists of three parts: a network common part (that is, this data is sent
identically by all gateways), an optional gateway-specific part (this part may be different for each gateway), and
a timestamp time in seconds since January 6, 1980 00:00:00 UTC (the start of the GPS epoch). The integrity of
the beacon’s network common part is protected by a 16-bit CRC. For specific information about how the CRC
is computed, see the latest LoRaWAN specification.
The RFU field is equal to zero. (The length of the RFU field is region-specific.)
Note: In practice, many networks only broadcast the network common part of the beacon and do not include
gateway-specific fields.
The Gateway-Specific Beacon Element
The gateway-specific portion of the beacon payload, when present, provides additional information regarding
the gateway that is sending the beacon. Therefore, this portion of the beacon will likely be different for each
gateway. The gateway-specific portion of the beacon payload is protected by a CRC-16 computed on
the GwSpecific+RFU fields. The CRC-16 definition is the same as that of the network common part.
Figure 4: Beacon payload
The latitude and longitude (Lat and Lng) fields within the Info field encode the geographical location of the
gateway.
Figure 5: Info field format
The North-South latitude is encoded using a signed, 24-bit word, where -223 corresponds to 90° south (the South
Pole) and 223 corresponds to 90° north (the North Pole). The equator corresponds to 0.
The East-West longitude is encoded using a signed 24-bit word where -223 corresponds to 180° west and
223 corresponds to 180° east. The Greenwich meridian corresponds to 0.
Beacon Acquisition and Tracking
As mentioned previously, an end device must receive a timing beacon to bring its internal time base in sync
with the network before it can switch from Class A mode to Class B. Once successfully operating in Class B
mode, the end device must stay in alignment with the network beacons. This helps ensure that the device’s
internal time base does not drift compared to the network time.
A device operating in Class B mode may temporarily stop receiving beacons for many reasons (interference,
device moving in and out of the network coverage area, etc.).
When the device temporarily loses a beacon, it relies on its internal clock to keep opening the Class B
synchronous ping slots. The LoRaWAN specification requires that Class B devices should be able to operate in
Class B mode without receiving the beacon for up to two hours.
This temporary Class B operation without a beacon is called beaconless operation. During this holding period,
the reception of any beacon directed to the end device will extend beaconless operation for another two hours.
If a Class B end device is temporarily unable to receive beacons, it will gradually widen its beacon and ping
slot reception windows to account for any drift of its internal time base. Obviously, a higher precision time base
allows the device to open narrower reception windows, thus minimizing its power consumption. The accuracy
of the real time clock oscillator is therefore very important for Class B devices. If a Class B end device doesn’t
receive a beacon during the 120-minute holdover period, the end device will return to operating in Class A
mode.
Ping Slots and Ping Periods
Based on the beacon timing reference, end devices periodically open ping slots (reception windows). A
network-initiated downlink to an end device using one of these ping slots is called a ping. The gateway chosen
to transmit this ping is selected by the network server based on signal quality indicators from the last uplink
sent by the end device. For this reason, mobile Class B devices must send periodic uplinks, so that the network
server can update the downlink routing-path database.
To avoid systematic collisions and problems of overhearing messages, each device’s ping slot index is
randomized and changed at every beacon period.
The ping slot periodicity may be as short as one second, or as long as 128 seconds, as illustrated in Figure 6.
Figure 6: Ping slot periodicity
The device opens ping slots regularly. However, the network does not always have downlinks to transmit.
Therefore, most ping slots are not used by the network. When this is the case, the reception window on the end
device is closed as soon as the radio transceiver determines that no preamble is present. If a
preamble is detected, the radio transceiver will remain on until the downlink frame is demodulated. The MAC
layer will then process the frame, check that the address field matches the end device address, and that the
Message Integrity Check (MIC) is valid. Only then will the message be forwarded to the application layer on
the end device.
Unicast and Multicast Pings
Downlinks can be either unicast or multicast. Unicast messages are sent to a single end device, while multicast
messages are sent to several end devices at the same time. For a multicast message to be successful, the
following conditions must be met:
All devices in a multicast group must share the same multicast address and associated encryption keys
All devices must be open at the same time, on the same channel, using the same data rate
Note: To remotely set up a multicast group please see the LoRaWAN Remote Multicast Setup Specification
(v1.0.0)
Class B: Uplink Frame and MAC Commands
Uplink frames in Class B mode have the same structure as those used in Class A communications, with the
exception of the Frame Control (FCtrl) octet in the frame header.
Figure 7: Uplink frame structure
For Class A communication uplinks, Bit 4 of the FCtrl octet is set to 0. This bit is set to 1 for Class B uplinks.
Setting the Class B bit to 1 in an uplink message will signal to the network server that the device has switched
to Class B mode and is ready to receive scheduled downlink pings.
Because a LoRa-based device always starts in Class A mode, All MAC commands specified for Class A end
devices MUST be implemented in Class B end devices, in addition to those commands specifically used for
Class B operation. For more information, see the LoRaWAN Specification, v1.0.3.
Conclusion
By design, all LoRa-based end devices support Class A communication. Class A devices can send uplinks to
the network server at any time, and only listen for downlinks immediately after sending their uplinks. In
contrast, Class B devices allow for predictable times when the network server can send a downlink to the
device. The trade-off for this predictability is that Class B devices are not as energy efficient as those in Class A
mode; therefore, the battery life of Class B devices is shorter than that of Class A devices.
An In-depth Look at LoRaWAN® Class C Devices
Introduction
End devices in Class C mode are used when extremely low power consumption is not an issue and latency
needs to be minimized. The server-side application determines that it is managing class C devices during the
join procedure.
Characteristics of a Class C Device
Based on Class A foundations
Devices cannot simultaneously operate in Class B and Class C mode
Lowest latency among all operating modes
Uses more power than Class A and Class B devices
Class C: Continuous Reception
End devices operating in Class C mode have receive windows that are almost always open. These windows
close only when the device is transmitting. Because of this, Class C end devices use more power to operate than
Class A or Class B devices. However, in turn, they offer the lowest latency for communication from the server
to an end device.
A device may be switched to Class C mode temporarily. This approach may be used to perform a firmware
upgrade of a battery-powered device. A battery-powered Class A device may switch to Class C for a few
minutes at a given time in order to receive a firmware update over-the-air (FUOTA) broadcast. Once the
broadcast of the update is complete, the device can return to its default Class A, low-power mode of operation.
Class C end devices implement the same two receive windows as Class A devices, but they do not close the
RX2 window until they send the next transmission back to the server. Therefore, they can receive a downlink in
the RX2 window at almost any time. A short window at the RX2 frequency and data rate is also opened
between the end of the transmission and the beginning of the RX1 receive window, as illustrated in Figure 1.
Figure 1: Receive Windows: Packet can be received in RX2 window
Multicast Downlinks
Class C end devices may receive multicast downlink frames in a manner similar to end devices in Class B
mode. The multicast address and the associated network session key and application session key must come
from the application layer.
The FPending bit is used to indicate that there is more multicast data to be sent. Given that a Class C device
keeps it receiver active most of the time, the FPending bit does not trigger any specific behavior on the end
device.
MAC Commands
All commands described in the Class A specification must be supported in Class C end devices.
For more information about other end device operating modes, see An In-Depth Look at Class A
Devices and An In-Depth Look at Class B Devices.
Understanding the Gateway Join Server
To support massive gateway deployment scenarios in an automated and secure way, LoRa®-based gateways
must follow a join process, similar to that used for end devices on a LoRaWAN® network. The gateway join
process decouples the two major phases in a gateway’s lifetime: manufacturing and deployment.
In this article, we start by looking at the journey of a gateway from manufacturing until deployment. Next, we
discuss who owns a gateway, followed by an overview of the gateway join server, before diving into the details
of the relevant APIs.
This article assumes that the reader is familiar with LoRaWAN networks, LoRa Basics™ Station, and “gateway
join process” described in the article 5 Things You Need to Know about LoRaWAN-based Gateways.
A LoRa-based Gateway’s Journey
Figure 1 illustrates the two phases of a gateway’s journey. Typically, the life of a LoRa-based gateway starts
with a design that is then realized in a manufacturing phase. This manufacturing phase may include some
form of personalization, whereby secrets are embedded into the gateway’s persistent storage.
Objectives
By the end of this tutorial we will know how to:
Build a LoRa-based node using the Dragino shield for LoRa devices and an Arduino Uno
Connect a moisture sensor and configure the node to send moisture readings on a set interval
Build a LoRa-based node to receive and log messages
Determine a sensible uplink frequency for our device
Build a LoRa-based end device connected to TTN via a LoRaWAN gateway
Hardware Recommendations
There are many manufacturers of certified hardware which can be used to create your solutions. The Semtech
catalog is a great reference for hardware, and contains listings from companies offering LoRa-based hardware
and software products, solutions and services.
For this tutorial we recommend the following reference hardware:
Stage 1: Hardware Recommendations for Building a Broadcasting LoRa-based Node (Required)
A. 1 x Arduino Uno (or other Arduino board compatible with the shield)
o US: Amazon.com, Arrow, Mouser
o UK: CPC, Amazon.co.uk, RS Components
B. 1 x Dragino’s Arduino Shield featuring LoRa technology, local variant
o US (915Mhz model): Amazon.com, Robotshop.com
o UK (868Mhz model): CPC, Amazon.co.uk
C. 1 x Grove Moisture Sensor by Seeed Studio (other sensors are available but may require soldering)
o US: Amazon.com, Arrow, Mouser
o UK: CPC, RS Components
D. 1 x Grove 4 pin JST to male jumper cable (to connect the moisture sensor to the Arduino board)
o US: Amazon.com, Mouser
o UK: CPC, Amazon.co.uk
E. 1 x USB-B Male to USB-A Male cable (to connect the Arduinos to the computer)
o US: Amazon.com
o UK: CPC
F. 1 x 9V battery
o US: Amazon.com
o UK: CPC
G. 1 x Battery clip to barrel jack connector (or other compatible portable power supply for the broadcasting
Arduino)
o US: Amazon.com, Arrow
o UK: Amazon.co.uk, Robotshop
Stage 2: Hardware Recommendations for Building a Receiver LoRa-based Node to Enable Node-to-Node
Communication
This stage is optional, although if you choose not to complete it, you should still complete stage 3.
A. 1 x Arduino Uno (or other Arduino board compatible with the shield)
o US: Amazon.com, Arrow, Mouser
o UK and EU: CPC, Amazon.co.uk, RS Components
B. 1 x Dragino’s Arduino Shield featuring LoRa technology, local variant
o US (915Mhz model): Amazon.com, Robotshop.com
o UK (868Mhz model): CPC, Amazon.co.uk
Stage 3: Hardware Requirements for Connecting the LoRa-based Device to a Network Server (Optional)
This stage is optional, although if you choose not to complete it you should still complete stage 2.
A. 1 x The Things Indoor LoRaWAN gateway
o US (915Mhz model): Adafruit
o UK and EU (868Mhz model): Connected Things Store
Alternatives
If you have a different Ardunio board, you may use that instead of the Arduino Uno. However, you must
ensure the shield is compatible with your board. The Dragino shield is listed as compatible with Ardunio
Leonardo, Uno, Mega, and DUE.
If you are unable to acquire the Dragino shield listed above, or would prefer to choose your own, you can do
so. The shield needs to be listed as compatible with your Arduino board. LoRa uses license-free bandwidth, and
the frequencies are different depending on the region. To use LoRa-based radios legally, the shield must operate
on, and only be used with, the frequencies designated for your region.
If you are within range of a LoRaWAN gateway already, you could use that instead of purchasing your own.
You can find worldwide coverage and links to operator maps on the LoRa Alliance® home page.
We recommend the Wi-Fi-connected indoor LoRaWAN gateway from The Things Industries for its low cost,
but there are other options:
A. More expensive gateways which can be used outdoors and/or have a greater operating range due to a
more sophisticated antenna, or that can be connected via Ethernet.
B. Available single-channel gateways which are not fully LoRaWAN-compliant, but could provide a
cheaper alternative to a multichannel gateway for initial development or hobbyist purposes.
C. Building your own LoRaWAN-compliant gateway using a Raspberry Pi and a Gateway HAT. TTN has
published a guide on how to do this; Helium has a similar guide.
It is essential to ensure the gateway operates on the same frequency as the shield you have selected, designated
for your region, and that will work with your chosen network server. TTN has a list of tested compatible
gateways; Helium has a similar list.
Software
In order to configure the Arduino nodes we will be using the Arduino IDE, which you can download for
Windows, Mac OS X or Linux from the official Arduino website.
Figure 8: (left to right) Grove Moisture Sensor, JST to male jumper cable, assembled Arduino and
shield
5. Connect the male end of the jumper cable to the Grove Moisture Sensor, pushing firmly to clip it into
place (Figure 9).
Figure 9: The Grove Moisture Sensor with male jumper connected
6. At the other end of the JST-to-male jumper cable are 4 colored wires. We need to plug these into the
terminals on the shield.
a. VCC (red wire) to the 5V terminal (Figure 10)
b. GND (black wire) to GND terminal ( Figure 11)
c. SIG (yellow wire) to an Analog terminal, A0 ( Figure 12)
d. The white wire is not used, we can connect it to the second GND terminal to keep it out of the
way (Figure 13)
This is a very simple starting sketch. We will build on this in the following steps.
The setup function will be executed first; this function sets up the console logging so that we can see the
readings logged in the Arduino IDE Serial Monitor.
We will see a message Done uploading at the end of the sketch file window, confirming the upload has
taken place.
Figure 18: Uploading the sketch
7. At the menu, select Tools > Serial Monitor. The Serial Monitor window will open.
8. Select the 9600 baud option from the drop-down menu at the bottom-right of the Serial Monitor (Figure
19).
Figure 19: Changing the baud rate in the Serial Monitor
9. If the code uploaded successfully, we will see the Hello message logged to the Serial Monitor every 30
seconds.
Figure 20: Arduino Serial Monitor showing message logging on 9600 baud.
10. Now we will extend this sketch to send the current moisture reading from the sensor connected to the
A0 analog terminal. Add the lines marked in bold to our sketch.
#include
#define SensorPin A0
int sensorValue = -1;
void setup() {
Serial.begin(9600);
while (!Serial);
Serial.println("LoRa Sender Test");
}
void loop() {
sensorValue = analogRead(SensorPin);
Serial.print("Reading is: ");
Serial.println(sensorValue);
delay(30000);
}
The declarations at the top of the sketch define which analog pin the sensor is connected to and set an initial
value of -1.
Within the loop we then use the analogRead function to get the current reading from the moisture sensor via the
sensor pin. The moisture sensor reading is then printed out to the Serial Monitor.
11. Verify and upload the new sketch to the Arduino. Open the Serial Monitor. You should see the real-time
sensor value logged every 30 seconds, which for now will read ‘0’.
Insert the sensor into the pot of moist soil. The sensor measures across the whole length of the probes,
so make sure you push the majority of the length of the probe into the soil to get a good reading (see
Figure 22).
Figure 22: Testing the assembled moisture sensor
13. Inspect the Serial Monitor to see the readings. The higher the number, the more moisture has been
detected in in the soil.
Figure 23: Arduino Serial Monitor showing the receipt of LoRa packets
5. To read out the payload sent in the packet, update the sketch to add the following bolded lines:
…
void loop() {
// see if a packet was received
int packetSize = LoRa.parsePacket();
if (packetSize) {
// received packet
Serial.println("");
Serial.println("Received packet: ");
// read the packet
String message = "";
while (LoRa.available()) {
message += (char)LoRa.read();
}
// print the Packet and RSSI
Serial.println(message);
Serial.print(“RSSI: “);
Serial.println(LoRa.packetRssi());
}
}
We use LoRa.available and LoRa.read to read each character of the packet, printing them to the Serial Monitor.
We use LoRa.packetRssi to print the Received Signal Strength Indicator (RSSI). RSSI is measured in dBm and
is the received signal power in milliwatts. The closer the measurement is to 0, the better, indicating a strong
signal.
6. Plug the Arduino into the computer using the USB-B cable.
7. Verify and upload the code to the Arduino.
8. Locate the broadcasting node we built in Stage 1.
9. Connect the 9-volt battery to the battery clip, and the barrel jack into the barrel jack of the broadcasting
node. For now, keep the broadcasting node close to the receiving node.
Figure 24: Left to right, battery clip, 9-volt battery, broadcasting node
Figure 25: Battery clip connected to 9-volt battery, barrel jack connected to Arduino
10. Check the Serial Monitor. If all is well, we will see received packets being logged out every 30 seconds.
This means the receiving node is receiving the packets from the broadcasting node (Figure 26).
Figure 26: Arduino Serial Monitor showing received packet values
11. Move the broadcasting node away from the receiving node. Return to the Serial Monitor and observe
the message and the change in RSSI.
12. See how far you can maintain a signal by moving the nodes farther apart. Using a more powerful radio,
a much wider range can be achieved, but even with the shield, we can observe the range is much greater
than other protocols, such as Wi-Fi.
13. Unplug the battery pack from the broadcasting node when you are finished to preserve battery life. In a
real-world device, you would make use of sleep functionality to minimize battery consumption during
broadcasts.
We have now successfully set up the broadcasting node and seen the LoRa packets being received by a second
receiving node.
In the next stage of this tutorial we will move on to reconfigure the broadcasting node to connect to a TTN
server to demonstrate a full end-to-end solution.
An application allows devices to communicate outside of the network server, for example, into AWS
IoT, Azure IoT or private servers.
Each device registered to TTN must be added to an application, so we will need to add at least one to
associate with your LoRa-based node.
The Device EUI, Application EUI and App Key displayed on the Device Overview page will be used to
configure our node and activate it via Over-The-Air Activation (OTAA). Once complete, when the node
sends an uplink message the network server will know that the device is registered with itself and this
application.
12. Save the following strings into another file, following the instructions below to display them in the
correct format:
a. Device EUI:
i. click the <> button (1st left) to toggle between hex and C-style
ii. click the second button from the left to toggle to lsb (least significant byte first, which
reverses the bytes)
iii. click the copy button on the far right
iv. paste into a file, labelling this ‘Device EUI’
b. Application EUI:
i. click the <> button (1st left) to toggle between hex and C-style
ii. click the second button from the left to toggle to lsb format
iii. click the copy button on the far right
iv. paste into a file, labelling this ‘Application EUI’
c. App Key:
i. click the <> button (1st left) to toggle between hex and C-style
ii. verify the format is msb (most significant byte first)
iii. click the copy button on the far right
iv. paste into a file, labelling this ‘App Key’
Figure 32: Device details page on TTN showing the Device EUI and Application EUI in
the format required
The device is now registered in TTN, and we have our keys to use for OTAA.
Setup the Arduino IDE for LoRaWAN
We need to install the open-source library MCCI LoRaWAN LMIC (LoRaWAN-MAC-in-C) that will allow us
to send and receive data using LoRa-based radios, edit a config file (unless you are based in the U.S.), and
select our board.
1. Open Arduino IDE.
2. At the Arduino IDE menu select Sketch > Include Library > Manage Libraries.
3. Search for MCCI LoRaWAN LMIC and install the MCCI LoRaWAN LMIC library by IBM, Matthijs
Kooijman and others. At the time of this writing, the latest version is 3.2.0.
Figure 33: Arduino IDE Library Manager showing the installed LMIC library
4. At the menu select Tools > Board > Arduino Uno (or whichever board you are using for this tutorial)
to ensure that the correct board is still selected.
5. The LMIC library contains a flag to toggle between region frequencies. We next need to make sure the
correct frequency is selected for your region. If you are in the U.S., you do not need to perform these
remaining steps, since the default region is the U.S. region.
a. At the Arduino IDE menu select Arduino > Preferences > Settings, or File > Preferences on
Windows and Linux. Locate the Sketchbook location field (see Figure 34), we will refer to this
as On MacOS or Windows the default location is in your
documents; /Users//Documents/Arduino, or D:\Users\\Documents\Arduino respectively. On
Linux the default location is /home/Sketchbook.
Learn more about pin mapping at the GitHub page for the LMIC library.
4. Add the bolded lines below to the sketch to set the variables for Over-the-Air device activation
(OTAA):
…
.dio = {2, 6, 7},
};
// Insert Device EUI here
static const u1_t PROGMEM DEVEUI[8] = ;
void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
// Insert Application EUI here
static const u1_t PROGMEM APPEUI[8] = ;
void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
// Insert App Key here
static const u1_t PROGMEM APPKEY[16] = ;
void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}
5. Edit the code to replace the fields in tags with the values saved earlier from the TTN console.
a. <DEVICE_EUI> : The saved ‘Device EUI’
b. <Application_EUI> : The saved ‘Application EUI’
c. <APP_KEY> : The saved ‘Application Key’
6. Check that our code is formatted as below, with the keys from TTN.
…
// Insert Device EUI here
static const u1_t PROGMEM DEVEUI[8] = { 0x6B, 0x1E, 0x77, 0xEB, 0xDF, 0x69,
0x20, 0x00 };
void os_getDevEui (u1_t* buf) { memcpy_P(buf, DEVEUI, 8);}
// Insert Application EUI here
static const u1_t PROGMEM APPEUI[8] = { 0x9E, 0x03, 0x03, 0xD0, 0x7E, 0xD5,
0xB3, 0x70 };
void os_getArtEui (u1_t* buf) { memcpy_P(buf, APPEUI, 8);}
// Insert App Key here
static const u1_t PROGMEM APPKEY[16] = { 0x69, 0x21, 0xFB, 0x85, 0xE4,
0x49, 0x05, 0x97, 0x4D, 0xCF, 0x8D, 0x33, 0x9C, 0xB1, 0x37, 0x9D };
void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}void
os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}
7. To set the frequency of broadcast, add the bolded lines below to the sketch. We have chosen to
broadcast once every 150 seconds for this device.
…
void os_getDevKey (u1_t* buf) { memcpy_P(buf, APPKEY, 16);}
// Schedule uplink to send every TX_INTERVAL seconds
const unsigned TX_INTERVAL = 150;
The duty cycle, the amount of time a device is allowed to broadcast in the LoRaWAN spectrum, is regulated by
government. A duty cycle limit of 1% means that for any given time period the device may only broadcast for
1% of that time, e.g. 864 seconds within a 24-hour period. In addition, TTN has a fair usage policy limiting the
uplink time per node to 30 seconds per day.
There are calculators, such as this third-party one on GitHub, that allow us to estimate our airtime for an uplink
message. Once we have completed this tutorial, we will also be able to see the estimated airtime in the TTN
console at TTN console applications page > select our application > ‘Devices’ > select our device > ‘Data’
tab > select an uplink > ‘Estimated Airtime’ section. The following calculation can then be used to calculate
the minimum time between uplinks:
8. Add the following bold lines to the sketch file to define the method we will use to send an uplink:
…
const unsigned TX_INTERVAL = 150;
void do_send(osjob_t* j){
// Check if there is not a current TX/RX job running
if (LMIC.opmode & OP_TXRXPEND) {
Serial.println(F("OP_TXRXPEND, not sending"));
} else {
// Prepare upstream data transmission at the next possible time.
sensorValue = analogRead(SensorPin);
Serial.println("Reading is: ");
Serial.println(sensorValue);
// int -> byte array
byte payload[2];
payload[0] = lowByte(sensorValue);
payload[1] = highByte(sensorValue);
// transmit packet at the next available slot. The parameters are
// - FPort, the port used to send the packet – port 1
// - the payload to send
// - the size of the payload
// - if we want an acknowledgement (ack), costing 1 downlink message, 0
means we do not want an ack
LMIC_setTxData2(1, payload, sizeof(payload), 0);
Serial.println(F("Payload queued"));
}
}
The do_send function contains the code from Stage 1 to read the sensor. We then convert the reading into the
byte array packet, using lowByte and highByte to convert the integer value into a small 2-byte array. This tiny
payload is then sent using LMIC_setTxData2.
9. Add the following bolded lines to the sketch file to handle events from the LMIC library:
…
Serial.println(F(“Payload queued”));
}
}
static osjob_t sendjob;
void onEvent (ev_t ev) {
switch(ev) {
case EV_JOINING:
Serial.println(“EV_JOINING”);
break;
case EV_JOINED:
Serial.println(“EV_JOINED”);
// We will disable link check mode, this is used to periodically verify
network connectivity, which we do not need in this tutorial
LMIC_setLinkCheckMode(0);
break;
case EV_JOIN_FAILED:
Serial.println(“EV_JOIN_FAILED”);
break;
case EV_REJOIN_FAILED:
Serial.println(“EV_REJOIN_FAILED”);
break;
case EV_TXCOMPLETE:
Serial.println(“EV_TXCOMPLETE”);
// Schedule next transmission
os_setTimedCallback(&sendjob, os_getTime() +
sec2osticks(TX_INTERVAL), do_send);
break;
default:
break;
}
}
The onEvent function is called from the LMIC library whenever events complete, such as transmission
complete (EX_TXCOMPLETE). We log join and transmission events to the Arduino Serial Monitor. When the
transmission is complete, we schedule the next uplink message via our do_send function using the
setTimedCallback method, the TX_INTERVAL constant.
10. Add the following bolded lines to the sketch file:
…
break;
}
}
void setup() {
Serial.begin(9600);
Serial.println(F(“Starting”));
// Initalizes the LIMIC library,
os_init();
// Resets the MAC state – this removes sessions, meaning the device must
repeat the join process each time it is started.
LMIC_reset();
// Let LMIC compensate for an inaccurate clock
LMIC_setClockError(MAX_CLOCK_ERROR * 1 / 100);
// Disable link check validation – this is used to periodically verify network
connectivity. Not needed in this tutorial.
LMIC_setLinkCheckMode(0);
// Set data rate to Spreading Factor 7 and transmit power to 14 dBi for
uplinks
LMIC_setDrTxpow(DR_SF7, 14);
// Start job
do_send(&sendjob);
}
void loop() {
os_runloop_once();
}
In the function, we initialize the LMIC library using . We also reset the MAC state to ensure the join process
occurs each time the device is started, turn off link-check validation and set the spreading factor and transmit
power. We then call which will attempt to send the first message and start OTAA automatically.
The function calls LMIC’s method. This hands the loop function over to LMIC and the code then responds to
the event callbacks returned from LMIC in the method.
11. If you are in the U.S. and using TTN, joining is faster if we select channels 8-15 (subband 1) to
broadcast the joining message on.
If you are not using the U.S. frequency setting in the LMIC library, adding this line will cause an error
and, for Helium, you do not need to perform this step. This step is only for U.S.-based TTN users. If you
are using a different network server provider, ask them which subband they recommend for join
messages.
If you only see the EV_JOINING message, double-check that the DEVEUI, APPEUI and APPKEY
settings are all correct, as added at the start of this stage.
The PSR performance was good; however, some nodes were separated by RF insulation. All nodes achieved
beyond 80 percent PSR, with a single gateway placed on a table in the corner of the store.
Note: All measurements were based on circulating spreading factors. If ADR were enabled, we would expect to
see further improvement in performance.
The PSR with different spreading factors is shown in Figure 13, along with a detailed analysis of the packet
received by the node at location 1. Generally, better performance is expected when using a higher spreading
factor, with the exception of SF10. (The long time-on-air for signals using SF10 increases the probability of
collisions with transmissions from other end nodes.)
Figure 13: Packet Success Rate For Location-1 Node Grouped By Spreading Factors, with RFID Off.
We then turned the RFID system on, using the 500kHz (default) channel plan, expecting a large degradation
due to the strong interference. To address this interference issue, we deployed multiple LoRa-based gateways to
provide redundancy and diversity.
A multi-gateway scenario was evaluated with 5 PicoCell gateway locations in the stock area, loading bay, cold
chain area, employee break room, and the clothing floor. The result is shown in Table 4.
Table 4: PSR with Single/Multiple Gateways in the Uplink, with Default 500kHz RFID
While relying on a single gateway did not provide good performance, (for example, using only GW-1 can lead
to 0% PSR for node location 1), the redundancy provided by deploying additional gateways, allowed the overall
PSR to be maintained beyond 80 percent.
We analyzed one typical end node result in detail: location-8 with 79 percent PSR measured with GW-1. The
result, grouped by spreading factors, is shown in Figure 14. With an increased noise floor, the transmission
became an SINR-sensitive system that provided a better success rate with higher spreading factors.
Figure 14: Packet success rate of location-8 node grouped by spreading factors in the uplink, with 500kHz
RFID.
Downlink Measurements
A similar performance was expected in the downlink when the RFID was off, namely, that a single gateway
could cover the whole store.
For this, we tested the downlink performance with the RFID system turned on. Performance with two channels
were measured: 927.5MHz and 924.5MHz, with the RFID system on and running with default 500kHz spacing.
The 924.5MHz downlink channel was impaired by two adjacent RFID channels at 924.25MHz and
924.75MHz. SF7 was used in the results shown in Table 5.
Table 5: PSR with a single gateway in the downlink, with the 500kHz RFID plan.
We investigated the performance of the different spreading factors for the location-7 node, with the 924.5MHz
channel, as illustrated in Figure 15.
Figure 15: Packet success rate of location-7 node grouped by spreading factors in the downlink, with 500kHz
RFID.
As we can see, increasing the spreading factor improved the robustness to noise/interference, which effectively
improved the success rate from 32 percent using SF7 to more than 75 percent when using SF 10/11. However,
it is significant to note that SF12 performance as degraded. This is primarily due to the long time-on-air, which
increased collisions among LoRaWAN signals and RFID transmissions.
Evaluation with Optimized Channel Plan
The purpose of this test was to measure the performance of a LoRaWAN network in a retail store with a dense
RFID Interrogator deployment.
A Semtech evaluation network server[9] was selected as the LoRaWAN network server (LNS) in this
measurement.
This LoRaWAN measurement was generated in the larger retail store, as described in Test Site
Description above. Four channels were used in this test: when testing with 500kHz RFID channel plan, we used
channels 1, 3, 4, and 6; when testing with 450kHz RFID channel plan, we used channel 1, 3, 5, 7.
As illustrated in Figure 16, four gateways were mounted in the store: the bottom right gateway (GW-1) was
mounted about seven feet high. The other three gateways were mounted higher than the RFID Interrogators, so
that the interference from the RFID Interrogators could be minimized. The back stock area was located in the
upper section, while the bottom section was the employee area.
On the map, we marked the node locations by the first four characters of their device EUIs.
Figure 16: Map and sensor/gateway location of Store-2
Some nodes need special attention:
1. CC5E simulated a mouse trap close to an exit in the hallway. It was far from any gateways.
2. D135 sat in a walk-in refrigerator with a thick door that was covered by a metal structure.
3. D924 was placed in a freezer at a low temperature.
In the following result sections, each PSR/FSR value was generated by collecting the data in a four-hour
window. More than 2,000 packets were measured.
Uplink Measurement
When measuring the uplink PSR, two RFID channel plans were implemented and compared, as described
in Channel Plan Optimization.
Table 6: PSR in uplink using LoRaWAN.
The 450kHz plan provided significantly better performance, improving the average PSR from 92 percent to
about 97 percent.
We also measured the confirmed uplink with limited retransmissions. The maximum number of retransmission
attempts is seven. Therefore, if either the uplink packet failed or the downlink acknowledgment failed for any
given frame, no more than eight transmission attempts could be made
Table 7: PSR in uplink using LoRaWAN and confirmed uplink/retransmission.
Most of the nodes were error-free; only the back stock mousetrap and the one in the freezer experienced some
frame loss with the 500k channel plan. We saw no frame loss with the optimized channel plan and confirmed
uplink.
Downlink Measurement
The downlink performance is shown in Table 8. The average PSR was 60 percent for the default channel plan.
This improved to 81 percent for the 450kHz optimized channel plan.
Table 8: PSR in downlink using LoRaWAN.
Result Summary
Using a practical gateway installation and four gateways in a retail store, we achieved greater than 95 percent
FSR with respect to uplinks, and more than 80 percent FSR with respect to downlinks, as shown in Table 9.
Table 9: Summary of average FSR among multiple end-nodes
For mission-critical applications, it became clear that the 450kHz channel plan can provide very high service
quality without significant frame losses.
LoRaWAN-based applications are generally focused on transmitting uplinks. Downlinks are predominantly
used for provisioning and network control, with feedback enabled. Typically, failed downlink transmissions can
be observed by the network (for example, a failed join accept message, or a failed ADR command) and
downlink retransmissions can be easily scheduled.
The LoRaWAN network can operate normally with the transmission quality presented in Table 9.
Interestingly, there was no performance degradation from the RFID system when the channel spacing was
moved from 500kHz to 450kHz when it coexisted with the LoRaWAN network.
Conclusion
In this paper, we have investigated the coexistence of co-located LoRaWAN network and UHF-RFID systems.
Based on the datasheet and lab measurements presented in the section on Blocking Performance of LoRaWAN-
based System we have proposed an optimized channel plan for both LoRaWAN and RFID systems, as
described in the section on Channel Plan Optimization. Furthermore, we were able to demonstrate that
LoRaWAN and high-power RFID systems can coexist with a good performance. The LoRaWAN success rate
exceeded 96 percent for uplinks and 80 percent for downlinks, without any observed impact on the RFID
system.
For applications in locations such as a large retail store, warehouse or airport, RFID and LoRaWAN are better
suited for different applications. For example, RFID is well-suited for choke-point data capture, for instance,
scanning a truck at a loading bay. For its part, LoRaWAN is great for ubiquitous coverage, both indoors and
outdoors, to track and find an item in a yard or in a warehouse. In addition, LoRaWAN can support other sensor
and monitoring applications. This investigation/demonstration illustrates that both system can work in the same
location and frequency band, to better serve user needs.
[1] AN1200.22 “LoRa Modulation Basics”, available at https://www.semtech.com/products/wireless-rf/lora-
transceivers/sx1272
[2] AN1200.26 “LoRa™ and FCC Part 15.247: Measurement Guidance”, available
at: https://www.semtech.com/products/wireless-rf/lora-transceivers/sx1272
[3] “EPC Radio-Frequency Identity Protocols Generation-2 UHF RFID”,
https://www.gs1.org/sites/default/files/.../epc/uhfc1g2_2_0_0_standard_20131101.pdf
[4] “LoRaWAN Specification v1.1”, available at: https://lora-alliance.org/resource-hub
[5] “LoRaWAN® Regional Parameters RP002-1.0.0”, available at: https://lora-alliance.org/resource-hub
[6] “Operation within the bands 902MHz – 928MHz, 2400MHz – 2483.5MHz, and 5725MHz – 5850MHz”,
https://www.gpo.gov/fdsys/pkg/CFR-2013-title47-vol1/pdf/CFR-2013-title47-vol1-sec15-247.pdf
[7]“SX1261/SX1262 Datasheet”, available at: https://www.semtech.com/products/wireless-rf/lora-
transceivers/sx1261
[8] https://www.semtech.com/products/wireless-rf/lora-transceivers/lr1110
[9] https://na.iot.semtech.cloud/