Requisitos
Acceso a un gateway LoRaWAN conectado a la red Helium
Cualquier placa Arduino con al menos dos interfaces UART. Esta guía utiliza Arduino Mega 2560, sin embargo, puedes elegir cualquier que te convenga mejor
Una placa de pruebas y cables de puente
Cualquiera de los Wio-E5 Series de Seeed Studio registrados en la red de Helium. Visita esta guía (pasos 1 a 4) para aprender cómo registrar tu dispositivo y cómo usar su firmware AT incorporado
Sensor de temperatura DS18B20 o cualquier otro sensor de tu elección. Si no tienes sensores a mano, esta guía mostrará cómo simular los datos
Una cuenta activa de Ubidots
1. Conectar el Sensor a Arduino
En esta guía, se utilizó un sensor de temperatura DS18B20; sin embargo, puedes elegir cualquier sensor que desees o, incluso, no usar ninguno. Si elegiste usar el DS18B20, procede a conectarlo a la placa Arduino de la siguiente manera:
Pin “Vin” del sensor a “5V” de Arduino
Pin “GND” del sensor a “GND” de Arduino
Pin “Data” del sensor al pin “2” de Arduino
2. Conectar el Módulo LoRa a Arduino
En esta guía, se utilizó el Kit de Desarrollo Wio-E5, sin embargo, como se mencionó anteriormente, cualquiera de los Módulos de la Serie Wio-E5 es compatible con esta guía.
Para usar el módulo Wio-E5 como un transmisor LoRa, se utilizará su firmware AT de fábrica incorporado. Para ello, solo se requiere establecer una comunicación serial con el módulo. Procede a conectar la placa Arduino y el módulo Wio-E5 de la siguiente manera:
Pin “TX01” de Arduino al pin “RX” de Wio-E5
Pin “RX01” de Arduino al pin “TX” de Wio-E5
Pin “5V” de Arduino al pin “Vin” de Wio-E5
Pin ""GND" de Arduino al pin "GND" de Wio-E5
La siguiente imagen muestra las instrucciones de conexión:
Consejo Profesional: Recuerda conectar la antena al chip que estás utilizando para evitar que se dañe.
Si elegiste usar el sensor DS18B20 , es posible que desees consultar este enlace antes de pasar a la siguiente sección para configurar las bibliotecas para adquirir los datos del sensor.
3. Subiendo el código a Arduino
Inicia tu IDE de Arduino y crea un boceto en blanco, luego selecciona la placa que estás utilizando desde el Administrador de Placas de Arduino. En esta guía, se utilizó Arduino Mega 2560; sin embargo, debes seleccionar específicamente la que estás utilizando.
Después de seleccionar la placa adecuada, procede a pegar el siguiente fragmento de código:
//elimina ambas inclusiones en caso de que no estés usando el sensor de temperatura DS18B20#include <OneWire.h>#include <DallasTemperature.h>//número de pin en el que está conectado el sensor DS18B20#define DS18B20DataPin 2//elimina estas instancias en caso de que no estés usando DS18B20OneWire oneWire(DS18B20DataPin);DallasTemperature ds18b20(&oneWire);//ingresa aquí tu appkey#define APP_KEY "2B7E151628AED2A6ABF7158809CF4F3C"bool checkBoard();bool getDevEui(String &devEui);bool getAppEui(String &appEui);bool boardSetup();bool _setAppKey(String key);String buildPayload(String key1 = "key1", String value1 = "value1", String key2 = "key2", String value2 = "value2");String DevEui;String AppEui;String AppKey = APP_KEY;String payload;String st;void setup() { Serial.begin(9600); Serial1.begin(9600); ds18b20.begin(); if (boardSetup())Serial.println("Configuración de LoRa exitosa");}void loop() { ds18b20.requestTemperatures(); float temperature = ds18b20.getTempCByIndex(0); float humidity = random(1, 100); Serial.println("Enviando carga útil: "); Serial.println(buildPayload("temperature", String(temperature),"humidity", String(humidity))); Serial1.println(buildPayload("temperature", String(temperature),"humidity", String(humidity))); while(Serial1.available() == 0); while(Serial1.available() > 0) { String val = Serial1.readString(); val.trim(); Serial.println(val); } delay(5000); }String buildPayload(String key1 = "key1", String value1 = "value1", String key2 = "key2", String value2 = "value2"){ String var1; var1 = "AT+MSG="+ String("\"{'") + key1 + String("':") + value1 + String(",") + String("'") + key2 + String("':") + value2 + String("}\"") ; return (var1);}bool boardSetup(){ bool retVal = false; bool init = false; if (checkBoard()) { Serial.println("Obteniendo credenciales del dispositivo"); if (getDevEui(DevEui) && getAppEui(AppEui) && _setAppKey(AppKey)) init = true; Serial.println("la configuración comenzará ahora"); } if (init) { Serial1.println("AT+DR=AU915"); while(Serial1.available() == 0); if (Serial1.available() > 0) { String val = Serial1.readString(); Serial.println(val); } Serial1.println("AT+CH=NUM,8-15"); while(Serial1.available() == 0); if (Serial1.available() > 0) { String val = Serial1.readString(); Serial.println(val); } Serial1.println("AT+MODE=LWOTAA"); while(Serial1.available() == 0); if (Serial1.available() > 0) { String val = Serial1.readString(); Serial.println(val); } Serial1.println("AT+JOIN"); while(Serial1.available() == 0); if(Serial1.available() > 0) { String val = Serial1.readString(); Serial.println(val); Serial.println("Esperando unirse"); while(Serial1.available() == 0); val = Serial1.readString(); Serial.println(val); retVal = true; } } return retVal;}bool _setAppKey(String key){ bool retVal = false; String Key = "AT+KEY=APPKEY,""\"" + key + "\""; Serial.println("Estableciendo AppKey"); Serial1.println(Key); while(Serial1.available() == 0); if (Serial1.available() > 0) { String val = Serial1.readString(); Serial.println(val); retVal = true; } return retVal;}bool getDevEui(String &devEui){ String DevEui; bool retVal = false; Serial.println("obteniendo DevEui del dispositivo"); Serial1.println("AT+ID=DevEui"); while(Serial1.available() == 0); if (Serial1.available() > 0) { DevEui = Serial1.readString(); DevEui.trim(); DevEui.remove(0, 13); devEui = DevEui; retVal = true; Serial.print("el DevEui de tu dispositivo es: "); Serial.println(DevEui); } return retVal;}bool getAppEui(String &appEui){ String AppEui; bool retVal = false; Serial.println("obteniendo AppEui del dispositivo"); Serial1.println("AT+ID=AppEui"); while(Serial1.available() == 0); if (Serial1.available() > 0) { AppEui = Serial1.readString(); AppEui.trim(); AppEui.remove(0, 13); appEui = AppEui; retVal = true; Serial.print("el AppEui de tu dispositivo es: "); Serial.println(appEui); } return retVal;}bool checkBoard(){ bool checkStatus = false; String received_data; //variable para almacenar datos leídos while (!checkStatus) { //enviar comando AT para verificar si hay conexión con el módulo LoRa Serial1.println("AT"); while(Serial1.available() == 0); //caso en el que se recibió un mensaje if (Serial1.available() > 0) //verificar si se recibió algún dato { received_data = Serial1.readString(); //leer datos recibidos received_data.trim(); if (received_data == "+AT: OK") { Serial.println(received_data); //mostrar datos recibidos checkStatus = true; } else { Serial.println(received_data); //mostrar datos recibidos Serial.print("error:"); } } //caso en el que no se recibió mensaje else { Serial.print("no se recibieron datos"); } delay(80); }//mientras se configura return checkStatus;}
Algunos comentarios sobre el código anterior:
Debes modificar el “APP_KEY” definido en la línea 12 para que coincida con el que configuraste en el paso de registro.
Si estás usando tu sensor en otro pin que no sea “2”, debes cambiar la línea 6 para que coincida con el pin que estás utilizando.
Está enviando datos de un sensor DS18B20 real, así como datos de humedad simulados (sin sensor utilizado). Por esta razón, en realidad no necesitas un sensor real, podrías simplemente simular.
Sube el código a la placa Arduino presionando el botón “Subir”. Luego tu dispositivo estará completamente configurado y enviando datos a Ubidots. Dirígete a la sección “Dispositivos” en tu cuenta de Ubidots para verificarlo!