Skip to main content

Grove - Wio-E5 TTN 演示

入门指南

The Things Network 提供了一个全球开放的 LoRaWAN 网络,配备一套开放工具,让您能够以低成本构建下一个物联网应用,具有最高安全性并可随时扩展。通过强大的端到端加密,构建了一个安全协作的物联网网络,覆盖全球多个国家。目前运营着数千个网关,为数百万人提供覆盖。

准备工作

这是一个演示,展示如何通过 Grove - Wio-E5 模块连接 TTN (The Things Network) 和 Seeeduino XIAO 模块。这些模块能够从环境中收集温度和湿度参数,并将其发送回 TTN。Seeeduino Xiao 上闪烁的 LED 灯指示温度和湿度传感器连接到 TTN 云的状态。

caution

请按照此说明确保您使用的终端节点、网关和 TTN 配置之间频段的一致性。 此演示应用的频率计划适用于 EU868

所需硬件

Seeeduino XIAOGrove - Wio-E5Seeeduino XIAO Expansion BoardGrove - Temperature & Humidity Sensor (DHT11)

pir

pir

pir

pir

note

如果这是您第一次使用 Seeeduino XIAO,请参考 Seeeduino XIAO 的 wiki。 如果这是您第一次使用 Arduino,Arduino 官网 是您开始 Arduino 之旅的绝佳资源。

硬件连接

  • 步骤 1. 将 Wio-E5 模块直接连接到 "UART" 插槽。

  • 步骤 2. 将 DH11 插入 "A0/D0" 插座。

  • 步骤 3. 下载代码,请参考软件部分。

软件准备

note

如果这是您第一次使用 Arduino,我们强烈建议您在开始之前查看 Arduino 入门指南。 点击了解 如何安装 Arduino 库 的详细信息

下载库文件

软件代码

下载示例;复制代码粘贴到 Arduino IDE 中,然后上传。

# include <Arduino.h>
# include <U8x8lib.h>
# include "DHT.h"

# define DHTPIN 0 // what pin we're connected to

// Uncomment whatever type you're using!
# define DHTTYPE DHT11 // DHT 11
// #define DHTTYPE DHT22 // DHT 22 (AM2302)
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

DHT dht(DHTPIN, DHTTYPE);

U8X8_SSD1306_128X64_NONAME_HW_I2C u8x8(/*reset=*/U8X8_PIN_NONE);
// U8X8_SSD1306_128X64_NONAME_SW_I2C u8x8(/*clock=*/ SCL, /*data=*/ SDA, /*reset=*/ U8X8_PIN_NONE); // OLEDs without Reset of the Display

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, char*p_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);

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 !");
}

dht.begin();

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

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

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

void loop(void)
{
float temp = 0;
float humi = 0;

temp = dht.readTemperature();
humi = dht.readHumidity();

Serial.print("Humidity: ");
Serial.print(humi);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temp);
Serial.println(" *C");

u8x8.setCursor(0, 2);
u8x8.print(" ");
u8x8.setCursor(2, 2);
u8x8.print("temp:");
u8x8.print(temp);
u8x8.setCursor(2, 3);
u8x8.print("humi:");
u8x8.print(humi);

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)temp, (int)humi);
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);
}
}

TTN 控制台配置设置

  • 步骤 1. 访问 The Things Network 网站并注册一个新账户

  • 步骤 2. 登录后,点击您的个人资料并选择 Console

pir

  • 步骤 3. 选择一个集群开始添加设备和网关

pir

  • 步骤 4. 点击 Go to applications

pir

  • 步骤 5. 点击 + Add application

pir

  • 步骤 6. 填写 Application ID 并点击 Create application

pir

注意: 这里 Application nameDescription 不是必填字段。如果 Application name 留空,默认将使用与 Application ID 相同的名称

以下是新创建的应用程序

pir

  • 步骤 7:导航到 Payload formatters > Uplink,选择 Formatter TypeJavascript 并填写 Formatter parameter 如下

pir

function Decoder(bytes, port) {

var decoded = {};
if (port === 8) {
decoded.temp = bytes[0] <<8 | bytes[1];
decoded.humi = bytes[2] <<8 | bytes[3];
}

return decoded;
}
  • 步骤 8:按照之前的说明将 Arduino 代码上传到 Seeeduino XIAO,并打开串口监视器查看以下输出
Humidity: 50%       Temperature: 25.00 *C
AT+JOIN
+JOIN: Start
+JOIN: NORMAL
+JOIN: Join failed
+JOIN: Done
AT+ID
+ID: DevAddr, 24:40:00:7C
+ID: DevEui, 2C:F7:F1:20:24:90:03:63
+ID: AppEui, 80:00:00:00:00:00:00:07
+JOIN: Join failed

记下上面生成的 DevEuiAppEUi

  • 步骤 9:返回到创建的应用程序的 Overview 页面并点击 + Add end device

pir

pir

  • 步骤 10. 点击 Manually,手动输入注册凭据

pir

  • 步骤 11. 根据您的地区选择 Frequency plan。同时确保您使用与要连接此设备的网关相同的频率。选择 MAC V1.0.2 作为 LoRaWAN® version,选择 PHY V1.0.2 REV B 作为 Regional Parameters version。这些设置是根据 Wio-E5 的 LoraWAN® 协议栈配置的。

pir

  • 步骤 12. 将从 步骤 8 中获得的信息复制并粘贴到 DevEUIAppEUI 字段中。当我们填写 DevEUI 时,End device ID 字段将自动填充。对于 AppKey 字段,使用:2B7E151628AED2A6ABF7158809CF4F3C。

pir

最后点击 Register end device

  • 步骤 13. 在 TTN 控制台注册您的 LoRaWAN® 网关。请参考这里显示的说明

如果在一切设置完成后,您在串口监视器上看到以下输出,这意味着 Seeeduino XIAO 已成功连接到 TTN 并正在发送温湿度传感器数据!

pir

  • 步骤 14. 返回应用程序页面并导航到 End devices,选择创建的设备并点击 Live data

pir

在这里您将看到实时显示的温湿度传感器数据!

  • 步骤 15. 导航到 Messaging > Downlink,在 Payload 下输入 01 并点击 Schedule downlink打开 Seeeduino XIAO 上的内置黄色 LED

pir

  • 步骤 16. 发送 Payload00关闭****内置黄色 LED

资源

数据手册:

认证:

相关 SDK:

技术支持与产品讨论

感谢您选择我们的产品!我们在这里为您提供不同的支持,以确保您使用我们产品的体验尽可能顺畅。我们提供多种沟通渠道,以满足不同的偏好和需求。

Loading Comments...