WisNode LoRa
Jump to navigation
Jump to search
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) NOTA: L'Arduino Leonardo és una placa que treballa a 5V Per connectar-la al WisNode-LoRa s'ha de modificar la configuració de jumpers per fer que RX i TX passing per un conversor de nivells 5V<->3V3 Cal treure els jumpers del connector P5 i connectar-los al P6 així: * TXD <-> 5_3R * RXD <-> 5_3T */ #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 :("); } } }