From 3b9dfe7b7f1e3ebcefa7f780055c606b5e5a8652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Bagur=20N=C3=A1jera?= Date: Thu, 2 Jun 2022 13:04:04 -0500 Subject: [PATCH 1/9] Update tutorial content --- .../assets/lorawan-101_img14.png | Bin 0 -> 75542 bytes .../05.lorawan-101/lorawan-101.md | 606 +++++++++--------- 2 files changed, 305 insertions(+), 301 deletions(-) create mode 100644 content/learn/05.communication/05.lorawan-101/assets/lorawan-101_img14.png diff --git a/content/learn/05.communication/05.lorawan-101/assets/lorawan-101_img14.png b/content/learn/05.communication/05.lorawan-101/assets/lorawan-101_img14.png new file mode 100644 index 0000000000000000000000000000000000000000..428592b0dbf95d0f594ba9e82d185eda8a8849d5 GIT binary patch literal 75542 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 z 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 DsQ>96 literal 0 HcmV?d00001 diff --git a/content/learn/05.communication/05.lorawan-101/lorawan-101.md b/content/learn/05.communication/05.lorawan-101/lorawan-101.md index 9bb500d799..6b21a61ad3 100644 --- a/content/learn/05.communication/05.lorawan-101/lorawan-101.md +++ b/content/learn/05.communication/05.lorawan-101/lorawan-101.md @@ -1,302 +1,306 @@ ---- -title: 'The Arduino Guide to LoRa® and LoRaWAN®' -description: 'Learn the basics of LoRa® and LoRaWAN® and how to use them with Arduino hardware and software.' -tags: - - LoRa - - LoRaWAN - - MKR WAN 1310 -author: 'José Bagur, Taddy Chung' ---- - -The Internet of Things (IoT) is often referred to as a collection of objects connected to the Internet using **wireless networks**; these connected objects aim to collect and exchange information from their surroundings. **IoT enables a connection between the physical and the digital worlds**; that connection produces a massive amount of data that can be used for the **optimization** of resources and to improve the **efficiency** of existing systems. - -***By 2025, there will be more than 25 billion IoT devices connected to the Internet.*** - -Many of the existing IoT devices will be connected to the Internet using short-range wireless networks such as Wi-Fi®, Bluetooth®, ZigBee, Z-Wave®, etc. Cellular connections using networks such as 2G, 3G, and 4G will also connect IoT devices to the Internet. Still, these **short and medium-range wireless networks are not always suitable for IoT devices** since they were developed for applications where power consumption and battery life are not significant issues. **IoT devices usually have low-power consumption and send and receive low amounts of data**. - -## Low-Power Wide Area Networks - -**Low-Power Wide Area Networks** (LPWAN) is a group of wireless networks technologies well suited to the specific needs of IoT devices: **low-bandwidth** and **low-power** devices, usually battery-powered. This type of networks provide **low-bit rates** over **long ranges** with a **low-power** consumption. LPWAN's can accommodate data packets sizes from 10 bytes to 1 kB at uplink speeds up to 200 kbps; long-range connectivity varies from 2 to 1,000 km depending on the network technology. Most LPWAN's technologies have a **star topology**; this means that each device connects directly to a central access point. - -Some of the important use cases for LPWAN's include the following applications: - -- **Smart cities**: smart parking, intelligent street lighting. -- **Supply chain management**: asset tracking, condition monitoring. -- **Smart grids**: electricity, water, and gas metering. -- **Smart agriculture**: land condition monitoring, animal tracking, geofencing. - -***If you want to read more about LPWAN's, check out [this article](/learn/wireless/lorawan-101) from the Learn section.*** - -Several LPWAN technologies use **licensed** or **unlicensed frequencies** and and **proprietary** or **open** specifications. **LoRa®** and its Media Access Control (MAC) layer protocol implementation, **LoRaWAN®**, is currently one of the existing LPWAN gaining the most traction to support IoT devices and services. - -![Bandwidth vs. range of short distance, cellullar and LPWA networks. Image credits: The Things Network.](assets/lorawan-101_img01.png) - -## LoRa® and LoRaWAN® - -### What are LoRa® and LoRaWAN®? - -**LoRa®** is a **wireless modulation technique** derived from **Chirp Spread Spectrum** (CSS) technology. CSS uses wideband linear frequency modulated chirp pulses to encode information. LoRa® can operate on the following license-free sub-gigahertz ISM (Industrial, Scientific, and Medical) bands: **433 MHz**, **868 MHz**, and **915 MHz**. ISM bands are internationally reserved for industrial, scientific and, medical uses. - -***LoRa® modulation technique was invented in 2010 by the French startup Cycleo; then, it was acquired in 2012 by Semtech.*** - -Based on LoRa®, the **LoRaWAN®** (LoRa for Wide Area Networks) specification extended the LoRa® physical communication layer into the Internet by adding a **MAC layer**. The LoRaWAN® specification is a software layer that defines how devices must use the LoRa, for example, when they transmit or receive messages. The LoRaWAN specification is open-source; it has been supported and maintained by the LoRa Alliance® since 2015. - -***The LoRa Alliance® is an open, nonprofit organization that collaborates and shares experiences to promote and drive the success of the LoRaWAN® standard as the leading open global standard for secure IoT LPWAN connectivity.*** - -### LoRaWAN® Network Architecture - -A typical LoRaWAN® network architecture includes the following essential parts: **end-devices** (usually sensors), a base station or **gateway**, also known as Long Range Relay (LRR), a **network server** also known as Long Range Controller (LRC), and the **Operation Support System** (OSS) for provisioning and management of the network. - -![Typical LoRaWAN® network architecture example. Image credits: The Things Network.](assets/lorawan-101_img02.png) - -From the image above, notice there is a fundamental difference between a network server and a gateway. The **network server** controls the virtualized MAC layer of the LoRaWAN® network while **gateways** are devices pre-integrated with the network server to ease the LPWAN rollout and provisioning. LoRaWAN® network servers and gateways access can be public or private. - -***[The Things Network (TTN)](https://www.thethingsnetwork.org/) is a crowdsourced, open, and decentralized LoRaWAN® network server. This network is a great way to start testing devices, applications, integrations and get familiar with LoRaWAN®. To connect to TTN, you will need to be in the range of a gateway. Check the [world map](https://www.thethingsnetwork.org/map) to see if your local community already has a gateway installed; if not, consider installing one!*** - -LoRaWAN® networks are usually deployed in a **star-of-stars topology**; this means that **gateways manage data between end-devices and a network server**. Gateways are connected to the central network server via the Internet, while end-devices use LoRa® to send and receive data to and from the gateways; end-devices are not exclusively tied to a single gateway, end-devices broadcast information to all the gateways in range. Communication in LoRaWAN® networks is natively **bi-directional**, although uplink communication between end-devices and the central network server is expected to be predominant in the network. - -***Star networks topologies provide the best relationship between long-range communications, the number of gateways or base stations in the network, end-devices power consumption, and battery life.*** - -Star networks present several advantages compared to other network topologies: - -- Gateways can be added to the network anywhere and anytime without prior planning. -- Message delivery is more robust since multiple gateways receive the same data packets during each uplink. - -### Data Rates - -Communication between end-devices and gateways in LoRaWAN® networks is spread out on different **frequency channels** and **data rates** (communications using different data rates do not interfere with each other). - -***LoRa® supports data rates ranging from 300 bps to 5 kbps for a 125 kHz bandwidth.*** - -To maximize the battery life of each end-device and the overall capacity available through the network, LoRaWAN® uses an **Adaptive Data Rate** (ADR) mechanism for **optimizing data rates, airtime, and power consumption**. ADR controls the following transmission parameters on end-devices: - -- **Spreading factor**: the **speed of data transmission**. Lower spreading factors mean a higher data transmission rate. -- **Bandwidth**: the **amount of data that can be transmitted** from one point to another within the network. -- **Transmission power**: the energy that the end-device transmitter produces at its output. - -The table below shows compares spreading factor, data rate, and time on-air at a bandwidth of 125 kHz (range is an indicative value, it will depend on the propagation conditions): - -| **Spreading Factor** | **Data Rate** | **Range** | **Time on-Air** | -|:----------------:|:---------:|:-----:|:-----------:| -| SF7 | 5470 bps | 2 km | 56 ms | -| SF8 | 3125 bps | 4 km | 100 ms | -| SF9 | 1760 bps | 6 km | 200 ms | -| SF10 | 980 bps | 8 km | 370 ms | -| SF11 | 440 bps | 11 km | 40 ms | -| SF12 | 290 bps | 14 km | 1400 ms | - -End-devices may transmit on any channel available at any time, using any available data rate, as long as the following rule is respected: - -- The end-device changes channel in a pseudo-random fashion for every transmission. The resulting frequency diversity makes the system more robust against interference. - -Also, local regulations must be respected, for example: - -- In the EU868 band, the end-device must respect the maximum transmit duty cycle relative to the sub-band used and local regulations (1% for end-devices). -- In the US915 band, the end-device must respect the maximum transmit duration (or dwell time) relative to the sub-band used and local regulations (400ms). - -![LoRaWAN® network layers. Image credits: Semtech.](assets/lorawan-101_img03.png) - -### Regional Parameters - -The **LoRaWAN® Regional Parameters specification** is a companion to the LoRaWAN® network layer specification. While the LoRaWAN® network layer specification defines the air interface between a compliant end-device (sensor, actuator, tracker, etc.) and a compliant network core, the LoRaWAN® Regional Parameters specification defines the **adaptation of the LoRaWAN® network layer specification to comply with the various regulations enforced throughout the world on the use of various frequency bands of the unlicensed spectrum which are available**. - -Also, the LoRaWAN® Regional Parameters specification documents the **physical layer configurations required for the compliant operation of LoRaWAN® Link Layer radios** using various radio frequency modulation techniques. - -***The idea behind the LoRaWAN® Regional Parameters specification is to create the smallest number of regional channel plans covering the largest possible number of regulatory regions. With this, complexity is decreased to implementers as well as the certification cost (end-device certification is enumerated by network layer, Regional Parameters and channel plan revision).*** - -LoRaWAN® Regional Parameters specifications do not specify everything. They only cover a region by specifying the common denominator. For example, the LoRaWAN® Regional Parameters for Asia only specify a common subset of channels, but there are variations between regulations in Asian countries. Furthermore, each network server, for example TTN, is free to select additional parameters, such as additional emission channels. - -For more information, you can read the RP002-1.0.2 LoRaWAN® Regional Parameters document [here](https://lora-alliance.org/wp-content/uploads/2020/11/RP_2-1.0.2.pdf), we also have a more detailed tutorial about LoRaWAN® Regional Parameters and Arduino hardware; the tutorial can be found here [here](https://docs.arduino.cc/tutorials/mkr-wan-1310/lorawan-regional-parameters) - -### Classes - -The LoRaWAN® specification has **three** different communication profiles between devices and applications: **Class A**, **Class B**, and **Class C**. Each class serves different application needs and has optimized requirements for specific purposes. The main difference between the three classes is latency and power consumption; end-devices can always send uplinks when needed, but its class will determine when to receive downlinks. - -***All LoRaWAN devices must implement Class A; Class B, and Class C are extensions of Class A profile.*** - - #### Class A: "Aloha" - -Class A devices implement a **bi-directional communication profile** where two short downlinks follow the end-device uplink transmission receive windows, usually referred to as RX1 and RX2. If the server does not respond in either RX1 or RX2 windows, the next opportunity will be after the next uplink transmission. Class A devices are often battery-powered and spend most of the time in sleep mode; therefore, they have the lowest energy consumption, keep long intervals between uplinks, and have high downlink latency. - -![Class A default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img04.png) - -#### Class B: The "Beaconing" Class - -Class B devices extend Class A devices by adding scheduled receive windows for downlinks, and, therefore, they **emulate a continuously receiving device by opening receive windows at fixed time intervals**. This class should be implemented when low latency of downlink communication while keeping the power consumption as low as possible is required. - -![Class B default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img05.png) - -#### Class C: Continuous Reception - -Class C communication profile is used in applications with enough power available, so there is no need to minimize the time of the reception windows; this is the case of most actuators (e.g., smart plugs, street lights, electrical meters, etc.) Class C devices always listen for downlinks messages unless they transmit an uplink message. This behavior results in the **lowest latency between the server and the end-device**. - -![Class C default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img06.png) - -### Authentication and Security - -Authentication and security are also important in LoRaWAN® networks. Any LoRaWAN® network has a baseline authentication and security framework based on the AES 128 encryption scheme. Compared to other LPWAN's, which rely on a single key for authentication and encryption, the LoRaWAN® framework separates both. Authentication and integrity control use a **network session key** (NwkSKey) while user data encription uses an **application session key** (AppSKey). - -***NwkSKey and AppSKey are AES-128 root keys specific to the end-device, end-devices manufacturers, or application owners assigned them.*** - -LoRaWAN® supports two authentication and activation methods: **Over-The-Air-Activation** (OTAA) and **Activation by Personalization** (ABP). - -- **Over-The-Air Activation (OTAA)**: In this method, end-devices are not initialized for any particular network; they send a JOIN request to a specific LoRaWAN® network and then receive a device address and an authorization token from which session keys are derived; NwkSKey and AppSKey are derived during this procedure from a root AppKey pre-provisioned in the end-devices by its manufacturer. - -![Over-The-Air activation process. Image credits: Heath Raftery.](assets/lorawan-101_img08.png) - -- **Activation by Personalization (ABP)**: In this method, end-devices are personalized to work with a given LoRaWAN® network. End-devices are pre-provisioned with the NwkSKey and AppSKey and the 32-bits device network address. - -![Activation by Personalization process. Image credits: Heath Raftery.](assets/lorawan-101_img09.png) - -***The recommended authentication and activation method is OTAA since it provides a high level of security; ABP method should be used only for specific situations.*** - -## Arduino® and LoRa® - -Arduino® brings LoRa® connectivity to your projects with several boards, addons and libraries. - -### Arduino® Boards with LoRa® Connectivity - -The MKR WAN [1300](https://store.arduino.cc/products/arduino-mkr-wan-1300-lora-connectivity) and [1310](https://store.arduino.cc/products/arduino-mkr-wan-1310) boards provide you with a practical and cost-effective solution to applications that require LoRa® connectivity and low-power consumption. The MKR WAN 1300 and 1310 boards are based on a [SAMD21 microcontroller](https://content.arduino.cc/assets/mkr-microchip_samd21_family_full_datasheet-ds40001882d.pdf) from Microchip®; they also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf) module from Murata® for LoRa® connectivity, the [ATECC508](https://docs.arduino.cc/resources/datasheets/ATECC508A-datasheet.pdf) cryptoauthentication device for security, and a 2MB SPI Flash memory for onboard storage. - -![The Arduino® MKR WAN 1310 board.](assets/lorawan-101_img10.png) - -PRO hardware also has LoRa® connectivity. The Arduino® [Portenta H7](https://store.arduino.cc/collections/boards/products/portenta-h7) board can have LoRa® connectivity with the [Portenta Vision Shield LoRa®](https://store.arduino.cc/products/arduino-portenta-vision-shield-lora%C2%AE); this addon board also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRa® connectivity, the same module present in the MKR 1300 and 1310 boards. - -![The Arduino® Portenta Vision Shield LoRa®.](assets/lorawan-101_img11.png) - -The Arduino® [Edge Control](https://store.arduino.cc/products/arduino-edge-control), a remote monitoring and control solution optimized for outdoor environments, can expand its wireless connectivity capabilities by adding an MKR WAN 1300 or 1310 board. Edge Control can be positioned anywhere and is well suited for smart agriculture and other applications that require intelligent control in remote locations. - -![The Arduino® Edge Control.](assets/lorawan-101_img12.png) - -### Arduino® Libraries for LoRa® Connectivity - -You can use several Arduino libraries with the CMCMWX1ZZABZ LoRa® module from Murata®; we recommend two: The [MKRWAN library](https://github.com/arduino-libraries/MKRWAN), developed by Arduino, and the [Arduino LoRa](https://github.com/sandeepmistry/arduino-LoRa) library, developed by Sandeep Mistry. The MKRWAN and the Arduino LoRa libraries provide you the APIs to communicate with LoRa® and LoRaWAN networks®. - -You can use both libraries in the Arduino IDE, [online](https://store.arduino.cc/digital/create) and [offline](https://www.arduino.cc/en/software). If you are using the online IDE, you don't need to do anything, both libraries are already installed and ready to be used. If you are using the offline IDE, you must install the libraries manually. Installing libraries can be done easily by navigating to **Tools > Manage Libraries...** and then look for **MKRWAN** library by Arduino and **LoRa** by Sandeep Mistry; **remember to install the latest version of the libraries**. - -***Currently, there are two versions of the MKRWAN library; MKRWAN_v2 library is still in beta.*** - -### Example: Sending and Receiving Data to a Network Server - -Using Arduino® hardware and software to communicate with LoRa® and LoRaWAN® networks is simple; let's check outan example. This example uses an MKR WAN 1310 board and the MKRWAN library to send data to a LoRaWAN® network, in this case, TTN. The circuit for this example is shown in the image below: - -![Circuit used in the example.](assets/lorawan-101_img13.png) - -Before sending and receiving messages from TTN, you need to register your board first to the network. For this, you need to know your board's `Device EUI`. You can get your board's `Device EUI` by running the `FirstConfiguration` example from the MKRWAN library. With your Device EUI, you can register your board in TTN by creating an account in TTN, adding an application, and registering your board. This [tutorial](https://www.thethingsnetwork.org/docs/devices/node/quick-start/) from TTN explains the process. - -Once your device is registered on TTN, you can start sending and receiving data with the following code: - -```arduino -/* - Send and receive data from a LoRaWAN network - This sketch demonstrates how to send and receive data with the MKR WAN 1300/1310 board. - This example code is in the public domain. -*/ - -#include -#include "arduino_secrets.h" - -LoRaModem modem; - -void setup() { - // Serial port initialization - Serial.begin(115200); - while (!Serial); - - // LoRa module initialization - // Initialize the modem with your regional band (eg. US915, AS923,...) - if (!modem.begin(EU868)) { - Serial.println("- Failed to start module"); - while (1) {} - }; - - // With the module initialized, we can get its version and device EUI - // Your network server provider requires device EUI information to connect to their network - Serial.print("- Your module version is: "); - Serial.println(modem.version()); - Serial.print("- Your device EUI is: "); - Serial.println(modem.deviceEUI()); - - // Join procedure to the network server - // OTAA method need appEUI and appKey, this information is provided by the network server - int connected = modem.joinOTAA(appEui, appKey); - if (!connected) { - Serial.println("- Something went wrong; are you indoor? Move near a window and retry..."); - while (1) {} - } - - // Set poll interval to 60 secs. - modem.minPollInterval(60); - - // NOTE: independent of this setting, the modem will not allow sending more than one message every 2 minutes - // This is enforced by firmware and can not be changed. -} - -void loop() { - Serial.println(); - Serial.println("- Enter a message to send to network"); - Serial.println("(make sure that end-of-line 'NL' is enabled)"); - - // Get message from Serial Monitor - while (!Serial.available()); - String msg = Serial.readStringUntil('\n'); - - // Show the sent message to the network in HEX format - Serial.println(); - Serial.print("- Sending: " + msg + " - "); - for (unsigned int i = 0; i < msg.length(); i++) { - Serial.print(msg[i] >> 4, HEX); - Serial.print(msg[i] & 0xF, HEX); - Serial.print(" "); - } - Serial.println(); - - // Check if the message was sent correctly or if there was an error - int err; - modem.beginPacket(); - modem.print(msg); - err = modem.endPacket(true); - if (err > 0) { - Serial.println("- Message sent correctly!"); - } else { - Serial.println("- Error sending message :("); - Serial.println("(- You may send a limited amount of messages per minute, depending on the signal strength"); - Serial.println("- It may vary from one message every couple of seconds to one message every minute)"); - } - - // Wait and check if there's a message sent from the network - delay(1000); - if (!modem.available()) { - Serial.println("- No downlink message received at this time"); - return; - } - - // If there's a message available, store it - char rcv[64]; - int i = 0; - while (modem.available()) { - rcv[i++] = (char)modem.read(); - } - - // Decode and show the received message from the network - Serial.print("- Received: "); - for (unsigned int j = 0; j < i; j++) { - Serial.print(rcv[j] >> 4, HEX); - Serial.print(rcv[j] & 0xF, HEX); - Serial.print(" "); - } - Serial.println(); -} -``` - -Check out more detailed tutorials we have about sending data between a MKR WAN board to TTN and between two MKR WAN boards; the tutorials can be found [here](https://docs.arduino.cc/hardware/mkr-wan-1310). - - -## Further Reading and Resources - -LoRa® and LoRaWAN® are pretty extensive but exciting topics to study. If you want to learn more about these technologies, check out the following links: - -- [The LoRa Alliance® Resource Hub](https://lora-alliance.org/resource-hub/). Here you can access LoRaWAN® technical documents and Whitepapers from The LoRa Alliance®. -- [LoRa Developer Portal from Semtech](https://lora-alliance.org/resource-hub/). Here you can find technical papers and user guides as well as specifications and datasheets from Semtech. -- [The Things Network documentation](https://www.thethingsnetwork.org/docs/). Here you can learn all about LoRaWAN® and The Things Network! +--- +title: 'The Arduino Guide to LoRa® and LoRaWAN®' +description: 'Learn the basics of LoRa® and LoRaWAN® and how to use them with Arduino hardware and software.' +tags: + - LoRa + - LoRaWAN + - MKR WAN 1310 +author: 'José Bagur, Taddy Chung' +--- + +The Internet of Things (IoT) is often referred to as a collection of objects connected to the Internet using **wireless networks**; these connected objects aim to collect and exchange information from their surroundings. **IoT enables a connection between the physical and the digital worlds**; that connection produces a massive amount of data that can be used for the **optimization** of resources and to improve the **efficiency** of existing systems. + +***By 2025, there will be more than 25 billion IoT devices connected to the Internet.*** + +Many of the existing IoT devices will be connected to the Internet using short-range wireless networks such as Wi-Fi®, Bluetooth®, ZigBee, Z-Wave®, etc. Cellular connections using networks such as 2G, 3G, and 4G will also connect IoT devices to the Internet. Still, these **short and medium-range wireless networks are not always suitable for IoT devices** since they were developed for applications where power consumption and battery life are not significant issues. **IoT devices usually have low-power consumption and send and receive low amounts of data**. + +## Low-Power Wide Area Networks + +**Low-Power Wide Area Networks** (LPWAN) is a group of wireless networks technologies well suited to the specific needs of IoT devices: **low-bandwidth** and **low-power** devices, usually battery-powered. This type of networks provide **low-bit rates** over **long ranges** with a **low-power** consumption. LPWAN's can accommodate data packets sizes from 10 bytes to 1 kB at uplink speeds up to 200 kbps; long-range connectivity varies from 2 to 1,000 km depending on the network technology. Most LPWAN's technologies have a **star topology**; this means that each device connects directly to a central access point. + +Some of the important use cases for LPWAN's include the following applications: + +- **Smart cities**: smart parking, intelligent street lighting +- **Supply chain management**: asset tracking, condition monitoring +- **Smart grids**: electricity, water, and gas metering +- **Smart agriculture**: land condition monitoring, animal tracking, geofencing + +***If you want to read more about LPWAN's, check out [this article](/learn/wireless/lorawan-101) from the Learn section.*** + +Several LPWAN technologies use **licensed** or **unlicensed frequencies** and and **proprietary** or **open** specifications. **LoRa®** and its Media Access Control (MAC) layer protocol implementation, **LoRaWAN®**, is currently one of the existing LPWAN gaining the most traction to support IoT devices and services. + +![Bandwidth vs. range of short distance, cellullar and LPWA networks. Image credits: The Things Network.](assets/lorawan-101_img01.png) + +## LoRa® and LoRaWAN® + +### What are LoRa® and LoRaWAN®? + +**LoRa®** is a **wireless modulation technique** derived from **Chirp Spread Spectrum** (CSS) technology. CSS uses wideband linear frequency modulated chirp pulses to encode information. LoRa® can operate on the following license-free sub-gigahertz ISM (Industrial, Scientific, and Medical) bands: **433 MHz**, **868 MHz**, and **915 MHz**. ISM bands are internationally reserved for industrial, scientific and, medical uses. + +***LoRa® modulation technique was invented in 2010 by the French startup Cycleo; then, it was acquired in 2012 by Semtech.*** + +Based on LoRa®, the **LoRaWAN®** (LoRa for Wide Area Networks) specification extended the LoRa® physical communication layer into the Internet by adding a **MAC layer**. The LoRaWAN® specification is a software layer that defines how devices must use the LoRa, for example, when they transmit or receive messages. The LoRaWAN specification is open-source; it has been supported and maintained by the LoRa Alliance® since 2015. + +***The LoRa Alliance® is an open, nonprofit organization that collaborates and shares experiences to promote and drive the success of the LoRaWAN® standard as the leading open global standard for secure IoT LPWAN connectivity.*** + +### LoRaWAN® Network Architecture + +A typical LoRaWAN® network architecture includes the following essential parts: **end-devices** (usually sensors), a base station or **gateway**, also known as Long Range Relay (LRR), a **network server** also known as Long Range Controller (LRC), and the **Operation Support System** (OSS) for provisioning and management of the network. + +![Typical LoRaWAN® network architecture example. Image credits: The Things Network.](assets/lorawan-101_img02.png) + +From the image above, notice there is a fundamental difference between a network server and a gateway. The **network server** controls the virtualized MAC layer of the LoRaWAN® network while **gateways** are devices pre-integrated with the network server to ease the LPWAN rollout and provisioning. LoRaWAN® network servers and gateways access can be public or private. + +***[The Things Network (TTN)](https://www.thethingsnetwork.org/) is a crowdsourced, open, and decentralized LoRaWAN® network server. This network is a great way to start testing devices, applications, integrations and get familiar with LoRaWAN®. To connect to TTN, you will need to be in the range of a gateway. Check the [world map](https://www.thethingsnetwork.org/map) to see if your local community already has a gateway installed; if not, consider installing one!*** + +LoRaWAN® networks are usually deployed in a **star-of-stars topology**; this means that **gateways manage data between end-devices and a network server**. Gateways are connected to the central network server via the Internet, while end-devices use LoRa® to send and receive data to and from the gateways; end-devices are not exclusively tied to a single gateway, end-devices broadcast information to all the gateways in range. Communication in LoRaWAN® networks is natively **bi-directional**, although uplink communication between end-devices and the central network server is expected to be predominant in the network. + +***Star networks topologies provide the best relationship between long-range communications, the number of gateways or base stations in the network, end-devices power consumption, and battery life.*** + +Star networks present several advantages compared to other network topologies: + +- Gateways can be added to the network anywhere and anytime without prior planning +- Message delivery is more robust since multiple gateways receive the same data packets during each uplink + +### Data Rates + +Communication between end-devices and gateways in LoRaWAN® networks is spread out on different **frequency channels** and **data rates** (communications using different data rates do not interfere with each other). + +***LoRa® supports data rates ranging from 300 bps to 5 kbps for a 125 kHz bandwidth.*** + +To maximize the battery life of each end-device and the overall capacity available through the network, LoRaWAN® uses an **Adaptive Data Rate** (ADR) mechanism for **optimizing data rates, airtime, and power consumption**. ADR controls the following transmission parameters on end-devices: + +- **Spreading factor**: the **speed of data transmission**. Lower spreading factors mean a higher data transmission rate +- **Bandwidth**: the **amount of data that can be transmitted** from one point to another within the network +- **Transmission power**: the energy that the end-device transmitter produces at its output + +The table below shows compares spreading factor, data rate, and time on-air at a bandwidth of 125 kHz (range is an indicative value, it will depend on the propagation conditions): + +| **Spreading Factor** | **Data Rate** | **Range** | **Time on-Air** | +|:----------------:|:---------:|:-----:|:-----------:| +| SF7 | 5470 bps | 2 km | 56 ms | +| SF8 | 3125 bps | 4 km | 100 ms | +| SF9 | 1760 bps | 6 km | 200 ms | +| SF10 | 980 bps | 8 km | 370 ms | +| SF11 | 440 bps | 11 km | 40 ms | +| SF12 | 290 bps | 14 km | 1400 ms | + +End-devices may transmit on any channel available at any time, using any available data rate, as long as the following rule is respected: + +- The end-device changes channel in a pseudo-random fashion for every transmission. The resulting frequency diversity makes the system more robust against interference + +Also, local regulations must be respected, for example: + +- In the EU868 band, the end-device must respect the maximum transmit duty cycle relative to the sub-band used and local regulations (1% for end-devices) +- In the US915 band, the end-device must respect the maximum transmit duration (or dwell time) relative to the sub-band used and local regulations (400ms) + +![LoRaWAN® network layers. Image credits: Semtech.](assets/lorawan-101_img03.png) + +### Regional Parameters + +The **LoRaWAN® Regional Parameters specification** is a companion to the LoRaWAN® network layer specification. While the LoRaWAN® network layer specification defines the air interface between a compliant end-device (sensor, actuator, tracker, etc.) and a compliant network core, the LoRaWAN® Regional Parameters specification defines the **adaptation of the LoRaWAN® network layer specification to comply with the various regulations enforced throughout the world on the use of various frequency bands of the unlicensed spectrum which are available**. + +Also, the LoRaWAN® Regional Parameters specification documents the **physical layer configurations required for the compliant operation of LoRaWAN® Link Layer radios** using various radio frequency modulation techniques. + +***The idea behind the LoRaWAN® Regional Parameters specification is to create the smallest number of regional channel plans covering the largest possible number of regulatory regions. With this, complexity is decreased to implementers as well as the certification cost (end-device certification is enumerated by network layer, Regional Parameters and channel plan revision).*** + +LoRaWAN® Regional Parameters specifications do not specify everything. They only cover a region by specifying the common denominator. For example, the LoRaWAN® Regional Parameters for Asia only specify a common subset of channels, but there are variations between regulations in Asian countries. Furthermore, each network server, for example TTN, is free to select additional parameters, such as additional emission channels. + +For more information, you can read the RP002-1.0.2 LoRaWAN® Regional Parameters document [here](https://lora-alliance.org/wp-content/uploads/2020/11/RP_2-1.0.2.pdf), we also have a more detailed tutorial about LoRaWAN® Regional Parameters and Arduino hardware; the tutorial can be found here [here](https://docs.arduino.cc/tutorials/mkr-wan-1310/lorawan-regional-parameters) + +### Classes + +The LoRaWAN® specification has **three** different communication profiles between devices and applications: **Class A**, **Class B**, and **Class C**. Each class serves different application needs and has optimized requirements for specific purposes. The main difference between the three classes is latency and power consumption; end-devices can always send uplinks when needed, but its class will determine when to receive downlinks. + +***All LoRaWAN devices must implement Class A; Class B, and Class C are extensions of Class A profile.*** + + #### Class A: "Aloha" + +Class A devices implement a **bi-directional communication profile** where two short downlinks follow the end-device uplink transmission receive windows, usually referred to as RX1 and RX2. If the server does not respond in either RX1 or RX2 windows, the next opportunity will be after the next uplink transmission. Class A devices are often battery-powered and spend most of the time in sleep mode; therefore, they have the lowest energy consumption, keep long intervals between uplinks, and have high downlink latency. + +![Class A default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img04.png) + +#### Class B: The "Beaconing" Class + +Class B devices extend Class A devices by adding scheduled receive windows for downlinks, and, therefore, they **emulate a continuously receiving device by opening receive windows at fixed time intervals**. This class should be implemented when low latency of downlink communication while keeping the power consumption as low as possible is required. + +![Class B default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img05.png) + +#### Class C: Continuous Reception + +Class C communication profile is used in applications with enough power available, so there is no need to minimize the time of the reception windows; this is the case of most actuators (e.g., smart plugs, street lights, electrical meters, etc.) Class C devices always listen for downlinks messages unless they transmit an uplink message. This behavior results in the **lowest latency between the server and the end-device**. + +![Class C default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img06.png) + +### Authentication and Security + +Authentication and security are also important in LoRaWAN® networks. Any LoRaWAN® network has a baseline authentication and security framework based on the AES 128 encryption scheme. Compared to other LPWAN's, which rely on a single key for authentication and encryption, the LoRaWAN® framework separates both. Authentication and integrity control use a **network session key** (NwkSKey) while user data encription uses an **application session key** (AppSKey). + +***NwkSKey and AppSKey are AES-128 root keys specific to the end-device, end-devices manufacturers, or application owners assigned them.*** + +LoRaWAN® supports two authentication and activation methods: **Over-The-Air-Activation** (OTAA) and **Activation by Personalization** (ABP). + +- **Over-The-Air Activation (OTAA)**: In this method, end-devices are not initialized for any particular network; they send a JOIN request to a specific LoRaWAN® network and then receive a device address and an authorization token from which session keys are derived; NwkSKey and AppSKey are derived during this procedure from a root AppKey pre-provisioned in the end-devices by its manufacturer. + +![Over-The-Air activation process. Image credits: Heath Raftery.](assets/lorawan-101_img08.png) + +- **Activation by Personalization (ABP)**: In this method, end-devices are personalized to work with a given LoRaWAN® network. End-devices are pre-provisioned with the NwkSKey and AppSKey and the 32-bits device network address. + +![Activation by Personalization process. Image credits: Heath Raftery.](assets/lorawan-101_img09.png) + +***The recommended authentication and activation method is OTAA since it provides a high level of security; ABP method should be used only for specific situations.*** + +## Arduino® and LoRa® + +Arduino® brings LoRa® connectivity to your projects with several boards, addons and libraries. + +### Arduino® Boards with LoRa® Connectivity + +The MKR WAN [1300](https://store.arduino.cc/products/arduino-mkr-wan-1300-lora-connectivity) and [1310](https://store.arduino.cc/products/arduino-mkr-wan-1310) boards provide you with a practical and cost-effective solution to applications that require LoRa® connectivity and low-power consumption. The MKR WAN 1300 and 1310 boards are based on a [SAMD21 microcontroller](https://content.arduino.cc/assets/mkr-microchip_samd21_family_full_datasheet-ds40001882d.pdf) from Microchip®; they also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf) module from Murata® for LoRaWAN® connectivity, the [ATECC508](https://docs.arduino.cc/resources/datasheets/ATECC508A-datasheet.pdf) cryptoauthentication device for security, and a 2MB SPI Flash memory for onboard storage. + +![The Arduino® MKR WAN 1310 board.](assets/lorawan-101_img10.png) + +PRO hardware also has LoRaWAN® connectivity. The Arduino® [Portenta H7](https://store.arduino.cc/collections/boards/products/portenta-h7) board can have LoRaWAN® connectivity with the [Portenta Vision Shield LoRa®](https://store.arduino.cc/products/arduino-portenta-vision-shield-lora%C2%AE); this addon board also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN ® connectivity, the same module present in the MKR 1300 and 1310 boards. + +![The Arduino® Portenta Vision Shield LoRa®.](assets/lorawan-101_img11.png) + +The Arduino® [Edge Control](https://store.arduino.cc/products/arduino-edge-control), a remote monitoring and control solution optimized for outdoor environments, can expand its wireless connectivity capabilities by adding an MKR WAN 1300 or 1310 board. Edge Control can be positioned anywhere and is well suited for smart agriculture and other applications that require intelligent control in remote locations. + +![The Arduino® Edge Control.](assets/lorawan-101_img12.png) + +The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) tranforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. + +![The Arduino® Max Carrier.](assets/lorawan-101_img14.png) + +### Arduino® Libraries for LoRa® Connectivity + +You can use several Arduino libraries with the CMCMWX1ZZABZ LoRa® module from Murata®; we recommend two: The [MKRWAN library](https://github.com/arduino-libraries/MKRWAN), developed by Arduino, and the [Arduino LoRa](https://github.com/sandeepmistry/arduino-LoRa) library, developed by Sandeep Mistry. The MKRWAN and the Arduino LoRa libraries provide you the APIs to communicate with LoRa® and LoRaWAN networks®. + +You can use both libraries in the Arduino IDE, [online](https://store.arduino.cc/digital/create) and [offline](https://www.arduino.cc/en/software). If you are using the online IDE, you don't need to do anything, both libraries are already installed and ready to be used. If you are using the offline IDE, you must install the libraries manually. Installing libraries can be done easily by navigating to **Tools > Manage Libraries...** and then look for **MKRWAN** library by Arduino and **LoRa** by Sandeep Mistry; **remember to install the latest version of the libraries**. + +***Currently, there are two versions of the MKRWAN library; MKRWAN_v2 library is still in beta.*** + +### Example: Sending and Receiving Data to a Network Server + +Using Arduino® hardware and software to communicate with LoRa® and LoRaWAN® networks is simple; let's check outan example. This example uses an MKR WAN 1310 board and the MKRWAN library to send data to a LoRaWAN® network, in this case, TTN. The circuit for this example is shown in the image below: + +![Circuit used in the example.](assets/lorawan-101_img13.png) + +Before sending and receiving messages from TTN, you need to register your board first to the network. For this, you need to know your board's `Device EUI`. You can get your board's `Device EUI` by running the `FirstConfiguration` example from the MKRWAN library. With your Device EUI, you can register your board in TTN by creating an account in TTN, adding an application, and registering your board. This [tutorial](https://www.thethingsnetwork.org/docs/devices/node/quick-start/) from TTN explains the process. + +Once your device is registered on TTN, you can start sending and receiving data with the following code: + +```arduino +/* + Send and receive data from a LoRaWAN network + This sketch demonstrates how to send and receive data with the MKR WAN 1300/1310 board. + This example code is in the public domain. +*/ + +#include +#include "arduino_secrets.h" + +LoRaModem modem; + +void setup() { + // Serial port initialization + Serial.begin(115200); + while (!Serial); + + // LoRa module initialization + // Initialize the modem with your regional band (eg. US915, AS923,...) + if (!modem.begin(EU868)) { + Serial.println("- Failed to start module"); + while (1) {} + }; + + // With the module initialized, we can get its version and device EUI + // Your network server provider requires device EUI information to connect to their network + Serial.print("- Your module version is: "); + Serial.println(modem.version()); + Serial.print("- Your device EUI is: "); + Serial.println(modem.deviceEUI()); + + // Join procedure to the network server + // OTAA method need appEUI and appKey, this information is provided by the network server + int connected = modem.joinOTAA(appEui, appKey); + if (!connected) { + Serial.println("- Something went wrong; are you indoor? Move near a window and retry..."); + while (1) {} + } + + // Set poll interval to 60 secs. + modem.minPollInterval(60); + + // NOTE: independent of this setting, the modem will not allow sending more than one message every 2 minutes + // This is enforced by firmware and can not be changed. +} + +void loop() { + Serial.println(); + Serial.println("- Enter a message to send to network"); + Serial.println("(make sure that end-of-line 'NL' is enabled)"); + + // Get message from Serial Monitor + while (!Serial.available()); + String msg = Serial.readStringUntil('\n'); + + // Show the sent message to the network in HEX format + Serial.println(); + Serial.print("- Sending: " + msg + " - "); + for (unsigned int i = 0; i < msg.length(); i++) { + Serial.print(msg[i] >> 4, HEX); + Serial.print(msg[i] & 0xF, HEX); + Serial.print(" "); + } + Serial.println(); + + // Check if the message was sent correctly or if there was an error + int err; + modem.beginPacket(); + modem.print(msg); + err = modem.endPacket(true); + if (err > 0) { + Serial.println("- Message sent correctly!"); + } else { + Serial.println("- Error sending message :("); + Serial.println("(- You may send a limited amount of messages per minute, depending on the signal strength"); + Serial.println("- It may vary from one message every couple of seconds to one message every minute)"); + } + + // Wait and check if there's a message sent from the network + delay(1000); + if (!modem.available()) { + Serial.println("- No downlink message received at this time"); + return; + } + + // If there's a message available, store it + char rcv[64]; + int i = 0; + while (modem.available()) { + rcv[i++] = (char)modem.read(); + } + + // Decode and show the received message from the network + Serial.print("- Received: "); + for (unsigned int j = 0; j < i; j++) { + Serial.print(rcv[j] >> 4, HEX); + Serial.print(rcv[j] & 0xF, HEX); + Serial.print(" "); + } + Serial.println(); +} +``` + +Check out more detailed tutorials we have about sending data between a MKR WAN board to TTN and between two MKR WAN boards; the tutorials can be found [here](https://docs.arduino.cc/hardware/mkr-wan-1310). + + +## Further Reading and Resources + +LoRa® and LoRaWAN® are pretty extensive but exciting topics to study. If you want to learn more about these technologies, check out the following links: + +- [The LoRa Alliance® Resource Hub](https://lora-alliance.org/resource-hub/). Here you can access LoRaWAN® technical documents and Whitepapers from The LoRa Alliance®. +- [LoRa Developer Portal from Semtech](https://lora-alliance.org/resource-hub/). Here you can find technical papers and user guides as well as specifications and datasheets from Semtech. +- [The Things Network documentation](https://www.thethingsnetwork.org/docs/). Here you can learn all about LoRaWAN® and The Things Network! - [The Things Academy online course in Udemy](https://www.udemy.com/course/lorawan-fundamentals/). A free online course where you'll learn all about LoRa® and LoRaWAN®, and get ready to start building your own Low Power Wide Area Network applications. \ No newline at end of file From 157018b4b5181edc4d3ec4aee5e00cb5639d4ddd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Bagur=20N=C3=A1jera?= Date: Thu, 2 Jun 2022 13:07:47 -0500 Subject: [PATCH 2/9] Typo fix --- content/learn/05.communication/05.lorawan-101/lorawan-101.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learn/05.communication/05.lorawan-101/lorawan-101.md b/content/learn/05.communication/05.lorawan-101/lorawan-101.md index 6b21a61ad3..258898a860 100644 --- a/content/learn/05.communication/05.lorawan-101/lorawan-101.md +++ b/content/learn/05.communication/05.lorawan-101/lorawan-101.md @@ -168,7 +168,7 @@ The Arduino® [Edge Control](https://store.arduino.cc/products/arduino-edge-cont ![The Arduino® Edge Control.](assets/lorawan-101_img12.png) -The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) tranforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. +The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) transforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. ![The Arduino® Max Carrier.](assets/lorawan-101_img14.png) From 20dcc715e3a5b94ae2e7f308e827a6dd2b11c060 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Bagur=20N=C3=A1jera?= Date: Thu, 2 Jun 2022 14:51:47 -0500 Subject: [PATCH 3/9] Typo fix --- content/learn/05.communication/05.lorawan-101/lorawan-101.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learn/05.communication/05.lorawan-101/lorawan-101.md b/content/learn/05.communication/05.lorawan-101/lorawan-101.md index 258898a860..327ab06b19 100644 --- a/content/learn/05.communication/05.lorawan-101/lorawan-101.md +++ b/content/learn/05.communication/05.lorawan-101/lorawan-101.md @@ -168,7 +168,7 @@ The Arduino® [Edge Control](https://store.arduino.cc/products/arduino-edge-cont ![The Arduino® Edge Control.](assets/lorawan-101_img12.png) -The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) transforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. +The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) transforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high-performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. ![The Arduino® Max Carrier.](assets/lorawan-101_img14.png) From d77e3ac40806d9370d9f66bccf13e3f3cb722e1f Mon Sep 17 00:00:00 2001 From: Josefine Hansson <66409231+jhansson-ard@users.noreply.github.com> Date: Thu, 20 Oct 2022 08:20:56 +0200 Subject: [PATCH 4/9] Update content/learn/05.communication/05.lorawan-101/lorawan-101.md --- content/learn/05.communication/05.lorawan-101/lorawan-101.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/learn/05.communication/05.lorawan-101/lorawan-101.md b/content/learn/05.communication/05.lorawan-101/lorawan-101.md index 327ab06b19..14ef895c80 100644 --- a/content/learn/05.communication/05.lorawan-101/lorawan-101.md +++ b/content/learn/05.communication/05.lorawan-101/lorawan-101.md @@ -114,7 +114,8 @@ The LoRaWAN® specification has **three** different communication profiles betwe ***All LoRaWAN devices must implement Class A; Class B, and Class C are extensions of Class A profile.*** - #### Class A: "Aloha" +#### Class A: "Aloha" + Class A devices implement a **bi-directional communication profile** where two short downlinks follow the end-device uplink transmission receive windows, usually referred to as RX1 and RX2. If the server does not respond in either RX1 or RX2 windows, the next opportunity will be after the next uplink transmission. Class A devices are often battery-powered and spend most of the time in sleep mode; therefore, they have the lowest energy consumption, keep long intervals between uplinks, and have high downlink latency. From af8a58f2c71adb9617be549a7f9323cd30ce15c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Bagur=20N=C3=A1jera?= Date: Thu, 2 Jun 2022 13:04:04 -0500 Subject: [PATCH 5/9] Update tutorial content --- .../assets/lorawan-101_img14.png | Bin 0 -> 75542 bytes .../05.lorawan-101/lorawan-101.md | 308 ++++++++++++++++++ 2 files changed, 308 insertions(+) create mode 100644 content/learn/05.communication/05.lorawan-101/assets/lorawan-101_img14.png diff --git a/content/learn/05.communication/05.lorawan-101/assets/lorawan-101_img14.png b/content/learn/05.communication/05.lorawan-101/assets/lorawan-101_img14.png new file mode 100644 index 0000000000000000000000000000000000000000..428592b0dbf95d0f594ba9e82d185eda8a8849d5 GIT binary patch literal 75542 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 z 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 DsQ>96 literal 0 HcmV?d00001 diff --git a/content/learn/05.communication/05.lorawan-101/lorawan-101.md b/content/learn/05.communication/05.lorawan-101/lorawan-101.md index 7a445499ed..a9e525d4a2 100644 --- a/content/learn/05.communication/05.lorawan-101/lorawan-101.md +++ b/content/learn/05.communication/05.lorawan-101/lorawan-101.md @@ -1,3 +1,4 @@ +<<<<<<< HEAD --- title: 'The Arduino Guide to LoRa® and LoRaWAN®' description: 'Learn the basics of LoRa® and LoRaWAN® and how to use them with Arduino hardware and software.' @@ -299,4 +300,311 @@ LoRa® and LoRaWAN® are pretty extensive but exciting topics to study. If you w - [The LoRa Alliance® Resource Hub](https://lora-alliance.org/resource-hub/). Here you can access LoRaWAN® technical documents and Whitepapers from The LoRa Alliance®. - [LoRa Developer Portal from Semtech](https://lora-alliance.org/resource-hub/). Here you can find technical papers and user guides as well as specifications and datasheets from Semtech. - [The Things Network documentation](https://www.thethingsnetwork.org/docs/). Here you can learn all about LoRaWAN® and The Things Network! +======= +--- +title: 'The Arduino Guide to LoRa® and LoRaWAN®' +description: 'Learn the basics of LoRa® and LoRaWAN® and how to use them with Arduino hardware and software.' +tags: + - LoRa + - LoRaWAN + - MKR WAN 1310 +author: 'José Bagur, Taddy Chung' +--- + +The Internet of Things (IoT) is often referred to as a collection of objects connected to the Internet using **wireless networks**; these connected objects aim to collect and exchange information from their surroundings. **IoT enables a connection between the physical and the digital worlds**; that connection produces a massive amount of data that can be used for the **optimization** of resources and to improve the **efficiency** of existing systems. + +***By 2025, there will be more than 25 billion IoT devices connected to the Internet.*** + +Many of the existing IoT devices will be connected to the Internet using short-range wireless networks such as Wi-Fi®, Bluetooth®, ZigBee, Z-Wave®, etc. Cellular connections using networks such as 2G, 3G, and 4G will also connect IoT devices to the Internet. Still, these **short and medium-range wireless networks are not always suitable for IoT devices** since they were developed for applications where power consumption and battery life are not significant issues. **IoT devices usually have low-power consumption and send and receive low amounts of data**. + +## Low-Power Wide Area Networks + +**Low-Power Wide Area Networks** (LPWAN) is a group of wireless networks technologies well suited to the specific needs of IoT devices: **low-bandwidth** and **low-power** devices, usually battery-powered. This type of networks provide **low-bit rates** over **long ranges** with a **low-power** consumption. LPWAN's can accommodate data packets sizes from 10 bytes to 1 kB at uplink speeds up to 200 kbps; long-range connectivity varies from 2 to 1,000 km depending on the network technology. Most LPWAN's technologies have a **star topology**; this means that each device connects directly to a central access point. + +Some of the important use cases for LPWAN's include the following applications: + +- **Smart cities**: smart parking, intelligent street lighting +- **Supply chain management**: asset tracking, condition monitoring +- **Smart grids**: electricity, water, and gas metering +- **Smart agriculture**: land condition monitoring, animal tracking, geofencing + +***If you want to read more about LPWAN's, check out [this article](/learn/wireless/lorawan-101) from the Learn section.*** + +Several LPWAN technologies use **licensed** or **unlicensed frequencies** and and **proprietary** or **open** specifications. **LoRa®** and its Media Access Control (MAC) layer protocol implementation, **LoRaWAN®**, is currently one of the existing LPWAN gaining the most traction to support IoT devices and services. + +![Bandwidth vs. range of short distance, cellullar and LPWA networks. Image credits: The Things Network.](assets/lorawan-101_img01.png) + +## LoRa® and LoRaWAN® + +### What are LoRa® and LoRaWAN®? + +**LoRa®** is a **wireless modulation technique** derived from **Chirp Spread Spectrum** (CSS) technology. CSS uses wideband linear frequency modulated chirp pulses to encode information. LoRa® can operate on the following license-free sub-gigahertz ISM (Industrial, Scientific, and Medical) bands: **433 MHz**, **868 MHz**, and **915 MHz**. ISM bands are internationally reserved for industrial, scientific and, medical uses. + +***LoRa® modulation technique was invented in 2010 by the French startup Cycleo; then, it was acquired in 2012 by Semtech.*** + +Based on LoRa®, the **LoRaWAN®** (LoRa for Wide Area Networks) specification extended the LoRa® physical communication layer into the Internet by adding a **MAC layer**. The LoRaWAN® specification is a software layer that defines how devices must use the LoRa, for example, when they transmit or receive messages. The LoRaWAN specification is open-source; it has been supported and maintained by the LoRa Alliance® since 2015. + +***The LoRa Alliance® is an open, nonprofit organization that collaborates and shares experiences to promote and drive the success of the LoRaWAN® standard as the leading open global standard for secure IoT LPWAN connectivity.*** + +### LoRaWAN® Network Architecture + +A typical LoRaWAN® network architecture includes the following essential parts: **end-devices** (usually sensors), a base station or **gateway**, also known as Long Range Relay (LRR), a **network server** also known as Long Range Controller (LRC), and the **Operation Support System** (OSS) for provisioning and management of the network. + +![Typical LoRaWAN® network architecture example. Image credits: The Things Network.](assets/lorawan-101_img02.png) + +From the image above, notice there is a fundamental difference between a network server and a gateway. The **network server** controls the virtualized MAC layer of the LoRaWAN® network while **gateways** are devices pre-integrated with the network server to ease the LPWAN rollout and provisioning. LoRaWAN® network servers and gateways access can be public or private. + +***[The Things Network (TTN)](https://www.thethingsnetwork.org/) is a crowdsourced, open, and decentralized LoRaWAN® network server. This network is a great way to start testing devices, applications, integrations and get familiar with LoRaWAN®. To connect to TTN, you will need to be in the range of a gateway. Check the [world map](https://www.thethingsnetwork.org/map) to see if your local community already has a gateway installed; if not, consider installing one!*** + +LoRaWAN® networks are usually deployed in a **star-of-stars topology**; this means that **gateways manage data between end-devices and a network server**. Gateways are connected to the central network server via the Internet, while end-devices use LoRa® to send and receive data to and from the gateways; end-devices are not exclusively tied to a single gateway, end-devices broadcast information to all the gateways in range. Communication in LoRaWAN® networks is natively **bi-directional**, although uplink communication between end-devices and the central network server is expected to be predominant in the network. + +***Star networks topologies provide the best relationship between long-range communications, the number of gateways or base stations in the network, end-devices power consumption, and battery life.*** + +Star networks present several advantages compared to other network topologies: + +- Gateways can be added to the network anywhere and anytime without prior planning +- Message delivery is more robust since multiple gateways receive the same data packets during each uplink + +### Data Rates + +Communication between end-devices and gateways in LoRaWAN® networks is spread out on different **frequency channels** and **data rates** (communications using different data rates do not interfere with each other). + +***LoRa® supports data rates ranging from 300 bps to 5 kbps for a 125 kHz bandwidth.*** + +To maximize the battery life of each end-device and the overall capacity available through the network, LoRaWAN® uses an **Adaptive Data Rate** (ADR) mechanism for **optimizing data rates, airtime, and power consumption**. ADR controls the following transmission parameters on end-devices: + +- **Spreading factor**: the **speed of data transmission**. Lower spreading factors mean a higher data transmission rate +- **Bandwidth**: the **amount of data that can be transmitted** from one point to another within the network +- **Transmission power**: the energy that the end-device transmitter produces at its output + +The table below shows compares spreading factor, data rate, and time on-air at a bandwidth of 125 kHz (range is an indicative value, it will depend on the propagation conditions): + +| **Spreading Factor** | **Data Rate** | **Range** | **Time on-Air** | +|:----------------:|:---------:|:-----:|:-----------:| +| SF7 | 5470 bps | 2 km | 56 ms | +| SF8 | 3125 bps | 4 km | 100 ms | +| SF9 | 1760 bps | 6 km | 200 ms | +| SF10 | 980 bps | 8 km | 370 ms | +| SF11 | 440 bps | 11 km | 40 ms | +| SF12 | 290 bps | 14 km | 1400 ms | + +End-devices may transmit on any channel available at any time, using any available data rate, as long as the following rule is respected: + +- The end-device changes channel in a pseudo-random fashion for every transmission. The resulting frequency diversity makes the system more robust against interference + +Also, local regulations must be respected, for example: + +- In the EU868 band, the end-device must respect the maximum transmit duty cycle relative to the sub-band used and local regulations (1% for end-devices) +- In the US915 band, the end-device must respect the maximum transmit duration (or dwell time) relative to the sub-band used and local regulations (400ms) + +![LoRaWAN® network layers. Image credits: Semtech.](assets/lorawan-101_img03.png) + +### Regional Parameters + +The **LoRaWAN® Regional Parameters specification** is a companion to the LoRaWAN® network layer specification. While the LoRaWAN® network layer specification defines the air interface between a compliant end-device (sensor, actuator, tracker, etc.) and a compliant network core, the LoRaWAN® Regional Parameters specification defines the **adaptation of the LoRaWAN® network layer specification to comply with the various regulations enforced throughout the world on the use of various frequency bands of the unlicensed spectrum which are available**. + +Also, the LoRaWAN® Regional Parameters specification documents the **physical layer configurations required for the compliant operation of LoRaWAN® Link Layer radios** using various radio frequency modulation techniques. + +***The idea behind the LoRaWAN® Regional Parameters specification is to create the smallest number of regional channel plans covering the largest possible number of regulatory regions. With this, complexity is decreased to implementers as well as the certification cost (end-device certification is enumerated by network layer, Regional Parameters and channel plan revision).*** + +LoRaWAN® Regional Parameters specifications do not specify everything. They only cover a region by specifying the common denominator. For example, the LoRaWAN® Regional Parameters for Asia only specify a common subset of channels, but there are variations between regulations in Asian countries. Furthermore, each network server, for example TTN, is free to select additional parameters, such as additional emission channels. + +For more information, you can read the RP002-1.0.2 LoRaWAN® Regional Parameters document [here](https://lora-alliance.org/wp-content/uploads/2020/11/RP_2-1.0.2.pdf), we also have a more detailed tutorial about LoRaWAN® Regional Parameters and Arduino hardware; the tutorial can be found here [here](https://docs.arduino.cc/tutorials/mkr-wan-1310/lorawan-regional-parameters) + +### Classes + +The LoRaWAN® specification has **three** different communication profiles between devices and applications: **Class A**, **Class B**, and **Class C**. Each class serves different application needs and has optimized requirements for specific purposes. The main difference between the three classes is latency and power consumption; end-devices can always send uplinks when needed, but its class will determine when to receive downlinks. + +***All LoRaWAN devices must implement Class A; Class B, and Class C are extensions of Class A profile.*** + + #### Class A: "Aloha" + +Class A devices implement a **bi-directional communication profile** where two short downlinks follow the end-device uplink transmission receive windows, usually referred to as RX1 and RX2. If the server does not respond in either RX1 or RX2 windows, the next opportunity will be after the next uplink transmission. Class A devices are often battery-powered and spend most of the time in sleep mode; therefore, they have the lowest energy consumption, keep long intervals between uplinks, and have high downlink latency. + +![Class A default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img04.png) + +#### Class B: The "Beaconing" Class + +Class B devices extend Class A devices by adding scheduled receive windows for downlinks, and, therefore, they **emulate a continuously receiving device by opening receive windows at fixed time intervals**. This class should be implemented when low latency of downlink communication while keeping the power consumption as low as possible is required. + +![Class B default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img05.png) + +#### Class C: Continuous Reception + +Class C communication profile is used in applications with enough power available, so there is no need to minimize the time of the reception windows; this is the case of most actuators (e.g., smart plugs, street lights, electrical meters, etc.) Class C devices always listen for downlinks messages unless they transmit an uplink message. This behavior results in the **lowest latency between the server and the end-device**. + +![Class C default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img06.png) + +### Authentication and Security + +Authentication and security are also important in LoRaWAN® networks. Any LoRaWAN® network has a baseline authentication and security framework based on the AES 128 encryption scheme. Compared to other LPWAN's, which rely on a single key for authentication and encryption, the LoRaWAN® framework separates both. Authentication and integrity control use a **network session key** (NwkSKey) while user data encription uses an **application session key** (AppSKey). + +***NwkSKey and AppSKey are AES-128 root keys specific to the end-device, end-devices manufacturers, or application owners assigned them.*** + +LoRaWAN® supports two authentication and activation methods: **Over-The-Air-Activation** (OTAA) and **Activation by Personalization** (ABP). + +- **Over-The-Air Activation (OTAA)**: In this method, end-devices are not initialized for any particular network; they send a JOIN request to a specific LoRaWAN® network and then receive a device address and an authorization token from which session keys are derived; NwkSKey and AppSKey are derived during this procedure from a root AppKey pre-provisioned in the end-devices by its manufacturer. + +![Over-The-Air activation process. Image credits: Heath Raftery.](assets/lorawan-101_img08.png) + +- **Activation by Personalization (ABP)**: In this method, end-devices are personalized to work with a given LoRaWAN® network. End-devices are pre-provisioned with the NwkSKey and AppSKey and the 32-bits device network address. + +![Activation by Personalization process. Image credits: Heath Raftery.](assets/lorawan-101_img09.png) + +***The recommended authentication and activation method is OTAA since it provides a high level of security; ABP method should be used only for specific situations.*** + +## Arduino® and LoRa® + +Arduino® brings LoRa® connectivity to your projects with several boards, addons and libraries. + +### Arduino® Boards with LoRa® Connectivity + +The MKR WAN [1300](https://store.arduino.cc/products/arduino-mkr-wan-1300-lora-connectivity) and [1310](https://store.arduino.cc/products/arduino-mkr-wan-1310) boards provide you with a practical and cost-effective solution to applications that require LoRa® connectivity and low-power consumption. The MKR WAN 1300 and 1310 boards are based on a [SAMD21 microcontroller](https://content.arduino.cc/assets/mkr-microchip_samd21_family_full_datasheet-ds40001882d.pdf) from Microchip®; they also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf) module from Murata® for LoRaWAN® connectivity, the [ATECC508](https://docs.arduino.cc/resources/datasheets/ATECC508A-datasheet.pdf) cryptoauthentication device for security, and a 2MB SPI Flash memory for onboard storage. + +![The Arduino® MKR WAN 1310 board.](assets/lorawan-101_img10.png) + +PRO hardware also has LoRaWAN® connectivity. The Arduino® [Portenta H7](https://store.arduino.cc/collections/boards/products/portenta-h7) board can have LoRaWAN® connectivity with the [Portenta Vision Shield LoRa®](https://store.arduino.cc/products/arduino-portenta-vision-shield-lora%C2%AE); this addon board also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN ® connectivity, the same module present in the MKR 1300 and 1310 boards. + +![The Arduino® Portenta Vision Shield LoRa®.](assets/lorawan-101_img11.png) + +The Arduino® [Edge Control](https://store.arduino.cc/products/arduino-edge-control), a remote monitoring and control solution optimized for outdoor environments, can expand its wireless connectivity capabilities by adding an MKR WAN 1300 or 1310 board. Edge Control can be positioned anywhere and is well suited for smart agriculture and other applications that require intelligent control in remote locations. + +![The Arduino® Edge Control.](assets/lorawan-101_img12.png) + +The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) tranforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. + +![The Arduino® Max Carrier.](assets/lorawan-101_img14.png) + +### Arduino® Libraries for LoRa® Connectivity + +You can use several Arduino libraries with the CMCMWX1ZZABZ LoRa® module from Murata®; we recommend two: The [MKRWAN library](https://github.com/arduino-libraries/MKRWAN), developed by Arduino, and the [Arduino LoRa](https://github.com/sandeepmistry/arduino-LoRa) library, developed by Sandeep Mistry. The MKRWAN and the Arduino LoRa libraries provide you the APIs to communicate with LoRa® and LoRaWAN networks®. + +You can use both libraries in the Arduino IDE, [online](https://store.arduino.cc/digital/create) and [offline](https://www.arduino.cc/en/software). If you are using the online IDE, you don't need to do anything, both libraries are already installed and ready to be used. If you are using the offline IDE, you must install the libraries manually. Installing libraries can be done easily by navigating to **Tools > Manage Libraries...** and then look for **MKRWAN** library by Arduino and **LoRa** by Sandeep Mistry; **remember to install the latest version of the libraries**. + +***Currently, there are two versions of the MKRWAN library; MKRWAN_v2 library is still in beta.*** + +### Example: Sending and Receiving Data to a Network Server + +Using Arduino® hardware and software to communicate with LoRa® and LoRaWAN® networks is simple; let's check outan example. This example uses an MKR WAN 1310 board and the MKRWAN library to send data to a LoRaWAN® network, in this case, TTN. The circuit for this example is shown in the image below: + +![Circuit used in the example.](assets/lorawan-101_img13.png) + +Before sending and receiving messages from TTN, you need to register your board first to the network. For this, you need to know your board's `Device EUI`. You can get your board's `Device EUI` by running the `FirstConfiguration` example from the MKRWAN library. With your Device EUI, you can register your board in TTN by creating an account in TTN, adding an application, and registering your board. This [tutorial](https://www.thethingsnetwork.org/docs/devices/node/quick-start/) from TTN explains the process. + +Once your device is registered on TTN, you can start sending and receiving data with the following code: + +```arduino +/* + Send and receive data from a LoRaWAN network + This sketch demonstrates how to send and receive data with the MKR WAN 1300/1310 board. + This example code is in the public domain. +*/ + +#include +#include "arduino_secrets.h" + +LoRaModem modem; + +void setup() { + // Serial port initialization + Serial.begin(115200); + while (!Serial); + + // LoRa module initialization + // Initialize the modem with your regional band (eg. US915, AS923,...) + if (!modem.begin(EU868)) { + Serial.println("- Failed to start module"); + while (1) {} + }; + + // With the module initialized, we can get its version and device EUI + // Your network server provider requires device EUI information to connect to their network + Serial.print("- Your module version is: "); + Serial.println(modem.version()); + Serial.print("- Your device EUI is: "); + Serial.println(modem.deviceEUI()); + + // Join procedure to the network server + // OTAA method need appEUI and appKey, this information is provided by the network server + int connected = modem.joinOTAA(appEui, appKey); + if (!connected) { + Serial.println("- Something went wrong; are you indoor? Move near a window and retry..."); + while (1) {} + } + + // Set poll interval to 60 secs. + modem.minPollInterval(60); + + // NOTE: independent of this setting, the modem will not allow sending more than one message every 2 minutes + // This is enforced by firmware and can not be changed. +} + +void loop() { + Serial.println(); + Serial.println("- Enter a message to send to network"); + Serial.println("(make sure that end-of-line 'NL' is enabled)"); + + // Get message from Serial Monitor + while (!Serial.available()); + String msg = Serial.readStringUntil('\n'); + + // Show the sent message to the network in HEX format + Serial.println(); + Serial.print("- Sending: " + msg + " - "); + for (unsigned int i = 0; i < msg.length(); i++) { + Serial.print(msg[i] >> 4, HEX); + Serial.print(msg[i] & 0xF, HEX); + Serial.print(" "); + } + Serial.println(); + + // Check if the message was sent correctly or if there was an error + int err; + modem.beginPacket(); + modem.print(msg); + err = modem.endPacket(true); + if (err > 0) { + Serial.println("- Message sent correctly!"); + } else { + Serial.println("- Error sending message :("); + Serial.println("(- You may send a limited amount of messages per minute, depending on the signal strength"); + Serial.println("- It may vary from one message every couple of seconds to one message every minute)"); + } + + // Wait and check if there's a message sent from the network + delay(1000); + if (!modem.available()) { + Serial.println("- No downlink message received at this time"); + return; + } + + // If there's a message available, store it + char rcv[64]; + int i = 0; + while (modem.available()) { + rcv[i++] = (char)modem.read(); + } + + // Decode and show the received message from the network + Serial.print("- Received: "); + for (unsigned int j = 0; j < i; j++) { + Serial.print(rcv[j] >> 4, HEX); + Serial.print(rcv[j] & 0xF, HEX); + Serial.print(" "); + } + Serial.println(); +} +``` + +Check out more detailed tutorials we have about sending data between a MKR WAN board to TTN and between two MKR WAN boards; the tutorials can be found [here](https://docs.arduino.cc/hardware/mkr-wan-1310). + + +## Further Reading and Resources + +LoRa® and LoRaWAN® are pretty extensive but exciting topics to study. If you want to learn more about these technologies, check out the following links: + +- [The LoRa Alliance® Resource Hub](https://lora-alliance.org/resource-hub/). Here you can access LoRaWAN® technical documents and Whitepapers from The LoRa Alliance®. +- [LoRa Developer Portal from Semtech](https://lora-alliance.org/resource-hub/). Here you can find technical papers and user guides as well as specifications and datasheets from Semtech. +- [The Things Network documentation](https://www.thethingsnetwork.org/docs/). Here you can learn all about LoRaWAN® and The Things Network! +>>>>>>> 3b9dfe7b (Update tutorial content) - [The Things Academy online course in Udemy](https://www.udemy.com/course/lorawan-fundamentals/). A free online course where you'll learn all about LoRa® and LoRaWAN®, and get ready to start building your own Low Power Wide Area Network applications. \ No newline at end of file From f5633b3dd5cbee3893051ad71deaac996b7e4c4a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Bagur=20N=C3=A1jera?= Date: Thu, 2 Jun 2022 13:07:47 -0500 Subject: [PATCH 6/9] Typo fix --- content/learn/05.communication/05.lorawan-101/lorawan-101.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learn/05.communication/05.lorawan-101/lorawan-101.md b/content/learn/05.communication/05.lorawan-101/lorawan-101.md index a9e525d4a2..65faa6ed0f 100644 --- a/content/learn/05.communication/05.lorawan-101/lorawan-101.md +++ b/content/learn/05.communication/05.lorawan-101/lorawan-101.md @@ -471,7 +471,7 @@ The Arduino® [Edge Control](https://store.arduino.cc/products/arduino-edge-cont ![The Arduino® Edge Control.](assets/lorawan-101_img12.png) -The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) tranforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. +The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) transforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. ![The Arduino® Max Carrier.](assets/lorawan-101_img14.png) From 3e38d1254c7fb7b276d9a135a254740cff9f2039 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Bagur=20N=C3=A1jera?= Date: Thu, 2 Jun 2022 14:51:47 -0500 Subject: [PATCH 7/9] Typo fix --- content/learn/05.communication/05.lorawan-101/lorawan-101.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/learn/05.communication/05.lorawan-101/lorawan-101.md b/content/learn/05.communication/05.lorawan-101/lorawan-101.md index 65faa6ed0f..1e5f9ebe03 100644 --- a/content/learn/05.communication/05.lorawan-101/lorawan-101.md +++ b/content/learn/05.communication/05.lorawan-101/lorawan-101.md @@ -471,7 +471,7 @@ The Arduino® [Edge Control](https://store.arduino.cc/products/arduino-edge-cont ![The Arduino® Edge Control.](assets/lorawan-101_img12.png) -The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) transforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. +The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) transforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high-performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. ![The Arduino® Max Carrier.](assets/lorawan-101_img14.png) From f376ed5a71b3b5a44eca870c8e3141560657b148 Mon Sep 17 00:00:00 2001 From: Josefine Hansson <66409231+jhansson-ard@users.noreply.github.com> Date: Thu, 20 Oct 2022 08:20:56 +0200 Subject: [PATCH 8/9] Update content/learn/05.communication/05.lorawan-101/lorawan-101.md --- content/learn/05.communication/05.lorawan-101/lorawan-101.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/content/learn/05.communication/05.lorawan-101/lorawan-101.md b/content/learn/05.communication/05.lorawan-101/lorawan-101.md index 1e5f9ebe03..457df04411 100644 --- a/content/learn/05.communication/05.lorawan-101/lorawan-101.md +++ b/content/learn/05.communication/05.lorawan-101/lorawan-101.md @@ -417,7 +417,8 @@ The LoRaWAN® specification has **three** different communication profiles betwe ***All LoRaWAN devices must implement Class A; Class B, and Class C are extensions of Class A profile.*** - #### Class A: "Aloha" +#### Class A: "Aloha" + Class A devices implement a **bi-directional communication profile** where two short downlinks follow the end-device uplink transmission receive windows, usually referred to as RX1 and RX2. If the server does not respond in either RX1 or RX2 windows, the next opportunity will be after the next uplink transmission. Class A devices are often battery-powered and spend most of the time in sleep mode; therefore, they have the lowest energy consumption, keep long intervals between uplinks, and have high downlink latency. From 861b7987e505a0907a34e6dbd2e394b556188205 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Antonio=20Bagur=20N=C3=A1jera?= Date: Mon, 5 Dec 2022 06:58:27 -0600 Subject: [PATCH 9/9] Typo fix --- .../05.lorawan-101/lorawan-101.md | 612 +++++++++--------- 1 file changed, 306 insertions(+), 306 deletions(-) diff --git a/content/learn/05.communication/05.lorawan-101/lorawan-101.md b/content/learn/05.communication/05.lorawan-101/lorawan-101.md index a4e744ac63..803d5033f7 100644 --- a/content/learn/05.communication/05.lorawan-101/lorawan-101.md +++ b/content/learn/05.communication/05.lorawan-101/lorawan-101.md @@ -304,312 +304,312 @@ LoRa® and LoRaWAN® are pretty extensive but exciting topics to study. If you w ======= ======= >>>>>>> d77e3ac40806d9370d9f66bccf13e3f3cb722e1f ---- -title: 'The Arduino Guide to LoRa® and LoRaWAN®' -description: 'Learn the basics of LoRa® and LoRaWAN® and how to use them with Arduino hardware and software.' -tags: - - LoRa - - LoRaWAN - - MKR WAN 1310 -author: 'José Bagur, Taddy Chung' ---- - -The Internet of Things (IoT) is often referred to as a collection of objects connected to the Internet using **wireless networks**; these connected objects aim to collect and exchange information from their surroundings. **IoT enables a connection between the physical and the digital worlds**; that connection produces a massive amount of data that can be used for the **optimization** of resources and to improve the **efficiency** of existing systems. - -***By 2025, there will be more than 25 billion IoT devices connected to the Internet.*** - -Many of the existing IoT devices will be connected to the Internet using short-range wireless networks such as Wi-Fi®, Bluetooth®, ZigBee, Z-Wave®, etc. Cellular connections using networks such as 2G, 3G, and 4G will also connect IoT devices to the Internet. Still, these **short and medium-range wireless networks are not always suitable for IoT devices** since they were developed for applications where power consumption and battery life are not significant issues. **IoT devices usually have low-power consumption and send and receive low amounts of data**. - -## Low-Power Wide Area Networks - -**Low-Power Wide Area Networks** (LPWAN) is a group of wireless networks technologies well suited to the specific needs of IoT devices: **low-bandwidth** and **low-power** devices, usually battery-powered. This type of networks provide **low-bit rates** over **long ranges** with a **low-power** consumption. LPWAN's can accommodate data packets sizes from 10 bytes to 1 kB at uplink speeds up to 200 kbps; long-range connectivity varies from 2 to 1,000 km depending on the network technology. Most LPWAN's technologies have a **star topology**; this means that each device connects directly to a central access point. - -Some of the important use cases for LPWAN's include the following applications: - -- **Smart cities**: smart parking, intelligent street lighting -- **Supply chain management**: asset tracking, condition monitoring -- **Smart grids**: electricity, water, and gas metering -- **Smart agriculture**: land condition monitoring, animal tracking, geofencing - -***If you want to read more about LPWAN's, check out [this article](/learn/wireless/lorawan-101) from the Learn section.*** - -Several LPWAN technologies use **licensed** or **unlicensed frequencies** and and **proprietary** or **open** specifications. **LoRa®** and its Media Access Control (MAC) layer protocol implementation, **LoRaWAN®**, is currently one of the existing LPWAN gaining the most traction to support IoT devices and services. - -![Bandwidth vs. range of short distance, cellullar and LPWA networks. Image credits: The Things Network.](assets/lorawan-101_img01.png) - -## LoRa® and LoRaWAN® - -### What are LoRa® and LoRaWAN®? - -**LoRa®** is a **wireless modulation technique** derived from **Chirp Spread Spectrum** (CSS) technology. CSS uses wideband linear frequency modulated chirp pulses to encode information. LoRa® can operate on the following license-free sub-gigahertz ISM (Industrial, Scientific, and Medical) bands: **433 MHz**, **868 MHz**, and **915 MHz**. ISM bands are internationally reserved for industrial, scientific and, medical uses. - -***LoRa® modulation technique was invented in 2010 by the French startup Cycleo; then, it was acquired in 2012 by Semtech.*** - -Based on LoRa®, the **LoRaWAN®** (LoRa for Wide Area Networks) specification extended the LoRa® physical communication layer into the Internet by adding a **MAC layer**. The LoRaWAN® specification is a software layer that defines how devices must use the LoRa, for example, when they transmit or receive messages. The LoRaWAN specification is open-source; it has been supported and maintained by the LoRa Alliance® since 2015. - -***The LoRa Alliance® is an open, nonprofit organization that collaborates and shares experiences to promote and drive the success of the LoRaWAN® standard as the leading open global standard for secure IoT LPWAN connectivity.*** - -### LoRaWAN® Network Architecture - -A typical LoRaWAN® network architecture includes the following essential parts: **end-devices** (usually sensors), a base station or **gateway**, also known as Long Range Relay (LRR), a **network server** also known as Long Range Controller (LRC), and the **Operation Support System** (OSS) for provisioning and management of the network. - -![Typical LoRaWAN® network architecture example. Image credits: The Things Network.](assets/lorawan-101_img02.png) - -From the image above, notice there is a fundamental difference between a network server and a gateway. The **network server** controls the virtualized MAC layer of the LoRaWAN® network while **gateways** are devices pre-integrated with the network server to ease the LPWAN rollout and provisioning. LoRaWAN® network servers and gateways access can be public or private. - -***[The Things Network (TTN)](https://www.thethingsnetwork.org/) is a crowdsourced, open, and decentralized LoRaWAN® network server. This network is a great way to start testing devices, applications, integrations and get familiar with LoRaWAN®. To connect to TTN, you will need to be in the range of a gateway. Check the [world map](https://www.thethingsnetwork.org/map) to see if your local community already has a gateway installed; if not, consider installing one!*** - -LoRaWAN® networks are usually deployed in a **star-of-stars topology**; this means that **gateways manage data between end-devices and a network server**. Gateways are connected to the central network server via the Internet, while end-devices use LoRa® to send and receive data to and from the gateways; end-devices are not exclusively tied to a single gateway, end-devices broadcast information to all the gateways in range. Communication in LoRaWAN® networks is natively **bi-directional**, although uplink communication between end-devices and the central network server is expected to be predominant in the network. - -***Star networks topologies provide the best relationship between long-range communications, the number of gateways or base stations in the network, end-devices power consumption, and battery life.*** - -Star networks present several advantages compared to other network topologies: - -- Gateways can be added to the network anywhere and anytime without prior planning -- Message delivery is more robust since multiple gateways receive the same data packets during each uplink - -### Data Rates - -Communication between end-devices and gateways in LoRaWAN® networks is spread out on different **frequency channels** and **data rates** (communications using different data rates do not interfere with each other). - -***LoRa® supports data rates ranging from 300 bps to 5 kbps for a 125 kHz bandwidth.*** - -To maximize the battery life of each end-device and the overall capacity available through the network, LoRaWAN® uses an **Adaptive Data Rate** (ADR) mechanism for **optimizing data rates, airtime, and power consumption**. ADR controls the following transmission parameters on end-devices: - -- **Spreading factor**: the **speed of data transmission**. Lower spreading factors mean a higher data transmission rate -- **Bandwidth**: the **amount of data that can be transmitted** from one point to another within the network -- **Transmission power**: the energy that the end-device transmitter produces at its output - -The table below shows compares spreading factor, data rate, and time on-air at a bandwidth of 125 kHz (range is an indicative value, it will depend on the propagation conditions): - -| **Spreading Factor** | **Data Rate** | **Range** | **Time on-Air** | -|:----------------:|:---------:|:-----:|:-----------:| -| SF7 | 5470 bps | 2 km | 56 ms | -| SF8 | 3125 bps | 4 km | 100 ms | -| SF9 | 1760 bps | 6 km | 200 ms | -| SF10 | 980 bps | 8 km | 370 ms | -| SF11 | 440 bps | 11 km | 40 ms | -| SF12 | 290 bps | 14 km | 1400 ms | - -End-devices may transmit on any channel available at any time, using any available data rate, as long as the following rule is respected: - -- The end-device changes channel in a pseudo-random fashion for every transmission. The resulting frequency diversity makes the system more robust against interference - -Also, local regulations must be respected, for example: - -- In the EU868 band, the end-device must respect the maximum transmit duty cycle relative to the sub-band used and local regulations (1% for end-devices) -- In the US915 band, the end-device must respect the maximum transmit duration (or dwell time) relative to the sub-band used and local regulations (400ms) - -![LoRaWAN® network layers. Image credits: Semtech.](assets/lorawan-101_img03.png) - -### Regional Parameters - -The **LoRaWAN® Regional Parameters specification** is a companion to the LoRaWAN® network layer specification. While the LoRaWAN® network layer specification defines the air interface between a compliant end-device (sensor, actuator, tracker, etc.) and a compliant network core, the LoRaWAN® Regional Parameters specification defines the **adaptation of the LoRaWAN® network layer specification to comply with the various regulations enforced throughout the world on the use of various frequency bands of the unlicensed spectrum which are available**. - -Also, the LoRaWAN® Regional Parameters specification documents the **physical layer configurations required for the compliant operation of LoRaWAN® Link Layer radios** using various radio frequency modulation techniques. - -***The idea behind the LoRaWAN® Regional Parameters specification is to create the smallest number of regional channel plans covering the largest possible number of regulatory regions. With this, complexity is decreased to implementers as well as the certification cost (end-device certification is enumerated by network layer, Regional Parameters and channel plan revision).*** - -LoRaWAN® Regional Parameters specifications do not specify everything. They only cover a region by specifying the common denominator. For example, the LoRaWAN® Regional Parameters for Asia only specify a common subset of channels, but there are variations between regulations in Asian countries. Furthermore, each network server, for example TTN, is free to select additional parameters, such as additional emission channels. - -For more information, you can read the RP002-1.0.2 LoRaWAN® Regional Parameters document [here](https://lora-alliance.org/wp-content/uploads/2020/11/RP_2-1.0.2.pdf), we also have a more detailed tutorial about LoRaWAN® Regional Parameters and Arduino hardware; the tutorial can be found here [here](https://docs.arduino.cc/tutorials/mkr-wan-1310/lorawan-regional-parameters) - -### Classes - -The LoRaWAN® specification has **three** different communication profiles between devices and applications: **Class A**, **Class B**, and **Class C**. Each class serves different application needs and has optimized requirements for specific purposes. The main difference between the three classes is latency and power consumption; end-devices can always send uplinks when needed, but its class will determine when to receive downlinks. - -***All LoRaWAN devices must implement Class A; Class B, and Class C are extensions of Class A profile.*** - -#### Class A: "Aloha" - - -Class A devices implement a **bi-directional communication profile** where two short downlinks follow the end-device uplink transmission receive windows, usually referred to as RX1 and RX2. If the server does not respond in either RX1 or RX2 windows, the next opportunity will be after the next uplink transmission. Class A devices are often battery-powered and spend most of the time in sleep mode; therefore, they have the lowest energy consumption, keep long intervals between uplinks, and have high downlink latency. - -![Class A default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img04.png) - -#### Class B: The "Beaconing" Class - -Class B devices extend Class A devices by adding scheduled receive windows for downlinks, and, therefore, they **emulate a continuously receiving device by opening receive windows at fixed time intervals**. This class should be implemented when low latency of downlink communication while keeping the power consumption as low as possible is required. - -![Class B default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img05.png) - -#### Class C: Continuous Reception - -Class C communication profile is used in applications with enough power available, so there is no need to minimize the time of the reception windows; this is the case of most actuators (e.g., smart plugs, street lights, electrical meters, etc.) Class C devices always listen for downlinks messages unless they transmit an uplink message. This behavior results in the **lowest latency between the server and the end-device**. - -![Class C default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img06.png) - -### Authentication and Security - -Authentication and security are also important in LoRaWAN® networks. Any LoRaWAN® network has a baseline authentication and security framework based on the AES 128 encryption scheme. Compared to other LPWAN's, which rely on a single key for authentication and encryption, the LoRaWAN® framework separates both. Authentication and integrity control use a **network session key** (NwkSKey) while user data encription uses an **application session key** (AppSKey). - -***NwkSKey and AppSKey are AES-128 root keys specific to the end-device, end-devices manufacturers, or application owners assigned them.*** - -LoRaWAN® supports two authentication and activation methods: **Over-The-Air-Activation** (OTAA) and **Activation by Personalization** (ABP). - -- **Over-The-Air Activation (OTAA)**: In this method, end-devices are not initialized for any particular network; they send a JOIN request to a specific LoRaWAN® network and then receive a device address and an authorization token from which session keys are derived; NwkSKey and AppSKey are derived during this procedure from a root AppKey pre-provisioned in the end-devices by its manufacturer. - -![Over-The-Air activation process. Image credits: Heath Raftery.](assets/lorawan-101_img08.png) - -- **Activation by Personalization (ABP)**: In this method, end-devices are personalized to work with a given LoRaWAN® network. End-devices are pre-provisioned with the NwkSKey and AppSKey and the 32-bits device network address. - -![Activation by Personalization process. Image credits: Heath Raftery.](assets/lorawan-101_img09.png) - -***The recommended authentication and activation method is OTAA since it provides a high level of security; ABP method should be used only for specific situations.*** - -## Arduino® and LoRa® - -Arduino® brings LoRa® connectivity to your projects with several boards, addons and libraries. - -### Arduino® Boards with LoRa® Connectivity - -The MKR WAN [1300](https://store.arduino.cc/products/arduino-mkr-wan-1300-lora-connectivity) and [1310](https://store.arduino.cc/products/arduino-mkr-wan-1310) boards provide you with a practical and cost-effective solution to applications that require LoRa® connectivity and low-power consumption. The MKR WAN 1300 and 1310 boards are based on a [SAMD21 microcontroller](https://content.arduino.cc/assets/mkr-microchip_samd21_family_full_datasheet-ds40001882d.pdf) from Microchip®; they also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf) module from Murata® for LoRaWAN® connectivity, the [ATECC508](https://docs.arduino.cc/resources/datasheets/ATECC508A-datasheet.pdf) cryptoauthentication device for security, and a 2MB SPI Flash memory for onboard storage. - -![The Arduino® MKR WAN 1310 board.](assets/lorawan-101_img10.png) - -PRO hardware also has LoRaWAN® connectivity. The Arduino® [Portenta H7](https://store.arduino.cc/collections/boards/products/portenta-h7) board can have LoRaWAN® connectivity with the [Portenta Vision Shield LoRa®](https://store.arduino.cc/products/arduino-portenta-vision-shield-lora%C2%AE); this addon board also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN ® connectivity, the same module present in the MKR 1300 and 1310 boards. - -![The Arduino® Portenta Vision Shield LoRa®.](assets/lorawan-101_img11.png) - -The Arduino® [Edge Control](https://store.arduino.cc/products/arduino-edge-control), a remote monitoring and control solution optimized for outdoor environments, can expand its wireless connectivity capabilities by adding an MKR WAN 1300 or 1310 board. Edge Control can be positioned anywhere and is well suited for smart agriculture and other applications that require intelligent control in remote locations. - -![The Arduino® Edge Control.](assets/lorawan-101_img12.png) - -The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) transforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high-performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. - -![The Arduino® Max Carrier.](assets/lorawan-101_img14.png) - -### Arduino® Libraries for LoRa® Connectivity - -You can use several Arduino libraries with the CMCMWX1ZZABZ LoRa® module from Murata®; we recommend two: The [MKRWAN library](https://github.com/arduino-libraries/MKRWAN), developed by Arduino, and the [Arduino LoRa](https://github.com/sandeepmistry/arduino-LoRa) library, developed by Sandeep Mistry. The MKRWAN and the Arduino LoRa libraries provide you the APIs to communicate with LoRa® and LoRaWAN networks®. - -You can use both libraries in the Arduino IDE, [online](https://store.arduino.cc/digital/create) and [offline](https://www.arduino.cc/en/software). If you are using the online IDE, you don't need to do anything, both libraries are already installed and ready to be used. If you are using the offline IDE, you must install the libraries manually. Installing libraries can be done easily by navigating to **Tools > Manage Libraries...** and then look for **MKRWAN** library by Arduino and **LoRa** by Sandeep Mistry; **remember to install the latest version of the libraries**. - -***Currently, there are two versions of the MKRWAN library; MKRWAN_v2 library is still in beta.*** - -### Example: Sending and Receiving Data to a Network Server - -Using Arduino® hardware and software to communicate with LoRa® and LoRaWAN® networks is simple; let's check outan example. This example uses an MKR WAN 1310 board and the MKRWAN library to send data to a LoRaWAN® network, in this case, TTN. The circuit for this example is shown in the image below: - -![Circuit used in the example.](assets/lorawan-101_img13.png) - -Before sending and receiving messages from TTN, you need to register your board first to the network. For this, you need to know your board's `Device EUI`. You can get your board's `Device EUI` by running the `FirstConfiguration` example from the MKRWAN library. With your Device EUI, you can register your board in TTN by creating an account in TTN, adding an application, and registering your board. This [tutorial](https://www.thethingsnetwork.org/docs/devices/node/quick-start/) from TTN explains the process. - -Once your device is registered on TTN, you can start sending and receiving data with the following code: - -```arduino -/* - Send and receive data from a LoRaWAN network - This sketch demonstrates how to send and receive data with the MKR WAN 1300/1310 board. - This example code is in the public domain. -*/ - -#include -#include "arduino_secrets.h" - -LoRaModem modem; - -void setup() { - // Serial port initialization - Serial.begin(115200); - while (!Serial); - - // LoRa module initialization - // Initialize the modem with your regional band (eg. US915, AS923,...) - if (!modem.begin(EU868)) { - Serial.println("- Failed to start module"); - while (1) {} - }; - - // With the module initialized, we can get its version and device EUI - // Your network server provider requires device EUI information to connect to their network - Serial.print("- Your module version is: "); - Serial.println(modem.version()); - Serial.print("- Your device EUI is: "); - Serial.println(modem.deviceEUI()); - - // Join procedure to the network server - // OTAA method need appEUI and appKey, this information is provided by the network server - int connected = modem.joinOTAA(appEui, appKey); - if (!connected) { - Serial.println("- Something went wrong; are you indoor? Move near a window and retry..."); - while (1) {} - } - - // Set poll interval to 60 secs. - modem.minPollInterval(60); - - // NOTE: independent of this setting, the modem will not allow sending more than one message every 2 minutes - // This is enforced by firmware and can not be changed. -} - -void loop() { - Serial.println(); - Serial.println("- Enter a message to send to network"); - Serial.println("(make sure that end-of-line 'NL' is enabled)"); - - // Get message from Serial Monitor - while (!Serial.available()); - String msg = Serial.readStringUntil('\n'); - - // Show the sent message to the network in HEX format - Serial.println(); - Serial.print("- Sending: " + msg + " - "); - for (unsigned int i = 0; i < msg.length(); i++) { - Serial.print(msg[i] >> 4, HEX); - Serial.print(msg[i] & 0xF, HEX); - Serial.print(" "); - } - Serial.println(); - - // Check if the message was sent correctly or if there was an error - int err; - modem.beginPacket(); - modem.print(msg); - err = modem.endPacket(true); - if (err > 0) { - Serial.println("- Message sent correctly!"); - } else { - Serial.println("- Error sending message :("); - Serial.println("(- You may send a limited amount of messages per minute, depending on the signal strength"); - Serial.println("- It may vary from one message every couple of seconds to one message every minute)"); - } - - // Wait and check if there's a message sent from the network - delay(1000); - if (!modem.available()) { - Serial.println("- No downlink message received at this time"); - return; - } - - // If there's a message available, store it - char rcv[64]; - int i = 0; - while (modem.available()) { - rcv[i++] = (char)modem.read(); - } - - // Decode and show the received message from the network - Serial.print("- Received: "); - for (unsigned int j = 0; j < i; j++) { - Serial.print(rcv[j] >> 4, HEX); - Serial.print(rcv[j] & 0xF, HEX); - Serial.print(" "); - } - Serial.println(); -} -``` - -Check out more detailed tutorials we have about sending data between a MKR WAN board to TTN and between two MKR WAN boards; the tutorials can be found [here](https://docs.arduino.cc/hardware/mkr-wan-1310). - - -## Further Reading and Resources - -LoRa® and LoRaWAN® are pretty extensive but exciting topics to study. If you want to learn more about these technologies, check out the following links: - -- [The LoRa Alliance® Resource Hub](https://lora-alliance.org/resource-hub/). Here you can access LoRaWAN® technical documents and Whitepapers from The LoRa Alliance®. -- [LoRa Developer Portal from Semtech](https://lora-alliance.org/resource-hub/). Here you can find technical papers and user guides as well as specifications and datasheets from Semtech. -- [The Things Network documentation](https://www.thethingsnetwork.org/docs/). Here you can learn all about LoRaWAN® and The Things Network! +--- +title: 'The Arduino Guide to LoRa® and LoRaWAN®' +description: 'Learn the basics of LoRa® and LoRaWAN® and how to use them with Arduino hardware and software.' +tags: + - LoRa + - LoRaWAN + - MKR WAN 1310 +author: 'José Bagur, Taddy Chung' +--- + +The Internet of Things (IoT) is often referred to as a collection of objects connected to the Internet using **wireless networks**; these connected objects aim to collect and exchange information from their surroundings. **IoT enables a connection between the physical and the digital worlds**; that connection produces a massive amount of data that can be used for the **optimization** of resources and to improve the **efficiency** of existing systems. + +***By 2025, there will be more than 25 billion IoT devices connected to the Internet.*** + +Many of the existing IoT devices will be connected to the Internet using short-range wireless networks such as Wi-Fi®, Bluetooth®, ZigBee, Z-Wave®, etc. Cellular connections using networks such as 2G, 3G, and 4G will also connect IoT devices to the Internet. Still, these **short and medium-range wireless networks are not always suitable for IoT devices** since they were developed for applications where power consumption and battery life are not significant issues. **IoT devices usually have low-power consumption and send and receive low amounts of data**. + +## Low-Power Wide Area Networks + +**Low-Power Wide Area Networks** (LPWAN) is a group of wireless networks technologies well suited to the specific needs of IoT devices: **low-bandwidth** and **low-power** devices, usually battery-powered. This type of networks provide **low-bit rates** over **long ranges** with a **low-power** consumption. LPWAN's can accommodate data packets sizes from 10 bytes to 1 kB at uplink speeds up to 200 kbps; long-range connectivity varies from 2 to 1,000 km depending on the network technology. Most LPWAN's technologies have a **star topology**; this means that each device connects directly to a central access point. + +Some of the important use cases for LPWAN's include the following applications: + +- **Smart cities**: smart parking, intelligent street lighting +- **Supply chain management**: asset tracking, condition monitoring +- **Smart grids**: electricity, water, and gas metering +- **Smart agriculture**: land condition monitoring, animal tracking, geofencing + +***If you want to read more about LPWAN's, check out [this article](/learn/wireless/lorawan-101) from the Learn section.*** + +Several LPWAN technologies use **licensed** or **unlicensed frequencies** and and **proprietary** or **open** specifications. **LoRa®** and its Media Access Control (MAC) layer protocol implementation, **LoRaWAN®**, is currently one of the existing LPWAN gaining the most traction to support IoT devices and services. + +![Bandwidth vs. range of short distance, cellullar and LPWA networks. Image credits: The Things Network.](assets/lorawan-101_img01.png) + +## LoRa® and LoRaWAN® + +### What are LoRa® and LoRaWAN®? + +**LoRa®** is a **wireless modulation technique** derived from **Chirp Spread Spectrum** (CSS) technology. CSS uses wideband linear frequency modulated chirp pulses to encode information. LoRa® can operate on the following license-free sub-gigahertz ISM (Industrial, Scientific, and Medical) bands: **433 MHz**, **868 MHz**, and **915 MHz**. ISM bands are internationally reserved for industrial, scientific and, medical uses. + +***LoRa® modulation technique was invented in 2010 by the French startup Cycleo; then, it was acquired in 2012 by Semtech.*** + +Based on LoRa®, the **LoRaWAN®** (LoRa for Wide Area Networks) specification extended the LoRa® physical communication layer into the Internet by adding a **MAC layer**. The LoRaWAN® specification is a software layer that defines how devices must use the LoRa, for example, when they transmit or receive messages. The LoRaWAN specification is open-source; it has been supported and maintained by the LoRa Alliance® since 2015. + +***The LoRa Alliance® is an open, nonprofit organization that collaborates and shares experiences to promote and drive the success of the LoRaWAN® standard as the leading open global standard for secure IoT LPWAN connectivity.*** + +### LoRaWAN® Network Architecture + +A typical LoRaWAN® network architecture includes the following essential parts: **end-devices** (usually sensors), a base station or **gateway**, also known as Long Range Relay (LRR), a **network server** also known as Long Range Controller (LRC), and the **Operation Support System** (OSS) for provisioning and management of the network. + +![Typical LoRaWAN® network architecture example. Image credits: The Things Network.](assets/lorawan-101_img02.png) + +From the image above, notice there is a fundamental difference between a network server and a gateway. The **network server** controls the virtualized MAC layer of the LoRaWAN® network while **gateways** are devices pre-integrated with the network server to ease the LPWAN rollout and provisioning. LoRaWAN® network servers and gateways access can be public or private. + +***[The Things Network (TTN)](https://www.thethingsnetwork.org/) is a crowdsourced, open, and decentralized LoRaWAN® network server. This network is a great way to start testing devices, applications, integrations and get familiar with LoRaWAN®. To connect to TTN, you will need to be in the range of a gateway. Check the [world map](https://www.thethingsnetwork.org/map) to see if your local community already has a gateway installed; if not, consider installing one!*** + +LoRaWAN® networks are usually deployed in a **star-of-stars topology**; this means that **gateways manage data between end-devices and a network server**. Gateways are connected to the central network server via the Internet, while end-devices use LoRa® to send and receive data to and from the gateways; end-devices are not exclusively tied to a single gateway, end-devices broadcast information to all the gateways in range. Communication in LoRaWAN® networks is natively **bi-directional**, although uplink communication between end-devices and the central network server is expected to be predominant in the network. + +***Star networks topologies provide the best relationship between long-range communications, the number of gateways or base stations in the network, end-devices power consumption, and battery life.*** + +Star networks present several advantages compared to other network topologies: + +- Gateways can be added to the network anywhere and anytime without prior planning +- Message delivery is more robust since multiple gateways receive the same data packets during each uplink + +### Data Rates + +Communication between end-devices and gateways in LoRaWAN® networks is spread out on different **frequency channels** and **data rates** (communications using different data rates do not interfere with each other). + +***LoRa® supports data rates ranging from 300 bps to 5 kbps for a 125 kHz bandwidth.*** + +To maximize the battery life of each end-device and the overall capacity available through the network, LoRaWAN® uses an **Adaptive Data Rate** (ADR) mechanism for **optimizing data rates, airtime, and power consumption**. ADR controls the following transmission parameters on end-devices: + +- **Spreading factor**: the **speed of data transmission**. Lower spreading factors mean a higher data transmission rate +- **Bandwidth**: the **amount of data that can be transmitted** from one point to another within the network +- **Transmission power**: the energy that the end-device transmitter produces at its output + +The table below shows compares spreading factor, data rate, and time on-air at a bandwidth of 125 kHz (range is an indicative value, it will depend on the propagation conditions): + +| **Spreading Factor** | **Data Rate** | **Range** | **Time on-Air** | +|:----------------:|:---------:|:-----:|:-----------:| +| SF7 | 5470 bps | 2 km | 56 ms | +| SF8 | 3125 bps | 4 km | 100 ms | +| SF9 | 1760 bps | 6 km | 200 ms | +| SF10 | 980 bps | 8 km | 370 ms | +| SF11 | 440 bps | 11 km | 40 ms | +| SF12 | 290 bps | 14 km | 1400 ms | + +End-devices may transmit on any channel available at any time, using any available data rate, as long as the following rule is respected: + +- The end-device changes channel in a pseudo-random fashion for every transmission. The resulting frequency diversity makes the system more robust against interference + +Also, local regulations must be respected, for example: + +- In the EU868 band, the end-device must respect the maximum transmit duty cycle relative to the sub-band used and local regulations (1% for end-devices) +- In the US915 band, the end-device must respect the maximum transmit duration (or dwell time) relative to the sub-band used and local regulations (400ms) + +![LoRaWAN® network layers. Image credits: Semtech.](assets/lorawan-101_img03.png) + +### Regional Parameters + +The **LoRaWAN® Regional Parameters specification** is a companion to the LoRaWAN® network layer specification. While the LoRaWAN® network layer specification defines the air interface between a compliant end-device (sensor, actuator, tracker, etc.) and a compliant network core, the LoRaWAN® Regional Parameters specification defines the **adaptation of the LoRaWAN® network layer specification to comply with the various regulations enforced throughout the world on the use of various frequency bands of the unlicensed spectrum which are available**. + +Also, the LoRaWAN® Regional Parameters specification documents the **physical layer configurations required for the compliant operation of LoRaWAN® Link Layer radios** using various radio frequency modulation techniques. + +***The idea behind the LoRaWAN® Regional Parameters specification is to create the smallest number of regional channel plans covering the largest possible number of regulatory regions. With this, complexity is decreased to implementers as well as the certification cost (end-device certification is enumerated by network layer, Regional Parameters and channel plan revision).*** + +LoRaWAN® Regional Parameters specifications do not specify everything. They only cover a region by specifying the common denominator. For example, the LoRaWAN® Regional Parameters for Asia only specify a common subset of channels, but there are variations between regulations in Asian countries. Furthermore, each network server, for example TTN, is free to select additional parameters, such as additional emission channels. + +For more information, you can read the RP002-1.0.2 LoRaWAN® Regional Parameters document [here](https://lora-alliance.org/wp-content/uploads/2020/11/RP_2-1.0.2.pdf), we also have a more detailed tutorial about LoRaWAN® Regional Parameters and Arduino hardware; the tutorial can be found here [here](https://docs.arduino.cc/tutorials/mkr-wan-1310/lorawan-regional-parameters) + +### Classes + +The LoRaWAN® specification has **three** different communication profiles between devices and applications: **Class A**, **Class B**, and **Class C**. Each class serves different application needs and has optimized requirements for specific purposes. The main difference between the three classes is latency and power consumption; end-devices can always send uplinks when needed, but its class will determine when to receive downlinks. + +***All LoRaWAN devices must implement Class A; Class B, and Class C are extensions of Class A profile.*** + +#### Class A: "Aloha" + + +Class A devices implement a **bi-directional communication profile** where two short downlinks follow the end-device uplink transmission receive windows, usually referred to as RX1 and RX2. If the server does not respond in either RX1 or RX2 windows, the next opportunity will be after the next uplink transmission. Class A devices are often battery-powered and spend most of the time in sleep mode; therefore, they have the lowest energy consumption, keep long intervals between uplinks, and have high downlink latency. + +![Class A default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img04.png) + +#### Class B: The "Beaconing" Class + +Class B devices extend Class A devices by adding scheduled receive windows for downlinks, and, therefore, they **emulate a continuously receiving device by opening receive windows at fixed time intervals**. This class should be implemented when low latency of downlink communication while keeping the power consumption as low as possible is required. + +![Class B default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img05.png) + +#### Class C: Continuous Reception + +Class C communication profile is used in applications with enough power available, so there is no need to minimize the time of the reception windows; this is the case of most actuators (e.g., smart plugs, street lights, electrical meters, etc.) Class C devices always listen for downlinks messages unless they transmit an uplink message. This behavior results in the **lowest latency between the server and the end-device**. + +![Class C default configuration profile. Image credits: The Things Network.](assets/lorawan-101_img06.png) + +### Authentication and Security + +Authentication and security are also important in LoRaWAN® networks. Any LoRaWAN® network has a baseline authentication and security framework based on the AES 128 encryption scheme. Compared to other LPWAN's, which rely on a single key for authentication and encryption, the LoRaWAN® framework separates both. Authentication and integrity control use a **network session key** (NwkSKey) while user data encryption uses an **application session key** (AppSKey). + +***NwkSKey and AppSKey are AES-128 root keys specific to the end-device, end-devices manufacturers, or application owners assigned them.*** + +LoRaWAN® supports two authentication and activation methods: **Over-The-Air-Activation** (OTAA) and **Activation by Personalization** (ABP). + +- **Over-The-Air Activation (OTAA)**: In this method, end-devices are not initialized for any particular network; they send a JOIN request to a specific LoRaWAN® network and then receive a device address and an authorization token from which session keys are derived; NwkSKey and AppSKey are derived during this procedure from a root AppKey pre-provisioned in the end-devices by its manufacturer. + +![Over-The-Air activation process. Image credits: Heath Raftery.](assets/lorawan-101_img08.png) + +- **Activation by Personalization (ABP)**: In this method, end-devices are personalized to work with a given LoRaWAN® network. End-devices are pre-provisioned with the NwkSKey and AppSKey and the 32-bits device network address. + +![Activation by Personalization process. Image credits: Heath Raftery.](assets/lorawan-101_img09.png) + +***The recommended authentication and activation method is OTAA since it provides a high level of security; ABP method should be used only for specific situations.*** + +## Arduino® and LoRa® + +Arduino® brings LoRa® connectivity to your projects with several boards, addons and libraries. + +### Arduino® Boards with LoRa® Connectivity + +The MKR WAN [1300](https://store.arduino.cc/products/arduino-mkr-wan-1300-lora-connectivity) and [1310](https://store.arduino.cc/products/arduino-mkr-wan-1310) boards provide you with a practical and cost-effective solution to applications that require LoRa® connectivity and low-power consumption. The MKR WAN 1300 and 1310 boards are based on a [SAMD21 microcontroller](https://content.arduino.cc/assets/mkr-microchip_samd21_family_full_datasheet-ds40001882d.pdf) from Microchip®; they also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf) module from Murata® for LoRaWAN® connectivity, the [ATECC508](https://docs.arduino.cc/resources/datasheets/ATECC508A-datasheet.pdf) cryptoauthentication device for security, and a 2MB SPI Flash memory for onboard storage. + +![The Arduino® MKR WAN 1310 board.](assets/lorawan-101_img10.png) + +PRO hardware also has LoRaWAN® connectivity. The Arduino® [Portenta H7](https://store.arduino.cc/collections/boards/products/portenta-h7) board can have LoRaWAN® connectivity with the [Portenta Vision Shield LoRa®](https://store.arduino.cc/products/arduino-portenta-vision-shield-lora%C2%AE); this addon board also features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN ® connectivity, the same module present in the MKR 1300 and 1310 boards. + +![The Arduino® Portenta Vision Shield LoRa®.](assets/lorawan-101_img11.png) + +The Arduino® [Edge Control](https://store.arduino.cc/products/arduino-edge-control), a remote monitoring and control solution optimized for outdoor environments, can expand its wireless connectivity capabilities by adding an MKR WAN 1300 or 1310 board. Edge Control can be positioned anywhere and is well suited for smart agriculture and other applications that require intelligent control in remote locations. + +![The Arduino® Edge Control.](assets/lorawan-101_img12.png) + +The Arduino® [Portenta Max Carrier](https://store.arduino.cc/collections/boards/products/portenta-max-carrier) transforms Portenta boards, such as the [H7](https://store.arduino.cc/collections/pro-family/products/portenta-h7) and the [X8](https://store.arduino.cc/collections/pro-family/products/portenta-x8), into single-board computers, enabling edge AI for high-performance industrial, building automation, and robotics applications. The Max Carrier features a [CMCMWX1ZZABZ](https://content.arduino.cc/assets/mkrwan1310-murata_lora_module-type_abz.pdf?_gl=1*54znn6*_ga*NzQ5Mzk2MDcwLjE2MjU2MDQ2MjA.*_ga_NEXN8H46L5*MTY0MDAzOTY0Ny4yNTIuMS4xNjQwMDM5NzQ2LjA.) module from Murata® for LoRaWAN® connectivity. + +![The Arduino® Max Carrier.](assets/lorawan-101_img14.png) + +### Arduino® Libraries for LoRa® Connectivity + +You can use several Arduino libraries with the CMCMWX1ZZABZ LoRa® module from Murata®; we recommend two: The [MKRWAN library](https://github.com/arduino-libraries/MKRWAN), developed by Arduino, and the [Arduino LoRa](https://github.com/sandeepmistry/arduino-LoRa) library, developed by Sandeep Mistry. The MKRWAN and the Arduino LoRa libraries provide you the APIs to communicate with LoRa® and LoRaWAN networks®. + +You can use both libraries in the Arduino IDE, [online](https://store.arduino.cc/digital/create) and [offline](https://www.arduino.cc/en/software). If you are using the online IDE, you don't need to do anything, both libraries are already installed and ready to be used. If you are using the offline IDE, you must install the libraries manually. Installing libraries can be done easily by navigating to **Tools > Manage Libraries...** and then look for **MKRWAN** library by Arduino and **LoRa** by Sandeep Mistry; **remember to install the latest version of the libraries**. + +***Currently, there are two versions of the MKRWAN library; MKRWAN_v2 library is still in beta.*** + +### Example: Sending and Receiving Data to a Network Server + +Using Arduino® hardware and software to communicate with LoRa® and LoRaWAN® networks is simple; let's check outan example. This example uses an MKR WAN 1310 board and the MKRWAN library to send data to a LoRaWAN® network, in this case, TTN. The circuit for this example is shown in the image below: + +![Circuit used in the example.](assets/lorawan-101_img13.png) + +Before sending and receiving messages from TTN, you need to register your board first to the network. For this, you need to know your board's `Device EUI`. You can get your board's `Device EUI` by running the `FirstConfiguration` example from the MKRWAN library. With your Device EUI, you can register your board in TTN by creating an account in TTN, adding an application, and registering your board. This [tutorial](https://www.thethingsnetwork.org/docs/devices/node/quick-start/) from TTN explains the process. + +Once your device is registered on TTN, you can start sending and receiving data with the following code: + +```arduino +/* + Send and receive data from a LoRaWAN network + This sketch demonstrates how to send and receive data with the MKR WAN 1300/1310 board. + This example code is in the public domain. +*/ + +#include +#include "arduino_secrets.h" + +LoRaModem modem; + +void setup() { + // Serial port initialization + Serial.begin(115200); + while (!Serial); + + // LoRa module initialization + // Initialize the modem with your regional band (eg. US915, AS923,...) + if (!modem.begin(EU868)) { + Serial.println("- Failed to start module"); + while (1) {} + }; + + // With the module initialized, we can get its version and device EUI + // Your network server provider requires device EUI information to connect to their network + Serial.print("- Your module version is: "); + Serial.println(modem.version()); + Serial.print("- Your device EUI is: "); + Serial.println(modem.deviceEUI()); + + // Join procedure to the network server + // OTAA method need appEUI and appKey, this information is provided by the network server + int connected = modem.joinOTAA(appEui, appKey); + if (!connected) { + Serial.println("- Something went wrong; are you indoor? Move near a window and retry..."); + while (1) {} + } + + // Set poll interval to 60 secs. + modem.minPollInterval(60); + + // NOTE: independent of this setting, the modem will not allow sending more than one message every 2 minutes + // This is enforced by firmware and can not be changed. +} + +void loop() { + Serial.println(); + Serial.println("- Enter a message to send to network"); + Serial.println("(make sure that end-of-line 'NL' is enabled)"); + + // Get message from Serial Monitor + while (!Serial.available()); + String msg = Serial.readStringUntil('\n'); + + // Show the sent message to the network in HEX format + Serial.println(); + Serial.print("- Sending: " + msg + " - "); + for (unsigned int i = 0; i < msg.length(); i++) { + Serial.print(msg[i] >> 4, HEX); + Serial.print(msg[i] & 0xF, HEX); + Serial.print(" "); + } + Serial.println(); + + // Check if the message was sent correctly or if there was an error + int err; + modem.beginPacket(); + modem.print(msg); + err = modem.endPacket(true); + if (err > 0) { + Serial.println("- Message sent correctly!"); + } else { + Serial.println("- Error sending message :("); + Serial.println("(- You may send a limited amount of messages per minute, depending on the signal strength"); + Serial.println("- It may vary from one message every couple of seconds to one message every minute)"); + } + + // Wait and check if there's a message sent from the network + delay(1000); + if (!modem.available()) { + Serial.println("- No downlink message received at this time"); + return; + } + + // If there's a message available, store it + char rcv[64]; + int i = 0; + while (modem.available()) { + rcv[i++] = (char)modem.read(); + } + + // Decode and show the received message from the network + Serial.print("- Received: "); + for (unsigned int j = 0; j < i; j++) { + Serial.print(rcv[j] >> 4, HEX); + Serial.print(rcv[j] & 0xF, HEX); + Serial.print(" "); + } + Serial.println(); +} +``` + +Check out more detailed tutorials we have about sending data between a MKR WAN board to TTN and between two MKR WAN boards; the tutorials can be found [here](https://docs.arduino.cc/hardware/mkr-wan-1310). + + +## Further Reading and Resources + +LoRa® and LoRaWAN® are pretty extensive but exciting topics to study. If you want to learn more about these technologies, check out the following links: + +- [The LoRa Alliance® Resource Hub](https://lora-alliance.org/resource-hub/). Here you can access LoRaWAN® technical documents and Whitepapers from The LoRa Alliance®. +- [LoRa Developer Portal from Semtech](https://lora-alliance.org/resource-hub/). Here you can find technical papers and user guides as well as specifications and datasheets from Semtech. +- [The Things Network documentation](https://www.thethingsnetwork.org/docs/). Here you can learn all about LoRaWAN® and The Things Network! <<<<<<< HEAD >>>>>>> 3b9dfe7b (Update tutorial content) =======