119 lines
3.2 KiB
C++
119 lines
3.2 KiB
C++
#include "Sodaq_RN2483.h"
|
||
#include "Arduino.h"
|
||
|
||
#define debugSerial SerialUSB
|
||
#define loraSerial Serial1
|
||
|
||
|
||
|
||
void RED() {
|
||
digitalWrite(LED_RED, LOW);
|
||
digitalWrite(LED_GREEN, HIGH);
|
||
digitalWrite(LED_BLUE, HIGH);
|
||
}
|
||
|
||
void CLEAR() {
|
||
digitalWrite(LED_RED, HIGH);
|
||
digitalWrite(LED_GREEN, HIGH);
|
||
digitalWrite(LED_BLUE, HIGH);
|
||
}
|
||
|
||
// OTAA
|
||
// I took 0x02 here as device Id...
|
||
uint8_t DevEUI[8] = { 0x9c, 0xd9, 0x0b, 0xb5, 0x2b, 0x6a, 0x1d, 0x02 };
|
||
uint8_t AppEUI[8] = { 0xd4, 0x16, 0xcd, 0x0b, 0x7b, 0xcf, 0x2d, 0x5c };
|
||
uint8_t AppKey[16] = {0xa9, 0xbc, 0x8b, 0x6a, 0x81, 0x75, 0xf6, 0x33,
|
||
0xe0, 0xd6, 0x64, 0xd9, 0x2b, 0xcb, 0x13, 0x78 };
|
||
|
||
void setupLoRaOTAA(){
|
||
if (LoRaBee.initOTA(loraSerial, DevEUI, AppEUI, AppKey, true))
|
||
{
|
||
debugSerial.println("Communication to LoRaBEE successful.");
|
||
}
|
||
else
|
||
{
|
||
debugSerial.println("OTAA Setup failed!");
|
||
}
|
||
}
|
||
|
||
void setup() {
|
||
//Power up the LoRaBEE
|
||
pinMode(ENABLE_PIN_IO, OUTPUT); // ONE
|
||
digitalWrite(ENABLE_PIN_IO, HIGH); // ONE
|
||
pinMode(LED_RED, OUTPUT);
|
||
pinMode(LED_GREEN, OUTPUT);
|
||
pinMode(LED_BLUE, OUTPUT);
|
||
delay(3000);
|
||
|
||
while ((!SerialUSB) && (millis() < 10000)){
|
||
// Wait 10 seconds for the Serial Monitor
|
||
}
|
||
|
||
//Set baud rate
|
||
debugSerial.begin(57600);
|
||
loraSerial.begin(LoRaBee.getDefaultBaudRate());
|
||
|
||
// Debug output from LoRaBee
|
||
// LoRaBee.setDiag(debugSerial); // optional
|
||
|
||
//connect to the LoRa Network
|
||
setupLoRa();
|
||
}
|
||
|
||
void setupLoRa(){
|
||
// ABP
|
||
// setupLoRaABP();
|
||
// OTAA
|
||
setupLoRaOTAA();
|
||
}
|
||
|
||
void sendPacket(String packet){
|
||
switch (LoRaBee.sendReqAck(1, (uint8_t*)packet.c_str(), packet.length(), 8))
|
||
{
|
||
case NoError:
|
||
debugSerial.println("Successful transmission.");
|
||
break;
|
||
case NoResponse:
|
||
debugSerial.println("There was no response from the device.");
|
||
setupLoRa();
|
||
break;
|
||
case Timeout:
|
||
debugSerial.println("Connection timed-out. Check your serial connection to the device! Sleeping for 20sec.");
|
||
delay(20000);
|
||
break;
|
||
case PayloadSizeError:
|
||
debugSerial.println("The size of the payload is greater than allowed. Transmission failed!");
|
||
break;
|
||
case InternalError:
|
||
debugSerial.println("Oh No! This shouldn't happen. Something is really wrong! Try restarting the device!\r\nThe network connection will reset.");
|
||
setupLoRa();
|
||
break;
|
||
case Busy:
|
||
debugSerial.println("The device is busy. Sleeping for 10 extra seconds.");
|
||
delay(10000);
|
||
break;
|
||
case NetworkFatalError:
|
||
debugSerial.println("There is a non-recoverable error with the network connection. You should re-connect.\r\nThe network connection will reset.");
|
||
setupLoRa();
|
||
break;
|
||
case NotConnected:
|
||
debugSerial.println("The device is not connected to the network. Please connect to the network before attempting to send data.\r\nThe network connection will reset.");
|
||
setupLoRa();
|
||
break;
|
||
case NoAcknowledgment:
|
||
debugSerial.println("There was no acknowledgment sent back!");
|
||
// When you this message you are probaly out of range of the network.
|
||
break;
|
||
default:
|
||
break;
|
||
}
|
||
}
|
||
|
||
void loop() {
|
||
// put your main code here, to run repeatedly:
|
||
String packet = "SODAQ";
|
||
sendPacket(packet);
|
||
RED();
|
||
delay(5000);
|
||
CLEAR();
|
||
}
|