처음‎ > ‎지식기반‎ > ‎

LoRa Setup (draft)

게시자: Sundew Shin, 2017. 2. 20. 오전 5:47   [ 2017. 2. 22. 오전 12:06에 업데이트됨 ]


[TTN]



[Gateway]
MTAC-LORA



RFM95W Module

[Aruino Library]

[Hardware Connection]


8 - DIO0
9 - RESET
10 - NSS
11 - MOSI
12 - MISO
13 - SCK
3.3 - 3.3
GND - GND

[Adafruit Manual]


[Sample Code]



[Actual Code Tested]
The Things Network - 

#include <lmic.h>
#include <hal/hal.h>

static const u1_t NWKSKEY[16] = { 0xA5, 0x93, 0xAB, 0x6D, 0xC8, 0xFB, 0xB0, 0x23, 0xF2, 0x6F, 0x2C, 0xDB, 0x4F, 0xC3, 0x0E, 0x78 };
static const u1_t APPSKEY[16] = { 0x76, 0x75, 0xE8, 0x86, 0x79, 0x10, 0xAF, 0xB8, 0x29, 0xAC, 0x70, 0xA8, 0xEF, 0x2C, 0x65, 0x55 };
static const u4_t DEVADDR = 0x260118E1;

// These callbacks are only used in over-the-air activation, so they are
// left empty here (we cannot leave them out completely unless
// DISABLE_JOIN is set in config.h, otherwise the linker will complain).
void os_getArtEui (u1_t* buf) { }
void os_getDevEui (u1_t* buf) { }
void os_getDevKey (u1_t* buf) { }

static osjob_t sendjob;

// Schedule TX every this many seconds (might become longer due to duty
// cycle limitations).
const unsigned TX_INTERVAL = 20;

// Pin mapping Dragino Shield
const lmic_pinmap lmic_pins = {
    .nss = 10,
    .rxtx = LMIC_UNUSED_PIN,
    .rst = 9,
    .dio = {8, 11, 12},
};
void onEvent (ev_t ev) {
    if (ev == EV_TXCOMPLETE) {
        Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)"));
        // Schedule next transmission
        //os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send);
        delay(100);
        do_send(&sendjob);
    }
}

void do_send(osjob_t* j){
    // Payload to send (uplink)
    static uint8_t message[] = "hi";

    // Check if there is not a current TX/RX job running
    if (LMIC.opmode & OP_TXRXPEND) {
        Serial.println(F("OP_TXRXPEND, not sending"));
    } else {
        // Prepare upstream data transmission at the next possible time.
        LMIC_setTxData2(1, message, sizeof(message)-1, 0);
        Serial.println(F("Sending uplink packet..."));
    }
    // Next TX is scheduled after TX_COMPLETE event.
}

void setup() {
    Serial.begin(115200);
    Serial.println(F("Starting..."));

    // LMIC init
    os_init();

    // Reset the MAC state. Session and pending data transfers will be discarded.
    LMIC_reset();

    // Set static session parameters.
    LMIC_setSession (0x1, DEVADDR, NWKSKEY, APPSKEY);

    // Disable link check validation
    LMIC_setLinkCheckMode(0);

    // TTN uses SF9 for its RX2 window.
    LMIC.dn2Dr = DR_SF9;

    // Set data rate and transmit power for uplink (note: txpow seems to be ignored by the library)
    LMIC_setDrTxpow(DR_SF9,14);

    // Start job
    do_send(&sendjob);
}

void loop() {
    os_runloop_once();
}

Comments