Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Conectar LoRa-E5 de Seeed Studio a Ubidots [LoRa]
Conectar LoRa-E5 de Seeed Studio a Ubidots [LoRa]

Sure! Here is the translation while preserving the HTML structure: ```html <p>Esta guía explora cómo utilizar dos módulos LoRa-E5, uno actuando como un gateway y el otro como un nodo para enviar datos a Ubidots.</p> ```

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses
image.png

La serie LoRa-E5 de Seeed Studio es una potente línea de módulos LoRaWAN que incorpora el MCU STM32WLE5JC y el módulo RF SX126X en un solo chip. Se puede utilizar en una red LoRaWAN, así como para configurar tu propia red LoRa. Esta guía trata sobre lo último.

Requisitos

  • Dos módulos LoRa-E5. Puede ser cualquiera de la serie Wio-E5, como el Wio-E5 Development Kit, la placa Wio-E5 Mini o Groove-Wio-E5

  • Cualquier placa Arduino con al menos dos interfaces seriales

  • Un ESP32 o ESP8266

  • Cables de conexión

  • Una cuenta de Ubidots

  • Arduino IDE instalado

  • Biblioteca de Ubidots funcionando en Arduino

  • Biblioteca de Arduino “ArduinoJson” instalada

    1. Configurar el Módulo que Actúa como Gateway

  • Conecta el módulo ESP32 o ESP8266 al módulo Wio-E5 Groove de la siguiente manera:

image.png
  • Si estás usando Wio-E5 mini:

    • Conecta el terminal “RX” del ESP32 a “TX” en el LoRa-E5 mini (el que tiene la etiqueta verde)

    • Conecta el terminal “TX” del ESP32 a “RX” en el LoRa-E5 mini (el que tiene la etiqueta verde)

    • Conecta el terminal “3V3” del ESP32 a “V+” en el LoRa-E5 mini

    • Conecta el terminal “GND” del ESP32 a “V-” en el LoRa-E5 mini

image974.png
  • Si estás usando Wio-E5 DevKit:

    • Conecta el terminal “RX” del ESP32 a “TX” en el LoRa-E5 DevKit

    • Conecta el terminal “TX” del ESP32 a “RX” en el LoRa-E5 DevKit

    • Conecta el terminal “3V3” del ESP32 a “Vin” en el LoRa-E5 DevKit

    • Conecta el terminal “GND” del ESP32 a “GND” en el LoRa-E5 DevKit

image164.png

Consejo Profesional: Recuerda conectar la antena a tu dispositivo Wio-E5 antes de operar para evitar daños en el chip.


El siguiente paso requiere que hayas instalado la biblioteca de Ubidots para ESP32 o ESP8266. Sigue los enlaces dados si aún no lo has hecho

  • Lanza el Arduino IDE

  • Conecta el ESP32 o ESP8266 a la PC a través de un cable USB

  • Ve a “Herramientas” → "Placa" y selecciona el dispositivo que estás usando\

image10071.png
  • Selecciona el “Puerto” apropiado al que está conectado tu dispositivo

image11667.png
  • Sube el siguiente código al ESP32 teniendo en cuenta que debes cambiar las siguientes configuraciones:

    • const char* UBIDOTS_TOKEN = "your-token"; establece esta variable con tu token de Ubidots

    • const char* WIFI_SSID = "SSID"; establece esta variable para que coincida con tu SSID de WiFi

    • const char* WIFI_PASS = "PASS"; establece esta variable para que coincida con tu contraseña de WiFi

#include <ArduinoJson.h>#define LoRaSerial Serial2#include "Ubidots.h"const char* UBIDOTS_TOKEN = "your-token";const char* WIFI_SSID = "SSID"; const char* WIFI_PASS = "PASS"; // Pon aquí tu contraseña de Wi-Fi Ubidots ubidots (UBIDOTS_TOKEN, UBI_HTTP); static char receiverBuffer[512];char tempBuffer[128];static int sendCommandWithACK(char *p_ack, int timeout_ms, char *p_cmd, ...){    int responseChar;    int index = 0;    int startMillis = 0;    va_list args;    memset(receiverBuffer, 0, sizeof(receiverBuffer));    va_start(args, p_cmd);    Serial2.print(p_cmd);    Serial.print(p_cmd);    va_end(args);    delay(200);    startMillis = millis();     if (p_ack == NULL)        return 0;     do    {        while (Serial2.available() > 0)        {            responseChar = Serial2.read();            receiverBuffer[index++] = responseChar;            Serial.print((char)responseChar);            delay(2);        }         if (strstr(receiverBuffer, p_ack) != NULL)            return 1;     } while (millis() - startMillis < timeout_ms);    Serial.println();    return 0;} static void recv_prase(char *p_msg, char *dum){    if (p_msg == NULL)    {      Serial.println("Recibido nulo");        return;    }    char *p_start = NULL;    char data[128];       // Para almacenar los bytes recibidos como caracteres        int bytes_len=0;    p_start = strstr(p_msg, "RX");    if (p_start && (1 == sscanf(p_start, "RX \"%s\"", &data)))    {      for (int i=0; i<sizeof(data); i++) {          if(int(data[i+1])==0) {            bytes_len = i;            break;          }    }    // Convierte los caracteres a un byteArray      int message_len = bytes_len/2+1;      char out[message_len];      auto getNum = [](char c){ return c > '9' ? c - 'A' + 10 : c - '0'; };      for (int x=0, y=0; x<bytes_len; ++x, ++y)        out[y] = (getNum(data[x++]) << 4) + getNum(data[x]);      out[message_len] = '\0';      snprintf(dum, 128, "%s", out);     }}bool setModuleListening(void){    Serial.print("Verificando si el módulo está conectado\r\n");    sendCommandWithACK("+AT: OK", 100, "AT\r\n");    sendCommandWithACK("+MODE: TEST", 1000, "AT+MODE=TEST\r\n");    bool temp = sendCommandWithACK("+TEST: RXLRPKT", 5000, "AT+TEST=RXLRPKT\r\n");    delay(200);    return temp;}void setup(void){    bool LoRaSetup = false;    Serial.begin(9600);    LoRaSerial.begin(9600);    ubidots.wifiConnect(WIFI_SSID, WIFI_PASS);     while(!LoRaSetup)    {      LoRaSetup = setModuleListening();        }} void loop(void){      char cmd[128];            // Transmitir valor HEX      sprintf(cmd, "");        int ret = sendCommandWithACK("+TEST: RX", 1000, "");        if (ret)       {             recv_prase(receiverBuffer, dum);            DynamicJsonDocument doc(1024);            deserializeJson(doc, tempBuffer);            JsonObject obj = doc.as<JsonObject>();            long temperature = obj[String("temperature")];            Serial.print(temperature);            ubidots.add("temperature", temperature);            bool bufferSent = false;             bufferSent = ubidots.send("wio-e5-gateway");                    if(bufferSent){                Serial.println("enviado exitosamente");             }            else Serial.println("no enviado");                       }        else            Serial.println("¡Recepción fallida!\r\n\r\n");         delay(500);  }

2. Configurar Conexiones para el Módulo que Actúa como Nodo

Esta guía utiliza una placa Arduino Mega, sin embargo, puedes usar cualquiera de tu elección, solo ten en cuenta que debes usar el “TX1” y “RX1” en lugar de “TX0” y “RX0” ya que esta última interfaz serial se utiliza para la comunicación con la PC. Por ejemplo, en una placa Arduino Uno, el “TX1” y “RX1” son los pines etiquetados como “~6” y “~7” respectivamente.

  • Conecta el dispositivo de la serie Wio-E5 a la placa Arduino de la siguiente manera

image974.png
  • Si estás usando el Wio-E5 DevKit o Wio-E5 groove, puedes hacer las conexiones basadas en la información de la sección 1.

  • Lanza el Arduino IDE

  • Conecta la placa Arduino a la PC a través de un cable USB

  • Selecciona la placa y el puerto apropiados, tal como en la sección anterior

  • Sube el siguiente código al Arduino

#include <ArduinoJson.h>#define LoRa Serial1static char receiverBuffer[512];static int sendCommandWithACK(char *ACKMsg, int timeoutMS, char *CMD, ...){    int responseChar;    int receivedMsgIndex = 0;    int startMillis = 0;        va_list args;    memset(receiverBuffer, 0, sizeof(receiverBuffer));    va_start(args, CMD);    Serial.print("Enviando comando: ");    Serial.print("\n\r\t");    Serial.println(CMD);    LoRa.print(CMD);            va_end(args);    delay(200);    startMillis = millis();     if (ACKMsg == NULL)        return 0;        Serial.println("respuesta del módulo: ");    Serial.print("\t");    do    {                    while (LoRa.available() > 0)        {            responseChar = LoRa.read();            receiverBuffer[receivedMsgIndex++] = responseChar;            Serial.print((char)responseChar);            delay(2);        }        if (strstr(receiverBuffer, ACKMsg) != NULL)            return 1;     } while (millis() - startMillis < timeoutMS);    Serial.println();    return 0;} void setup(void){    bool LoRaSetup = false;    Serial.begin(9600);    LoRa.begin(9600);    while(!LoRaSetup)    {      LoRaSetup = setModuleBroadcasting();        }     }bool setModuleBroadcasting(void){    Serial.print("Verificando si el módulo está conectado\r\n");    sendCommandWithACK("+AT: OK", 100, "AT\r\n");    return sendCommandWithACK("+MODE: TEST", 1000, "AT+MODE=TEST\r\n"); }void loop(void){      int sensorValue = random(20,80);      char cmdBuffer[512];      char payloadBuffer[256];      char ACKBuffer[256];            snprintf(payloadBuffer, sizeof(payloadBuffer), "%s%d%s", "{'temperature':", sensorValue, "}");      snprintf(ACKBuffer, sizeof(ACKBuffer), "%s%s%s%s", "+TEST: TXLRSTR ", "\"", payloadBuffer, "\"");      snprintf(cmdBuffer, sizeof(cmdBuffer), "AT+TEST=TXLRSTR,\"%s\"\r\n", payloadBuffer);      int ret = sendCommandWithACK(ACKBuffer, 1000, cmdBuffer);            if (ret)        Serial.println("Enviado exitosamente");      else        Serial.println("¡Envío fallido!\r\n\r\n");      delay(5000);      }
  • Si todo está cableado correctamente, deberías poder ver ambos dispositivos comunicándose entre sí usando LoRa. A continuación se muestra la salida del monitor serial de Arduino:

3. Visualizar datos en Ubidots

  • Ve a tu cuenta de Ubidots → “Dispositivos” y verás un nuevo dispositivo creado con datos siendo ingeridos

image11701.png

El código se basó en el que se encuentra aquí.

4. Comentarios, Sugerencias y Artículos Relacionados

No dudes en publicar preguntas o sugerencias en nuestro portal comunitario, o contáctanos a través de support@ubidots.com.

Otros usuarios también encontraron útil...

¿Ha quedado contestada tu pregunta?