-
Notifications
You must be signed in to change notification settings - Fork 528
Description
Hello there,
I am trying to get the RAK11300 integrated module working using the "normal" Arduino Pico Framework ( https://github.com/earlephilhower/arduino-pico/ ) and the latest dev/master commit from this library.
The RAK11300 is a module directly wiring an RP2040 core to SX1262 module ( https://docs.rakwireless.com/Product-Categories/WisDuo/RAK11300-Module/Datasheet/#description ). The description is sadly very vague, but I got more information to work with (especially the link between the RP2040 core and the SX1262): https://forum.rakwireless.com/t/rak11300-pinout-rp2040-to-sx1262/8414
Most important infos are here:
SPI_SCLK = 10; // LORA SPI CLK
SPI_MOSI = 11; // LORA SPI MOSI
SPI_MISO = 12; // LORA SPI MISO
SPI_NSS = 13; // LORA SPI CS
RESET = 14; // LORA RESET
BUSY = 15; // LORA SPI BUSY
TXEN = -1; // LORA ANTENNA TX ENABLE (e.g. eByte E22 module)
RXEN = 25; // LORA ANTENNA RX ENABLE (e.g. eByte E22 module)
DIO1 = 29;
The antenna switch direction is controlled by the SX1262 itself through DIO2.
The antenna switch power is controlled with GPIO25
It uses an TCXO
With that, I used the default example as shown.
Note that I had to re-configure the SPI1 interface, as its usually on different GPIOs on a stock RP2040.
With this, the module intializes successfully, however, trying to OTAA on TTN either with
a) 1.0.2, Reg Rev B (with AppKey set to false)
b) 1.1.0, Reg Rev B (with AppKey)
both does generate successful join-accept messages and forwards join-accept messages - however, the RAK11300 always ends up with a failed oota code -6
I am not sure yet if this is an error as shown in #858 - or if its something about the RXEN that needs to be setup. I can hardwire the RXEN to HIGH or LOW - it does not change anything in the result (Update 2023-11-03: Actually I figured out RXEN is really controlling the power to the antenna switch. No matter if TX or RX (direction is controlled by DIO2 of the SX1262 directly) - if you want to do any transmission/receive you need to put GPIO25 as OUTPUT and pull it HIGH. More info and references to the source code here: https://www.nico-maas.de/?p=2607 - Update to the Antenna Switch / GPIO25)
As additional infos, here is the official repo which builds just for Arduino Mbed:
https://github.com/RAKWireless/RAK-RP-Arduino/tree/main
And there is also an AT firmware that can be built
https://github.com/RAKWireless/RAK11300-AT-Command-Firmware/tree/main/RAK11300-AT-Arduino
The AT firmware works without issues on the RAK11300 and successfully joins.
Maybe you have an idea what I am doing wrong?
Thanks!
EDIT: Some additional infos in my blog post: https://www.nico-maas.de/?p=2607
Debug:
[SX1262] Initializing ...
RadioLib Debug Info
Version: 6.2.0.0
Platform: Raspberry Pi Pico (unofficial)
Compiled: Nov 2 2023 19:40:26
CMDW 80
SI 0
SO AA
CMDW 80
SI 0
SO A2
CMDR C0
SI 0
SO 22
CMDR 1D 3 20
SI 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
SO A2 53 58 31 32 36 31 20 56 32 44 20 32 44 30 32 0
Found SX126x: RADIOLIB_SX126X_REG_VERSION_STRING:
0000320 53 58 31 32 36 31 20 56 32 44 20 32 44 30 32 00 | SX1261 V2D 2D02.
M SX126x
CMDW 80
SI 0
SO AA
CMDW 80
SI 0
SO A2
CMDR C0
SI 0
SO 22
CMDW 80
SI 0
SO A2
CMDR C0
SI 0
SO 22
CMDW 80
SI 0
SO A2
CMDR C0
SI 0
SO 22
CMDR 17
SI 0 0 0
SO A2 0 20
CMDR C0
SI 0
SO 22
CMDW 7
SI 0 0
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW 97
SI 0 0 1 40
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 8F
SI 0 0
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW 8A
SI 1
SO A2
CMDR C0
SI 0
SO 22
CMDW 93
SI 20
SO A2
CMDR C0
SI 0
SO 22
CMDW 88
SI 3 16 A 0 0 0 0
SO A2 A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 2
SI 43 FF
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW 8
SI 0 0 0 0 0 0 0 0
SO A2 A2 A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 89
SI 7F
SO A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW 8B
SI 9 6 3 0
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW D 7 40
SI 14 24
SO A2 A2
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 1D 7 36
SI 0 0
SO A2 D
CMDR C0
SI 0
SO 22
CMDW D 7 36
SI D
SO A2
CMDW 8C
SI 0 8 0 FF 1 0
SO A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 96
SI 1
SO A2
CMDR C0
SI 0
SO 22
CMDW D 8 E7
SI 18
SO A2
CMDW 9D
SI 1
SO A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 1D 7 36
SI 0 0
SO A2 D
CMDR C0
SI 0
SO 22
CMDW D 7 36
SI D
SO A2
CMDW 8C
SI 0 8 0 FF 1 0
SO A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 1D 7 36
SI 0 0
SO A2 D
CMDR C0
SI 0
SO 22
CMDW D 7 36
SI D
SO A2
CMDW 8C
SI 0 8 0 FF 1 0
SO A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW 8B
SI 9 6 3 0
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW 8B
SI 9 4 3 0
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 98
SI 6B 6F
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW 86
SI 1B 20 0 0
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 1D 8 D8
SI 0 0
SO A2 C8
CMDR C0
SI 0
SO 22
CMDW D 8 D8
SI DE
SO A2
CMDR 1D 8 E7
SI 0 0
SO A2 18
CMDR C0
SI 0
SO 22
CMDW 95
SI 4 7 0 1
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 8E
SI A 4
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW D 8 E7
SI 18
SO A2
success init!
[LoRaWAN] Attempting over-the-air activation ... CMDR 1D 8 E7
SI 0 0
SO A2 18
CMDR C0
SI 0
SO 22
CMDW 95
SI 4 7 0 1
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 8E
SI 10 4
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW D 8 E7
SI 18
SO A2
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW D 7 40
SI 34 44
SO A2 A2
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 1D 7 36
SI 0 0
SO A2 D
CMDR C0
SI 0
SO 22
CMDW D 7 36
SI D
SO A2
CMDW 8C
SI 0 8 0 FF 1 0
SO A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 1D 8 E2
SI 0 0
SO A2 C
CMDW D 8 E2
SI C
SO A2
CMDR 1D 8 E2
SI 0 0
SO A2 C
CMDR 1D 8 E5
SI 0 0
SO A2 20
CMDW D 8 E5
SI 20
SO A2
CMDR 1D 8 E5
SI 0 0
SO A2 20
CMDW 82
SI FF FF FF
SO A2 A2 A2
CMDR 1D 8 19
SI 0 0
SO D2 AA
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 29
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 95
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 80
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 D3
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 61
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 B3
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 D6
CMDR C0
SI 0
SO 52
CMDW 80
SI 0
SO D2
CMDR C0
SI 0
SO 22
CMDR 1D 8 E2
SI 0 0
SO A2 C
CMDW D 8 E2
SI D
SO A2
CMDR 1D 8 E2
SI 0 0
SO A2 D
CMDR 1D 8 E5
SI 0 0
SO A2 20
CMDW D 8 E5
SI 21
SO A2
CMDR 1D 8 E5
SI 0 0
SO A2 21
CMDR 1D 8 E2
SI 0 0
SO A2 D
CMDW D 8 E2
SI C
SO A2
CMDR 1D 8 E2
SI 0 0
SO A2 C
CMDR 1D 8 E5
SI 0 0
SO A2 21
CMDW D 8 E5
SI 20
SO A2
CMDR 1D 8 E5
SI 0 0
SO A2 20
CMDW 82
SI FF FF FF
SO A2 A2 A2
CMDR 1D 8 19
SI 0 0
SO D2 53
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 65
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 A2
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 D5
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 DD
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 9A
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 AA
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 55
CMDR C0
SI 0
SO 52
CMDW 80
SI 0
SO D2
CMDR C0
SI 0
SO 22
CMDR 1D 8 E2
SI 0 0
SO A2 C
CMDW D 8 E2
SI D
SO A2
CMDR 1D 8 E2
SI 0 0
SO A2 D
CMDR 1D 8 E5
SI 0 0
SO A2 20
CMDW D 8 E5
SI 21
SO A2
CMDR 1D 8 E5
SI 0 0
SO A2 21
CMDR 1D 8 E2
SI 0 0
SO A2 D
CMDW D 8 E2
SI C
SO A2
CMDR 1D 8 E2
SI 0 0
SO A2 C
CMDR 1D 8 E5
SI 0 0
SO A2 21
CMDW D 8 E5
SI 20
SO A2
CMDR 1D 8 E5
SI 0 0
SO A2 20
CMDW 82
SI FF FF FF
SO A2 A2 A2
CMDR 1D 8 19
SI 0 0
SO D2 29
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 34
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 54
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 D9
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 AD
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 10
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 A1
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 A6
CMDR C0
SI 0
SO 52
CMDW 80
SI 0
SO D2
CMDR C0
SI 0
SO 22
CMDR 1D 8 E2
SI 0 0
SO A2 C
CMDW D 8 E2
SI D
SO A2
CMDR 1D 8 E2
SI 0 0
SO A2 D
CMDR 1D 8 E5
SI 0 0
SO A2 20
CMDW D 8 E5
SI 21
SO A2
CMDR 1D 8 E5
SI 0 0
SO A2 21
CMDR 1D 8 E2
SI 0 0
SO A2 D
CMDW D 8 E2
SI C
SO A2
CMDR 1D 8 E2
SI 0 0
SO A2 C
CMDR 1D 8 E5
SI 0 0
SO A2 21
CMDW D 8 E5
SI 20
SO A2
CMDR 1D 8 E5
SI 0 0
SO A2 20
CMDW 82
SI FF FF FF
SO A2 A2 A2
CMDR 1D 8 19
SI 0 0
SO D2 A2
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 4B
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 57
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 6B
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 A5
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 8A
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 A4
CMDR C0
SI 0
SO 52
CMDR 1D 8 19
SI 0 0
SO D2 3
CMDR C0
SI 0
SO 52
CMDW 80
SI 0
SO D2
CMDR C0
SI 0
SO 22
CMDR 1D 8 E2
SI 0 0
SO A2 C
CMDW D 8 E2
SI D
SO A2
CMDR 1D 8 E2
SI 0 0
SO A2 D
CMDR 1D 8 E5
SI 0 0
SO A2 20
CMDW D 8 E5
SI 21
SO A2
CMDR 1D 8 E5
SI 0 0
SO A2 21
Channel frequency UL = 868.300 MHz
CMDW 98
SI D7 DB
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW 86
SI 36 44 CC C0
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW 8B
SI C 4 3 1
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW 8B
SI C 4 3 1
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW 8B
SI C 4 3 1
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 80
SI 0
SO A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
Timeout in 2715648 us
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 1D 7 36
SI 0 0
SO A2 D
CMDR C0
SI 0
SO 22
CMDW D 7 36
SI D
SO A2
CMDW 8C
SI 0 8 0 17 1 0
SO A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 8
SI 2 1 0 1 0 0 0 0
SO A2 A2 A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 8F
SI 0 0
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW E 0
SI 0 E6 60 84 51 53 63 78 23 23 78 63 53 51 84 60 E6 0 0 8D BA 94 D6
SO A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 2
SI 43 FF
SO A2 A2
CMDR C0
SI 0
SO 22
CMDR 1D 8 89
SI 0 0
SO A2 4
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW D 8 89
SI 4
SO A2
CMDW 83
SI 0 0 0
SO A2 A2 A2
CMDR C0
SI 0
SO 62
CMDW 2
SI 43 FF
SO AC AC
CMDR C0
SI 0
SO 2C
CMDW 80
SI 0
SO AC
CMDR C0
SI 0
SO 22
Channel frequency DL = 868.300 MHz
CMDW 98
SI D7 DB
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW 86
SI 36 44 CC C0
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW 8B
SI C 4 3 1
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW 8B
SI C 4 3 1
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDW 8B
SI C 4 3 1
SO A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 1D 7 36
SI 0 0
SO A2 D
CMDR C0
SI 0
SO 22
CMDW D 7 36
SI 9
SO A2
CMDW 8C
SI 0 8 0 FF 1 1
SO A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 8
SI 2 62 0 2 0 0 0 0
SO A2 A2 A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 8F
SI 0 0
SO A2 A2
CMDR C0
SI 0
SO 22
CMDW 2
SI 43 FF
SO A2 A2
CMDR C0
SI 0
SO 22
CMDR 11
SI 0 0
SO A2 1
CMDR C0
SI 0
SO 22
CMDR 1D 7 36
SI 0 0
SO A2 9
CMDR C0
SI 0
SO 22
CMDW D 7 36
SI 9
SO A2
CMDW 8C
SI 0 8 0 FF 1 1
SO A2 A2 A2 A2 A2 A2
CMDR C0
SI 0
SO 22
CMDW 82
SI FF FF FF
SO A2 A2 A2
CMDR 11
SI 0 0
SO D2 1
CMDR C0
SI 0
SO 52
CMDR 1D 7 36
SI 0 0
SO D2 9
CMDR C0
SI 0
SO 52
CMDW D 7 36
SI D
SO D2
CMDW 8C
SI 0 8 0 FF 1 0
SO D2 D2 D2 D2 D2 D2
CMDR C0
SI 0
SO 52
failed oota, code -6
Code:
// include the library
#include <RadioLib.h>
/*
cs : NSS pin [OPTIONAL, default=13]
irq : DIO1 pin [OPTIONAL, default=29]
rst : RESET pin [OPTIONAL, default=14]
gpio : BUSY pin [OPTIONAL, default=15]
clk : SPI CLK pin [OPTIONAL, default=10]
mosi : SPI MOSI pin [OPTIONAL, default=11]
miso : SPI MISO pin [OPTIONAL, default=12]
rxen: 25
*/
SPISettings spiSettings(2000000, MSBFIRST, SPI_MODE0);
SX1262 radio = new Module(13, 29, 14, 15, SPI1, spiSettings);
LoRaWANNode node(&radio, &EU868);
void setup() {
Serial.begin(9600);
SPI1.setSCK(10);
SPI1.setTX(11);
SPI1.setRX(12);
SPI1.begin(false);
/*
// enable antenna switch power(?)
pinMode(25, OUTPUT);
digitalWrite(25, HIGH);
*/
delay(3000);
Serial.print(F("[SX1262] Initializing ... "));
int state = radio.begin();
if(state == RADIOLIB_ERR_NONE) {
Serial.println(F("success init!"));
} else {
Serial.print(F("failed init, code "));
Serial.println(state);
while(true);
}
// first we need to initialize the device storage
// this will reset all persistently stored parameters
// NOTE: This should only be done once prior to first joining a network!
// After wiping persistent storage, you will also have to reset
// the end device in TTN and perform the join procedure again!
//node.wipe();
// application identifier - pre-LoRaWAN 1.1.0, this was called appEUI
// when adding new end device in TTN, you will have to enter this number
// you can pick any number you want, but it has to be unique
uint64_t joinEUI = 0x23...;
// device identifier - this number can be anything
// when adding new end device in TTN, you can generate this number,
// or you can set any value you want, provided it is also unique
uint64_t devEUI = 0xE6....;
// select some encryption keys which will be used to secure the communication
// there are two of them - network key and application key
// because LoRaWAN uses AES-128, the key MUST be 16 bytes (or characters) long
uint8_t nwkKey[] = {0xE6,....};
uint8_t appKey[] = {0xE6,....};
// prior to LoRaWAN 1.1.0, only a single "nwkKey" is used
// when connecting to LoRaWAN 1.0 network, "appKey" will be disregarded
// and can be set to NULL
// some frequency bands only use a subset of the available channels
// you can set the starting channel and their number
// for example, the following corresponds to US915 FSB2 in TTN
/*
node.startChannel = 8;
node.numChannels = 8;
*/
// now we can start the activation
// this can take up to 20 seconds, and requires a LoRaWAN gateway in range
Serial.print(F("[LoRaWAN] Attempting over-the-air activation ... "));
state = node.beginOTAA(joinEUI, devEUI, nwkKey, appKey);
//state = node.beginOTAA(joinEUI, devEUI, nwkKey, NULL);
if(state == RADIOLIB_ERR_NONE) {
Serial.println(F("success oota!"));
while(true);
} else {
Serial.print(F("failed oota, code "));
Serial.println(state);
while(true);
}
/*
// after the device has been activated,
// network can be rejoined after device power cycle
// by calling "begin"
Serial.print(F("[LoRaWAN] Resuming previous session ... "));
state = node.begin();
if(state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
} else {
Serial.print(F("failed, code "));
Serial.println(state);
while(true);
}
*/
}
// counter to keep track of transmitted packets
int count = 0;
void loop() {
// send uplink to port 10
Serial.print(F("[LoRaWAN] Sending uplink packet ... "));
String strUp = "Hello World! #" + String(count++);
int state = node.uplink(strUp, 10);
if(state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
} else {
Serial.print(F("failed, code "));
Serial.println(state);
}
// after uplink, you can call downlink(),
// to receive any possible reply from the server
// this function must be called within a few seconds
// after uplink to receive the downlink!
Serial.print(F("[LoRaWAN] Waiting for downlink ... "));
String strDown;
state = node.downlink(strDown);
if(state == RADIOLIB_ERR_NONE) {
Serial.println(F("success!"));
// print data of the packet (if there are any)
Serial.print(F("[LoRaWAN] Data:\t\t"));
if(strDown.length() > 0) {
Serial.println(strDown);
} else {
Serial.println(F("<MAC commands only>"));
}
// print RSSI (Received Signal Strength Indicator)
Serial.print(F("[LoRaWAN] RSSI:\t\t"));
Serial.print(radio.getRSSI());
Serial.println(F(" dBm"));
// print SNR (Signal-to-Noise Ratio)
Serial.print(F("[LoRaWAN] SNR:\t\t"));
Serial.print(radio.getSNR());
Serial.println(F(" dB"));
// print frequency error
Serial.print(F("[LoRaWAN] Frequency error:\t"));
Serial.print(radio.getFrequencyError());
Serial.println(F(" Hz"));
} else if(state == RADIOLIB_ERR_RX_TIMEOUT) {
Serial.println(F("timeout!"));
} else {
Serial.print(F("failed, code "));
Serial.println(state);
}
// wait before sending another packet
delay(10000);
}