|
|
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)
| |
− |
| |
− | 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 :(");
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− | }
| |
− |
| |
− | </pre>
| |