LoRa | How Guys you use the Grove Wio-E5?

Okay, mates, I’m new to LoRa and LoRaWAN World, I basically do application with Wi-Fi.
And you know, if I got a different place, it’s very difficult to fetch data from remote device. but with LoRa, I can acquire data in low frequency .

i’m planning to use it with any Arduino platform, is there any projection to share from you?

Hi there, this is Lily from Seeed SenseCAP Team. To start your journey with LoRa / LoRaWAN, I’d suggest going with Grove-E5 Module with Arduino-compatible XIAO, and you can find several tutorials (LoRa P2P, LoRaWAN with TTN or other LNS) on our wiki here: Grove - Wio-E5 | Seeed Studio Wiki

1 Like

Hi so I am also new to the LoRa and LoRaWan World. I have a XIAO ESP32S3 and the expansion board as well as the Grove Wio E5 and I am trying to use it with TTN however when I use the code provided on Grove - Wio-E5 TTN Demo | Seeed Studio Wiki it does not seem to detect the wio module. I have tweaked the code to send data from the Grove Sunlight Sensor but the core functionality does not work as it does not seem to find the wio module. this is my code: When i run this I get the output printing out the IR and Visible values however initially i get: No E5 module found. I am really confused why and cant seem to get anything working. I have run some code from GitHub - andresoliva/LoRa-E5: Advanced application of SeedStudio module Grove-Wio-E5 based on chip STM32WLE5JC from STM connected to an Arduino Nano 33 BLE Sense board. Works with any Arduino that supports UART. This confused me more since I got a response which was a devEui however the setup on the TTN did not seem to get any data and it seems like that code breaks quite a lot of fair play policies. Any help will be appreciated

include <Arduino.h>

include <U8x8lib.h>

#include <Wire.h>
#include “Si115X.h”

Si115X si1151;

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/reset=/U8X8_PIN_NONE);

static char recv_buf[512];
static bool is_exist = false;
static bool is_join = false;
static int led = 0;

static int at_send_check_response(char p_ack, int timeout_ms, charp_cmd, …)
{
int ch;
int num = 0;
int index = 0;
int startMillis = 0;
va_list args;
memset(recv_buf, 0, sizeof(recv_buf));
va_start(args, p_cmd);
Serial1.printf(p_cmd, args);
Serial.printf(p_cmd, args);
va_end(args);
delay(200);
startMillis = millis();

if (p_ack == NULL)
{
    return 0;
}

do
{
    while (Serial1.available() > 0)
    {
        ch = Serial1.read();
        recv_buf[index++] = ch;
        Serial.print((char)ch);
        delay(2);
    }

    if (strstr(recv_buf, p_ack) != NULL)
    {
        return 1;
    }

} while (millis() - startMillis < timeout_ms);
return 0;

}

static void recv_prase(char p_msg)
{
if (p_msg == NULL)
{
return;
}
char
p_start = NULL;
int data = 0;
int rssi = 0;
int snr = 0;

p_start = strstr(p_msg, "RX");
if (p_start && (1 == sscanf(p_start, "RX: \"%d\"\r\n", &data)))
{
    Serial.println(data);
    u8x8.setCursor(2, 4);
    u8x8.print("led :");
    led = !!data;
    u8x8.print(led);
    if (led)
    {
        digitalWrite(LED_BUILTIN, LOW);
    }
    else
    {
        digitalWrite(LED_BUILTIN, HIGH);
    }
}

p_start = strstr(p_msg, "RSSI");
if (p_start && (1 == sscanf(p_start, "RSSI %d,", &rssi)))
{
    u8x8.setCursor(0, 6);
    u8x8.print("                ");
    u8x8.setCursor(2, 6);
    u8x8.print("rssi:");
    u8x8.print(rssi);
}
p_start = strstr(p_msg, "SNR");
if (p_start && (1 == sscanf(p_start, "SNR %d", &snr)))
{
    u8x8.setCursor(0, 7);
    u8x8.print("                ");
    u8x8.setCursor(2, 7);
    u8x8.print("snr :");
    u8x8.print(snr);
}

}

void setup(void)
{
u8x8.begin();
u8x8.setFlipMode(1);
u8x8.setFont(u8x8_font_chroma48medium8_r);

Serial.begin(115200);
pinMode(LED_BUILTIN, OUTPUT);
digitalWrite(LED_BUILTIN, HIGH);

Serial1.begin(9600);
Serial.print("E5 LORAWAN TEST\r\n");
u8x8.setCursor(0, 0);

Wire.begin();
if (!si1151.Begin()) {
    Serial.println("Si1151 is not ready!");
    while (1) {
        delay(1000);
        Serial.print(".");
    };
} else {
    Serial.println("Si1151 is ready!");
}

if (at_send_check_response("+AT: OK", 100, "AT\r\n"))
{
    is_exist = true;
    at_send_check_response("+ID: AppEui", 1000, "AT+ID\r\n");
    at_send_check_response("+MODE: LWOTAA", 1000, "AT+MODE=LWOTAA\r\n");
    at_send_check_response("+DR: EU868", 1000, "AT+DR=EU868\r\n");
    at_send_check_response("+CH: NUM", 1000, "AT+CH=NUM,0-2\r\n");
    at_send_check_response("+KEY: APPKEY", 1000, "AT+KEY=APPKEY,\"2B7E151628AED2A6ABF7158809CF4F3C\"\r\n");
    at_send_check_response("+CLASS: C", 1000, "AT+CLASS=A\r\n");
    at_send_check_response("+PORT: 8", 1000, "AT+PORT=8\r\n");
    delay(200);
    u8x8.setCursor(5, 0);
    u8x8.print("LoRaWAN");
    is_join = true;
}
else
{
    is_exist = false;
    Serial.print("No E5 module found.\r\n");
    u8x8.setCursor(0, 1);
    u8x8.print("unfound E5 !");
}

u8x8.setCursor(0, 2);
u8x8.setCursor(2, 2);
u8x8.print("IR:");

u8x8.setCursor(2, 3);
u8x8.print("Visible:");

u8x8.setCursor(2, 4);
u8x8.print("LED :");
u8x8.print(led);

}

void loop(void)
{
float irValue = si1151.ReadIR();
float visibleValue = si1151.ReadVisible();

Serial.println("IR: " + String(irValue) + " Visible: " + String(visibleValue));

u8x8.setCursor(0, 2);
u8x8.print(" ");
u8x8.setCursor(2, 2);
u8x8.print(“IR:”);
u8x8.print(irValue);
u8x8.setCursor(2, 3);
u8x8.print(“Visible:”);
u8x8.print(visibleValue);

if (is_exist)
{
int ret = 0;
if (is_join)
{

      ret = at_send_check_response("+JOIN: Network joined", 12000, "AT+JOIN\r\n");
      if (ret)
      {
          is_join = false;
      }
      else
      {
          at_send_check_response("+ID: AppEui", 1000, "AT+ID\r\n");
          Serial.print("JOIN failed!\r\n\r\n");
          delay(5000);
      }
  }
  else
  {
      char cmd[128];
      sprintf(cmd, "AT+CMSGHEX=\"%04X%04X\"\r\n", (int)irValue, (int)visibleValue);
      ret = at_send_check_response("Done", 5000, cmd);
      if (ret)
      {
          recv_prase(recv_buf);
      }
      else
      {
          Serial.print("Send failed!\r\n\r\n");
      }
      delay(5000);
  }

}
else
{
delay(1000);
}
}