Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
faecher:nwt:lorawan:uebersicht:lorashield:start [17.02.2020 19:47] – [Neues Device bei TTN erstellen] sbel | faecher:nwt:lorawan:uebersicht:lorashield:start [17.02.2020 20:19] (aktuell) – sbel | ||
---|---|---|---|
Zeile 4: | Zeile 4: | ||
===== LoraShield aufstecken ===== | ===== LoraShield aufstecken ===== | ||
+ | {{ : | ||
===== Bibliothek installieren ===== | ===== Bibliothek installieren ===== | ||
- | Um das Shield ansprechen zu können, muss die LMIC Bibliothek installiert werden: | + | Um das Shield ansprechen zu können, muss die LMIC Bibliothek installiert werden. |
- | + | ||
- | {{ : | + | |
+ | * [[https:// | ||
+ | * Installieren mit '' | ||
===== Sketch ===== | ===== Sketch ===== | ||
++++ Klicken, um den Beispielsketch zu sehen | | ++++ Klicken, um den Beispielsketch zu sehen | | ||
- | <code c hellolora.ino> | + | <code c hello_lora.ino> |
// MIT License | // MIT License | ||
// https:// | // https:// | ||
Zeile 30: | Zeile 29: | ||
static const u4_t DEVADDR = 0x00000000; | static const u4_t DEVADDR = 0x00000000; | ||
- | // 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 = {2, 6, 7}, | ||
- | }; | ||
- | void onEvent (ev_t ev) { | ||
- | if (ev == EV_TXCOMPLETE) { | ||
- | Serial.println(F(" | ||
- | // Schedule next transmission | ||
- | os_setTimedCallback(& | ||
- | } | ||
- | } | ||
- | |||
- | void do_send(osjob_t* j){ | ||
- | // Payload to send (uplink) | ||
- | static uint8_t message[] = " | ||
- | |||
- | // Check if there is not a current TX/RX job running | ||
- | if (LMIC.opmode & OP_TXRXPEND) { | ||
- | Serial.println(F(" | ||
- | } else { | ||
- | // Prepare upstream data transmission at the next possible time. | ||
- | LMIC_setTxData2(1, | ||
- | Serial.println(F(" | ||
- | } | ||
- | // Next TX is scheduled after TX_COMPLETE event. | ||
- | } | ||
- | |||
- | void setup() { | ||
- | Serial.begin(115200); | ||
- | Serial.println(F(" | ||
- | |||
- | // 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_SF12, | ||
- | |||
- | // Start job | ||
- | do_send(// MIT License | ||
- | // https:// | ||
- | // Based on examples from https:// | ||
- | // Copyright (c) 2015 Thomas Telkamp and Matthijs Kooijman | ||
- | |||
- | // Adaptions: Andreas Spiess | ||
- | |||
- | #include < | ||
- | #include < | ||
- | //#include < | ||
- | |||
- | #ifdef CREDENTIALS | ||
- | static const u1_t NWKSKEY[16] = NWKSKEY1; | ||
- | static const u1_t APPSKEY[16] = APPSKEY1; | ||
- | static const u4_t DEVADDR = DEVADDR1; | ||
- | #else | ||
- | static const u1_t NWKSKEY[16] = {0x00, | ||
- | static const u1_t APPSKEY[16] = {0x00, | ||
- | static const u4_t DEVADDR = 0x00000000; | ||
- | #endif | ||
// These callbacks are only used in over-the-air activation, so they are | // These callbacks are only used in over-the-air activation, so they are | ||
Zeile 189: | Zeile 102: | ||
os_runloop_once(); | os_runloop_once(); | ||
} | } | ||
- | & | ||
- | } | ||
- | |||
- | void loop() { | ||
- | os_runloop_once(); | ||
- | } | ||
- | |||
</ | </ | ||
++++ | ++++ | ||
Zeile 213: | Zeile 119: | ||
===== IDs in den Sketch eintragen ===== | ===== IDs in den Sketch eintragen ===== | ||
+ | * NWKSKEY: Network Session Key | ||
+ | * APPSKEY: Application Session Key | ||
+ | * DEVADDR: Device Address | ||
+ | |||
+ | |||
+ | {{ : | ||
+ | |||
+ | ===== Kompilieren und Testen ===== | ||
+ | |||
+ | Beim Kompilieren erscheinen Warnungen, die kann man ignorieren. | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | |||
+ | |||
+ | Wenn man den Sketch auf den Arduino lädt, sollte man bei TTN sehen, dass das Device aktiv ist: | ||
+ | |||
+ | {{ : | ||
+ | |||
+ | Im Data-Tab kann man jetzt auch sehen, dass da Daten übermittelt werden: | ||
- | + | {{ : | |