MKRWAN Examples

Examples for the MKRWAN library, which is used to communicate with the LoRa® module onboard the MKR WAN 1300/1310 boards.

These examples will show you how to set up your board to use the LoRa® network and how to send and receive data from the LoRa® network.

Hardware Required

Circuit

Connect the antenna to the board.
Connect the antenna to the board.

Examples

MKR WAN First Configuration

This example for a MKR WAN 1300 allows you to setup your board to use the LoRa® network.

1/*
2
3 First Configuration
4
5 This sketch demonstrates the usage of MKR WAN 1300/1310 LoRa module.
6
7 This example code is in the public domain.
8
9*/
10
11#include <MKRWAN.h>
12
13LoRaModem modem;
14
15// Uncomment if using the Murata chip as a module
16// LoRaModem modem(Serial1);
17
18String appEui;
19
20String appKey;
21
22String devAddr;
23
24String nwkSKey;
25
26String appSKey;
27
28void setup() {
29
30 // put your setup code here, to run once:
31
32 Serial.begin(115200);
33
34 while (!Serial);
35
36 Serial.println("Welcome to MKRWAN1300/1310 first configuration sketch");
37
38 Serial.println("Register to your favourite LoRa network and we are ready to go!");
39
40 // change this to your regional band (eg. US915, AS923, ...)
41
42 if (!modem.begin(EU868)) {
43
44 Serial.println("Failed to start module");
45
46 while (1) {}
47
48 };
49
50 Serial.print("Your module version is: ");
51
52 Serial.println(modem.version());
53
54 Serial.print("Your device EUI is: ");
55
56 Serial.println(modem.deviceEUI());
57
58 int mode = 0;
59
60 while (mode != 1 && mode != 2) {
61
62 Serial.println("Are you connecting via OTAA (1) or ABP (2)?");
63
64 while (!Serial.available());
65
66 mode = Serial.readStringUntil('\n').toInt();
67
68 }
69
70 int connected;
71
72 if (mode == 1) {
73
74 Serial.println("Enter your APP EUI");
75
76 while (!Serial.available());
77
78 appEui = Serial.readStringUntil('\n');
79
80 Serial.println("Enter your APP KEY");
81
82 while (!Serial.available());
83
84 appKey = Serial.readStringUntil('\n');
85
86 appKey.trim();
87
88 appEui.trim();
89
90 connected = modem.joinOTAA(appEui, appKey);
91
92 } else if (mode == 2) {
93
94 Serial.println("Enter your Device Address");
95
96 while (!Serial.available());
97
98 devAddr = Serial.readStringUntil('\n');
99
100 Serial.println("Enter your NWS KEY");
101
102 while (!Serial.available());
103
104 nwkSKey = Serial.readStringUntil('\n');
105
106 Serial.println("Enter your APP SKEY");
107
108 while (!Serial.available());
109
110 appSKey = Serial.readStringUntil('\n');
111
112 devAddr.trim();
113
114 nwkSKey.trim();
115
116 appSKey.trim();
117
118 connected = modem.joinABP(devAddr, nwkSKey, appSKey);
119
120 }
121
122 if (!connected) {
123
124 Serial.println("Something went wrong; are you indoor? Move near a window and retry");
125
126 while (1) {}
127
128 }
129
130 delay(5000);
131
132 int err;
133
134 modem.setPort(3);
135
136 modem.beginPacket();
137
138 modem.print("HeLoRA world!");
139
140 err = modem.endPacket(true);
141
142 if (err > 0) {
143
144 Serial.println("Message sent correctly!");
145
146 } else {
147
148 Serial.println("Error sending message :(");
149
150 }
151}
152
153void loop() {
154
155 while (modem.available()) {
156
157 Serial.write(modem.read());
158
159 }
160
161 modem.poll();
162}

MKR WAN Lora® Send and Receive

This sketch demonstrates how to send and receive data with the MKR WAN 1300 LoRa® module.

1/*
2
3 Lora Send And Receive
4
5 This sketch demonstrates how to send and receive data with the MKR WAN 1300/1310 LoRa module.
6
7 This example code is in the public domain.
8
9*/
10
11#include <MKRWAN.h>
12
13LoRaModem modem;
14
15// Uncomment if using the Murata chip as a module
16// LoRaModem modem(Serial1);
17
18#include "arduino_secrets.h"
19// Please enter your sensitive data in the Secret tab or arduino_secrets.h
20
21String appEui = SECRET_APP_EUI;
22
23String appKey = SECRET_APP_KEY;
24
25void setup() {
26
27 // put your setup code here, to run once:
28
29 Serial.begin(115200);
30
31 while (!Serial);
32
33 // change this to your regional band (eg. US915, AS923, ...)
34
35 if (!modem.begin(EU868)) {
36
37 Serial.println("Failed to start module");
38
39 while (1) {}
40
41 };
42
43 Serial.print("Your module version is: ");
44
45 Serial.println(modem.version());
46
47 Serial.print("Your device EUI is: ");
48
49 Serial.println(modem.deviceEUI());
50
51 int connected = modem.joinOTAA(appEui, appKey);
52
53 if (!connected) {
54
55 Serial.println("Something went wrong; are you indoor? Move near a window and retry");
56
57 while (1) {}
58
59 }
60
61 // Set poll interval to 60 secs.
62
63 modem.minPollInterval(60);
64
65 // NOTE: independently by this setting the modem will
66
67 // not allow to send more than one message every 2 minutes,
68
69 // this is enforced by firmware and can not be changed.
70}
71
72void loop() {
73
74 Serial.println();
75
76 Serial.println("Enter a message to send to network");
77
78 Serial.println("(make sure that end-of-line 'NL' is enabled)");
79
80 while (!Serial.available());
81
82 String msg = Serial.readStringUntil('\n');
83
84 Serial.println();
85
86 Serial.print("Sending: " + msg + " - ");
87
88 for (unsigned int i = 0; i < msg.length(); i++) {
89
90 Serial.print(msg[i] >> 4, HEX);
91
92 Serial.print(msg[i] & 0xF, HEX);
93
94 Serial.print(" ");
95
96 }
97
98 Serial.println();
99
100 int err;
101
102 modem.beginPacket();
103
104 modem.print(msg);
105
106 err = modem.endPacket(true);
107
108 if (err > 0) {
109
110 Serial.println("Message sent correctly!");
111
112 } else {
113
114 Serial.println("Error sending message :(");
115
116 Serial.println("(you may send a limited amount of messages per minute, depending on the signal strength");
117
118 Serial.println("it may vary from 1 message every couple of seconds to 1 message every minute)");
119
120 }
121
122 delay(1000);
123
124 if (!modem.available()) {
125
126 Serial.println("No downlink message received at this time.");
127
128 return;
129
130 }
131
132 char rcv[64];
133
134 int i = 0;
135
136 while (modem.available()) {
137
138 rcv[i++] = (char)modem.read();
139
140 }
141
142 Serial.print("Received: ");
143
144 for (unsigned int j = 0; j < i; j++) {
145
146 Serial.print(rcv[j] >> 4, HEX);
147
148 Serial.print(rcv[j] & 0xF, HEX);
149
150 Serial.print(" ");
151
152 }
153
154 Serial.println();
155}

Suggest changes

The content on docs.arduino.cc is facilitated through a public GitHub repository. If you see anything wrong, you can edit this page here.

License

The Arduino documentation is licensed under the Creative Commons Attribution-Share Alike 4.0 license.