WisNode LoRa

De The Things Network Catalunya Wiki
Jump to navigation Jump to search

Introducció


Requeriments


Exemple

/*

WISNODE-LORA example for Arduino Leonardo

Copyright (C) 2018
Xose Pérez <xose dot perez at gmail dot com>
for The Things Network Catalunya Wiki (http://thethingsnetwork.cat)

Requires RAK811 library (https://github.com/RAKWireless/RAK811-AT-Command/tree/master/Arduino/RAK811)

NOTA: 
L'Arduino Leonardo és una placa que treballa a 5V
Per connectar-la al WisNode-LoRa s'ha de modificar la configuració de jumpers
per fer que RX i TX passing per un conversor de nivells 5V<->3V3
Cal treure els jumpers del connector P5 i connectar-los al P6 així:

* TXD <-> 5_3R
* RXD <-> 5_3T

*/

#include "RAK811.h"

// -----------------------------------------------------------------------------
// Configuració
// -----------------------------------------------------------------------------

#define SEND_EVERY      60000   // Envia un missatge cada 60s
#define WORK_MODE       LoRaWAN // Mode LoRaWan
#define JOIN_MODE       OTAA    // OTAA or ABP

#if JOIN_MODE == ABP
    #define NWKSKEY     ""      // Configura el teu dispositiu amb les dades de TTN
    #define APPSKEY     ""      // Configura el teu dispositiu amb les dades de TTN
    #define DEVADDR     ""      // Configura el teu dispositiu amb les dades de TTN
#endif

#if JOIN_MODE == OTAA
    #define DEVEUI      ""      // Configura el teu dispositiu amb les dades de TTN
    #define APPEUI      ""      // Configura el teu dispositiu amb les dades de TTN
    #define APPKEY      ""      // Configura el teu dispositiu amb les dades de TTN
#endif


// -----------------------------------------------------------------------------

// L'Arduno Leonardo fa servir Serial per l'USB i
// Serial1 per els GPIO RX i TX de la capçalera
RAK811 rak811(Serial1);

// Valor a enviar
byte counter = 0;

// -----------------------------------------------------------------------------

void setup() {

    // Inicialitzem el pport de debug (USB)
    Serial.begin(115200);
    while (!Serial);
    Serial.println("WisNode-LoRa example @ttncat");

    // Inicialitzem l'UART al mòdul RAK811
    Serial1.begin(115200);

    Serial.print("Versió del mòdul: ");
    Serial.println(rak811.rk_getVersion());
    Serial.print("Banda: ");
    Serial.println(rak811.rk_getBand());

    Serial.println("Mode de treball LoRaWan");
    if (!rak811.rk_setWorkingMode(WORK_MODE)) {
        Serial.println("Error configurar el mode de treball");
        while(true);
    }

    #if JOIN_MODE == OTAA
        Serial.println("Configurant OTAA");
        if (!rak811.rk_initOTAA(DEVEUI, APPEUI, APPKEY)) {
            Serial.println("Error en els paràmetres de configuració");
            while(true);
        }
    #endif

    #if JOIN_MODE == ABP
        Serial.println("Configurant ABP");
        if (!rak811.rk_initABP(DEVADDR, NWKSKEY, APPSKEY)) {
            Serial.println("Error en els paràmetres de configuració");
            while(true);
        }
    #endif

    Serial.println("Connectant");
    if (!rak811.rk_joinLoRaNetwork(JOIN_MODE)) {
        Serial.println("Error connectant-se a la xarxa");
        return;
    }

    Serial1.setTimeout(8000);
    String response = Serial1.readStringUntil('\n');
    Serial.print("Responsta: ");
    Serial.println(response);

    if (!response.startsWith(STATUS_JOINED_SUCCESS)) {
        Serial.println("Resposta incorrecte");
        while(true);
    }
    Serial.println("Connectat!!");

}

void loop() {

    static unsigned long last = 0;
    if ((last == 0) || (millis() - last > SEND_EVERY)) {
        last = millis();

        // Al missatge ha de ser un string d'hexadecimals
        char buffer[3];
        snprintf(buffer, sizeof(buffer), "%02X", counter++);

        // Enviant missatge
        if (rak811.rk_sendData(1, 1, buffer)) {
            Serial.println("Missatge enviat, resposta: ");
            Serial.println(rak811.rk_recvData());
        } else {
            Serial.println("Error enviant missatge :(");
        }

    }

}