WisNode LoRa
La revisió el 14:03, 31 gen 2018 per Xose (discussió | contribucions) (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...».)
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 :(");
}
}
}