https://www.thethingsnetwork.org/forum/t/connecting-arduino-with-rfm95-to-ttn-via-multitech-aep/5557 [TTN] [Gateway] MTAC-LORA [Aruino Library] [Hardware Connection] [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(); } |