Diferència entre les pàgines «Llista de nodes disponibles» i «WisNode LoRa»
(Diferència entre pàgines)
Jump to navigation
Jump to search
(Es crea la pàgina amb «'''Introducció''' '''Requeriments''' '''Exemple''' <pre> /* WISNODE-LORA example for Arduino Leonardo Copyright (C) 2018 Xose Pérez <xose dot perez at gmail d...».) |
|||
Línia 1: | Línia 1: | ||
− | + | '''Introducció''' | |
− | + | '''Requeriments''' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | '''Exemple''' | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | <pre> | |
− | + | /* | |
− | |||
− | |||
− | |||
− | |||
− | + | 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) | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | */ | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | + | #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 :("); | ||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | } | ||
+ | |||
+ | </pre> |
Revisió del 15:03, 31 gen 2018
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) */ #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 :("); } } }