Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Enviar datos a Ubidots desde una placa Arduino provisionada con el módulo LoRa-E5 de Seeed Studio
Enviar datos a Ubidots desde una placa Arduino provisionada con el módulo LoRa-E5 de Seeed Studio

Aprende a conectar y enviar datos a Ubidots con cualquier placa Arduino y el módulo Wio-E5 LoRa.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de una semana

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

image1099.png

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:

image1071.png

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.

image1479.png

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!

image1544.png
¿Ha quedado contestada tu pregunta?