diff --git a/iot/TTNTest/TTNTest.ino b/iot/TTNTest/TTNTest.ino index be8ccd0..2b30122 100644 --- a/iot/TTNTest/TTNTest.ino +++ b/iot/TTNTest/TTNTest.ino @@ -1,6 +1,5 @@ /******************************************************************************* * Copyright (c) 2015 Thomas Telkamp and Matthijs Kooijman - * Copyright (c) 2018 Terry Moore, MCCI * * Permission is hereby granted, free of charge, to anyone * obtaining a copy of this document and accompanying files, @@ -10,41 +9,27 @@ * * This example sends a valid LoRaWAN packet with payload "Hello, * world!", using frequency and encryption settings matching those of - * the The Things Network. + * the (early prototype version of) The Things Network. * - * This uses ABP (Activation-by-personalisation), where a DevAddr and - * Session keys are preconfigured (unlike OTAA, where a DevEUI and - * application key is configured, while the DevAddr and session keys are - * assigned/generated in the over-the-air-activation procedure). + * Note: LoRaWAN per sub-band duty-cycle limitation is enforced (1% in g1, + * 0.1% in g2). * - * Note: LoRaWAN per sub-band duty-cycle limitation is enforced (1% in - * g1, 0.1% in g2), but not the TTN fair usage policy (which is probably - * violated by this sketch when left running for longer)! + * Change DEVADDR to a unique address! + * See http://thethingsnetwork.org/wiki/AddressSpace * - * To use this sketch, first register your application and device with - * the things network, to set or generate a DevAddr, NwkSKey and - * AppSKey. Each device should have their own unique values for these - * fields. - * - * Do not forget to define the radio type correctly in - * arduino-lmic/project_config/lmic_project_config.h or from your BOARDS.txt. + * Do not forget to define the radio type correctly in config.h. * *******************************************************************************/ -// References: -// [feather] adafruit-feather-m0-radio-with-lora-module.pdf - #include #include #include #include "config.custom.h" - // 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 arduino-lmic/project_config/lmic_project_config.h, -// otherwise the linker will complain). +// 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) { } @@ -57,11 +42,10 @@ static osjob_t sendjob; const unsigned TX_INTERVAL = 60; // Pin mapping -// Adapted for the Dragino LoRa Shield const lmic_pinmap lmic_pins = { - .nss = 10, // SPI Chip select - aka NSS + .nss = 10, .rxtx = LMIC_UNUSED_PIN, - .rst = 9, // Reset pin + .rst = 9, .dio = {2, 6, 7}, }; @@ -87,28 +71,23 @@ void onEvent (ev_t ev) { case EV_JOINED: Serial.println(F("EV_JOINED")); break; - /* - || This event is defined but not used in the code. No - || point in wasting codespace on it. - || - || case EV_RFU1: - || Serial.println(F("EV_RFU1")); - || break; - */ + case EV_RFU1: + Serial.println(F("EV_RFU1")); + break; case EV_JOIN_FAILED: Serial.println(F("EV_JOIN_FAILED")); break; case EV_REJOIN_FAILED: Serial.println(F("EV_REJOIN_FAILED")); break; + break; case EV_TXCOMPLETE: Serial.println(F("EV_TXCOMPLETE (includes waiting for RX windows)")); - if (LMIC.txrxFlags & TXRX_ACK) - Serial.println(F("Received ack")); - if (LMIC.dataLen) { - Serial.println(F("Received ")); - Serial.println(LMIC.dataLen); - Serial.println(F(" bytes of payload")); + if(LMIC.dataLen) { + // data received in rx slot after tx + Serial.print(F("Data Received: ")); + Serial.write(LMIC.frame+LMIC.dataBeg, LMIC.dataLen); + Serial.println(); } // Schedule next transmission os_setTimedCallback(&sendjob, os_getTime()+sec2osticks(TX_INTERVAL), do_send); @@ -129,20 +108,8 @@ void onEvent (ev_t ev) { case EV_LINK_ALIVE: Serial.println(F("EV_LINK_ALIVE")); break; - /* - || This event is defined but not used in the code. No - || point in wasting codespace on it. - || - || case EV_SCAN_FOUND: - || Serial.println(F("EV_SCAN_FOUND")); - || break; - */ - case EV_TXSTART: - Serial.println(F("EV_TXSTART")); - break; - default: - Serial.print(F("Unknown event: ")); - Serial.println((unsigned) ev); + default: + Serial.println(F("Unknown event")); break; } } @@ -160,10 +127,7 @@ void do_send(osjob_t* j){ } void setup() { -// pinMode(13, OUTPUT); - while (!Serial); // wait for Serial to be initialized Serial.begin(115200); - delay(100); // per sample code on RF_95 test Serial.println(F("Starting")); #ifdef VCC_ENABLE @@ -188,13 +152,12 @@ void setup() { uint8_t nwkskey[sizeof(NWKSKEY)]; memcpy_P(appskey, APPSKEY, sizeof(APPSKEY)); memcpy_P(nwkskey, NWKSKEY, sizeof(NWKSKEY)); - LMIC_setSession (0x13, DEVADDR, nwkskey, appskey); + LMIC_setSession (0x1, DEVADDR, nwkskey, appskey); #else - // If not running an AVR with PROGMEM, just use the arrays directly - LMIC_setSession (0x13, DEVADDR, NWKSKEY, APPSKEY); + // If not running an AVR with PROGMEM, just use the arrays directly + LMIC_setSession (0x1, DEVADDR, NWKSKEY, APPSKEY); #endif - #if defined(CFG_eu868) // Set up the channels used by the Things Network, which corresponds // to the defaults of most gateways. Without this, only three base // channels from the LoRaWAN specification are used, which certainly @@ -216,21 +179,11 @@ void setup() { // devices' ping slots. LMIC does not have an easy way to define set this // frequency and support for class B is spotty and untested, so this // frequency is not configured here. - #elif defined(CFG_us915) - // NA-US channels 0-71 are configured automatically - // but only one group of 8 should (a subband) should be active - // TTN recommends the second sub band, 1 in a zero based count. - // https://github.com/TheThingsNetwork/gateway-conf/blob/master/US-global_conf.json - LMIC_selectSubBand(1); - #endif // 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 + // Set data rate and transmit power (note: txpow seems to be ignored by the library) LMIC_setDrTxpow(DR_SF7,14); // Start job @@ -238,15 +191,5 @@ void setup() { } void loop() { - unsigned long now; - now = millis(); - if ((now & 512) != 0) { - digitalWrite(13, HIGH); - } - else { - digitalWrite(13, LOW); - } - os_runloop_once(); - } diff --git a/iot/libraries/arduino-lmic b/iot/libraries/arduino-lmic deleted file mode 160000 index 9f01615..0000000 --- a/iot/libraries/arduino-lmic +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 9f016150100afcde4d3def8abae234c6efc46e0c