Skip to main content

Seeeduino LoRaWAN

enter image description here

Seeeduino LoRaWAN 是一款嵌入了 LoRaWan 协议的 Arduino 开发板,通过它您可以快速入门并体验 LoRa 在物联网领域的优势。基于通信模块 RHF76-052AM,Seeeduino LoRaWAN 兼容 LoRaWAN Class A/C,并支持多种通信频率。

板载的 4 个标准 Grove 连接器使 Seeeduino LoRaWan 能够方便地连接 Seeedstudio 的数百种 Grove 传感器和执行器,因此用户能够更专注于应用本身,而无需担心不同模块之间的兼容性问题。此外,该板还嵌入了集成锂电池管理芯片,允许通过 USB 接口为板子充电。在低功耗模式下,一块充满电的锂电池可以为板子供电数月。

如果您想快速构建物联网应用,Seeeduino LoRaWAN 是您的最佳选择。

产品版本发布日期购买方式
Seeeduino LoRaWAN2016年12月20日enter image description here
Seeeduino LoRaWAN W/GPS2016年12月20日enter image description here

版本变更​

项目Seeeduino LoRaWAN W/GPSSeeeduino LoRaWAN
主芯片ATSAMD21ATSAMD21
GPS通信√x
模块RHF76-052DMRHF76-052AM
模块发布时间20182018
note

首次使用时请更新固件。请始终插入3.7V锂电池,以防USB电源供应不足。

tip

Seeeduino LoRaWAN W/GPS 包含GPS模块。

特性​

  • 最小电流(3.7V锂电池)- 2mA
  • 最小电流(3.7V锂电池 & 移除PWR LED)- 80 uA

Arduino/处理器

  • ATSAMD21G18 @ 48MHz,3.3V逻辑/电源
  • Arduino兼容(基于Arduino Zero引导程序)
  • 嵌入锂电池管理芯片和状态指示LED
  • 20个GPIO
  • 4个板载 Grove 连接器
  • 18个PWM引脚
  • 6个模拟输入
  • 1个模拟输出(A0)
  • 3.3V稳压器,200mA输出
  • 复位按钮

LoRaWAN/RHF76-052

  • WOR模式下1.45uA睡眠电流(模块规格,非板子规格)
  • 160dB的高链路预算。-140dBm灵敏度和19dBm输出功率。
  • 双频段,434/470MHz和868/915MHz
    • 19dBm@434MHz/470MHz
    • 14dBm@868MHz/915MHz
  • 支持LoRaWAN协议,Class A/C
  • 超长距离通信
  • 超低功耗
  • 固件升级
  • 小尺寸:23mm X 28mm,33引脚SMT封装
warning

与大多数Arduino和Genuino板不同,Zero运行在3.3V。I/O引脚能够承受的最大电压是3.3V。在任何I/O引脚上施加高于3.3V的电压可能会损坏板子。

规格参数​

项目数值
微控制器ATSAMD21G18, 32位 ARM Cortex M0+
工作电压3.3V
数字I/O引脚20
PWM引脚除引脚2和7外的所有引脚
UART2个(原生和编程)
模拟输入引脚6个,12位ADC通道
模拟输出引脚1个,10位DAC
外部中断除引脚4外的所有引脚
每个I/O引脚的直流电流7 mA
闪存256 KB
SRAM32 KB
EEPROM无
时钟速度48 MHz
长度68 mm
宽度53 mm
重量19.6g(不含GPS),19.9g(含GPS)

应用创意​

  • 物联网
  • 智能家居
  • 安防
  • 智能电网
  • 智能农场
  • 智能园区
tip

使用Grove模块来扩展您的应用

板载有4个Grove连接器。如果这是您第一次听说Grove,请访问Grove系统了解更多详情。 简而言之,Grove是数百个标准化传感器,包括传感器、执行器、显示器以及通信模块。

硬件概览​

enter image description here

  • 1. Micro USB - 编程和为板子供电
  • 2. Grove连接器
  • 3. JST2.0锂电池输入(3.7V)和充电状态LED
  • 4. DFU按钮 - 固件模式按钮
  • 5. 复位按钮
  • 6. Arduino引脚排列
  • 7. ICSP引脚
  • 8. 固件模式LED
  • 9. 线天线
  • A. uFL天线
  • B. RF模块 - RHF76-052AM
  • C. ARM Cortex M0处理器 - ATSAMD21G18
  • D. LED指示灯
    • RX/TX - UART数据传输时闪烁(从/到USB)
    • L - 连接到D13的LED
    • PWR - 电源
tip

如果您想使用板载的4个Grove连接器,请使用digitalWrite(38, HIGH)来开启VCC。否则您无法为Grove模块供电。

引脚映射

引脚名称GPIO编号外部中断PWM模拟输入模拟输出功能
0#0是是RX(串口)
1#1是是TX(串口)
2#2是
3#3是是
4#4是
5#5是是
6#6是是
7#7是
8#8是是
9#9是是
10#10是是
11#11是是
12#12是是
13#13是是
SDA#20是是
SCL#21是是
A0#A0是是是是
A1#A1是是是
A2#A2是是是
A3#A3是是是
A4#A4是是是电池电压
A5#A5是是是充电状态
note

所有引脚都可以作为数字输入和输出

入门指南​

note

如果这是您第一次使用 Arduino,我们强烈建议您参考 Arduino 入门指南

首先您需要安装最新的 Arduino IDE,并将 Seeeduino LoRa 添加到您的 Arduino IDE。

安装驱动程序(适用于 Windows)​

第一次插入开发板时,您应该会看到一个名为 Seeeduino LoRaWAN 的 USB COM 设备,需要安装驱动程序。点击下面的按钮下载开发板的驱动程序。

enter image description here

为了确保驱动程序安装成功,请打开设备管理器查看是否存在 Seeeduino LoRaWAN。

enter image description here

1. 闪烁​

现在我们可以上传第一个演示程序 - Blink 到 Seeeduino LoRaWAN。

打开您的 Arduino IDE,点击 File > Examples > 01.Basics > Blink 打开示例程序,或复制以下代码:

// the setup function runs once when you press reset or power the board
void setup() {
// initialize digital pin 13 as an output.
pinMode(13, OUTPUT);
}

// the loop function runs over and over again forever
void loop() {
digitalWrite(13, HIGH); // turn the LED on (HIGH is the voltage level)
delay(1000); // wait for a second
digitalWrite(13, LOW); // turn the LED off by making the voltage LOW
delay(1000); // wait for a second
}

然后,

  • 点击 Tools > Board > Seeeduino LoRaWAN

如果您找不到 Seeeduino LoRaWAN,请查看 如何将 Seeed 开发板添加到 Arduino IDE

  • 点击 Tools > Port 选择正确的端口号。(不要选择 COM1)

enter image description here

然后点击 Arduino IDE 左上角的 Upload 按钮,几秒钟后代码就会上传成功。

enter image description here

如果上传成功,您应该会看到一些红色信息,请观察板载 LED,它正在闪烁。

enter image description here

2. 电池​

您可以通过 3.7V 锂电池为开发板供电。包装中包含一根 JST2.0 线缆,如果您无法获得带有 JST2.0 连接器的电池,请使用它。

warning

确保电池的正负极连接正确,否则开发板可能会损坏。

充电状态引脚和电池正极引脚已连接到 A4 和 A5,这允许您通过编程检测充电状态和测量电池电压。

复制并上传以下代码来检测电池状态。

// battey of Seeeduino LoRaWAN

const int pin_battery_status = A5;
const int pin_battery_voltage = A4;

void setup() {
SerialUSB.begin(115200);
pinMode(pin_battery_status, INPUT);
}

void loop() {

int a = analogRead(pin_battery_voltage);
float v = a/1023.0*3.3*11.0; // there's an 1M and 100k resistor divider
SerialUSB.print(v, 2);
SerialUSB.print('\t');
SerialUSB.println(digitalRead(pin_battery_status));

delay(1000);
}
note

充电状态在充电时返回0,充电完成或未插入电池时返回1。

3. 发送和接收示例​

LoRaWAN模块有一个编写良好的库,对于简单的应用程序,您甚至不需要了解太多关于LoRa协议的知识,因为它复杂且难以理解。 请注意,如果您想要高级应用程序,您仍然需要一些关于LoRa协议的知识。 您不需要下载库,它已经包含在包中。您可以在文件 > 示例 > LoRaWAN中打开它。这些示例包括:

  • p2p-tx
  • p2p-rx
  • ABP
  • OTAA

您需要2个Seeeduino LoRaWAN来完成此示例,一个用于发送,另一个用于接收。

3.1 P2P发送​

打开您的Arduino IDE并点击文件 > 示例 > LoRaWAN > p2p_tx来打开草图,或者您可以复制下面的代码。 此草图将每3000毫秒广播一个字符串"Hello World!"。

// Seduino LoRaWAN - TX example
#include <LoRaWan.h>

void setup(void)
{
SerialUSB.begin(115200);
lora.init();
lora.initP2PMode(433, SF12, BW125, 8, 8, 20);
}

void loop(void)
{
lora.transferPacketP2PMode("Hello World!");
SerialUSB.println("Send string.");
delay(3000);
}

3.2 P2P 接收​

打开你的 Arduino IDE,点击 File > Examples > LoRaWAN > p2p_rx 来打开示例代码,或者你可以复制下面的代码。

// Seduino LoRaWAN - RX example
#include <LoRaWan.h>

unsigned char buffer[128] = {0, };

void setup(void)
{
SerialUSB.begin(115200);
lora.init();
lora.initP2PMode(433, SF12, BW125, 8, 8, 20);
}

void loop(void)
{
short length = 0;
short rssi = 0;

memset(buffer, 0, 128);
length = lora.receivePacketP2PMode(buffer, 128, &rssi, 1);

if(length)
{
SerialUSB.print("Length is: ");
SerialUSB.println(length);
SerialUSB.print("RSSI is: ");
SerialUSB.println(rssi);
SerialUSB.print("Data is: ");
for(unsigned char i = 0; i < length; i ++)
{
SerialUSB.print("0x");
SerialUSB.print(buffer[i], HEX);
SerialUSB.print(" ");
}
SerialUSB.println();
}
}

在两个草图都成功上传后,打开接收板的串口监视器,检查是否能获取到如下所示的数据。

enter image description here

3.3 ABP​


#include <LoRaWan.h>
#include "DHT.h"

#define DHTPIN 2
#define DHTTYPE DHT22
DHT dht(DHTPIN, DHTTYPE);
unsigned char data[2] = {1, 2};
char buffer[256];

void setup(void)
{
dht.begin();

SerialUSB.begin(115200);
//while(!SerialUSB);

lora.init();

memset(buffer, 0, 256);
lora.getVersion(buffer, 256, 1);
SerialUSB.print(buffer);

memset(buffer, 0, 256);
lora.getId(buffer, 256, 1);
SerialUSB.print(buffer);

lora.setKey("2B7E151628AED2A6ABF7158809CF4F3C", "2B7E151628AED2A6ABF7158809CF4F3C", "2B7E151628AED2A6ABF7158809CF4F3C");

lora.setDeciveMode(LWABP);
lora.setDataRate(DR0, EU868);

lora.setChannel(0, 867.7);
lora.setChannel(1, 867.9);
lora.setChannel(2, 868.8);

lora.setReceiceWindowFirst(0, 867.7);
lora.setReceiceWindowSecond(869.5, DR3);

lora.setDutyCycle(false);
lora.setJoinDutyCycle(false);

lora.setPower(14);
}

void loop(void)
{
bool result = false;

delay(2000);
int h = dht.readHumidity();
int t = dht.readTemperature();

//result = lora.transferPacket("Hello World!", 10);
result = lora.transferPacket(data, 2, 10);
data[0] = h;
data[1] = t;

if(result)
{
short length;
short rssi;

memset(buffer, 0, 256);
length = lora.receivePacket(buffer, 256, &rssi);

if(length)
{
SerialUSB.print("Length is: ");
SerialUSB.println(length);
SerialUSB.print("RSSI is: ");
SerialUSB.println(rssi);
SerialUSB.print("Data is: ");
for(unsigned char i = 0; i < length; i ++)
{
SerialUSB.print("0x");
SerialUSB.print(buffer[i], HEX);
SerialUSB.print(" ");
}
SerialUSB.println();
}
}
}

  • 步骤 6. 对于本地服务器,点击 Application->Seeed(您刚刚添加的应用程序名称)->View application data,您将看到刚刚从 Seeeduino_LoRAWAN 发送的数据。对于 Loriot 服务器,转到 Dashboard -> Applications -> SampleApp ->Device,点击节点设备 EUI 或 DevAddr,您将在这里找到刚刚发送的数据。

3.4 OTAA​

  • 步骤 1. 请参考用户手册 第 3.2.3 节来设置网关。
  • 步骤 2. 对于 seeeduino Lorawan,请打开您的 Arduino IDE 并点击 File > Examples > LoRaWAN > OTAA 并参考代码。
#include <LoRaWan.h>


unsigned char data[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA,};
char buffer[256];


void setup(void)
{
SerialUSB.begin(115200);
while(!SerialUSB);

lora.init();

memset(buffer, 0, 256);
lora.getVersion(buffer, 256, 1);
SerialUSB.print(buffer);

memset(buffer, 0, 256);
lora.getId(buffer, 256, 1);
SerialUSB.print(buffer);

lora.setKey("2B7E151628AED2A6ABF7158809CF4F3C", "2B7E151628AED2A6ABF7158809CF4F3C", "2B7E151628AED2A6ABF7158809CF4F3C");

lora.setDeciveMode(LWOTAA);
lora.setDataRate(DR0, EU868);

lora.setChannel(0, 868.1);
lora.setChannel(1, 868.3);
lora.setChannel(2, 868.5);

lora.setReceiceWindowFirst(0, 868.1);
lora.setReceiceWindowSecond(869.5, DR3);

lora.setDutyCycle(false);
lora.setJoinDutyCycle(false);

lora.setPower(14);

while(!lora.setOTAAJoin(JOIN));
}

void loop(void)
{
bool result = false;

result = lora.transferPacket("Hello World!", 10);
//result = lora.transferPacket(data, 10, 10);

if(result)
{
short length;
short rssi;

memset(buffer, 0, 256);
length = lora.receivePacket(buffer, 256, &rssi);

if(length)
{
SerialUSB.print("Length is: ");
SerialUSB.println(length);
SerialUSB.print("RSSI is: ");
SerialUSB.println(rssi);
SerialUSB.print("Data is: ");
for(unsigned char i = 0; i < length; i ++)
{
SerialUSB.print("0x");
SerialUSB.print(buffer[i], HEX);
SerialUSB.print(" ");
}
SerialUSB.println();
}
}
}

4. GPS 数据​

note

本章节仅适用于 Seeeduino LoRaWAN W/GPS。

4.1 NMEA​

  • 步骤 1. 将以下代码复制到您的 Seeeduino LoRaWAN W/GPS 中。
void setup()
{
Serial2.begin(9600);
Serial.begin(115200);
}

void loop()
{
while(Serial2.available())
{
Serial.write(Serial2.read());
}
while(Serial.available())
{
Serial2.write(Serial.read());
}
}
  • 步骤 2. 打开串口监视器,然后你将从GPS获取数据。

enter image description here

4.2 纬度和经度​

感谢 Todd Krein 在Github上分享的示例。请下载 TinyGPS++ 库,然后将下面的代码复制到Seeeduino Lorawan中。

#define USE_GPS 1

#include "LoRaWan.h"

#ifdef USE_GPS
#include "TinyGPS++.h"
TinyGPSPlus gps;
#endif


void setup(void)
{

char c;
#ifdef USE_GPS
bool locked;
#endif

SerialUSB.begin(115200);
while(!SerialUSB);

lora.init();
lora.setDeviceReset();

#ifdef USE_GPS
Serial2.begin(9600); // 打开GPS
locked = false;

// 为了安全起见,让我们现在就获取GPS定位,在开始运行LoRa部分的任意延迟之前

while (!gps.location.isValid()) {
while (Serial2.available() > 0) {
if (gps.encode(c=Serial2.read())) {
displayInfo();
if (gps.location.isValid()) {
// locked = true;
break;
}
}
// SerialUSB.print(c);
}

// if (locked)
// break;

if (millis() > 15000 && gps.charsProcessed() < 10)
{
SerialUSB.println(F("未检测到GPS:请检查接线。"));
SerialUSB.println(gps.charsProcessed());
while(true);
}
else if (millis() > 20000) {
SerialUSB.println(F("无法在分配的时间内获得定位。"));
break;
}
}
#endif
}


void loop(void)
{
//displayInfo();
//delay(1000);
}

void displayInfo()
{
SerialUSB.print(F("位置: "));
if (gps.location.isValid())
{
SerialUSB.print(gps.location.lat(), 6);
SerialUSB.print(F(","));
SerialUSB.print(gps.location.lng(), 6);
}
else
{
SerialUSB.print(F("无效"));
}

SerialUSB.print(F(" 日期/时间: "));
if (gps.date.isValid())
{
SerialUSB.print(gps.date.month());
SerialUSB.print(F("/"));
SerialUSB.print(gps.date.day());
SerialUSB.print(F("/"));
SerialUSB.print(gps.date.year());
}
else
{
SerialUSB.print(F("无效"));
}

SerialUSB.print(F(" "));
if (gps.time.isValid())
{
if (gps.time.hour() < 10) SerialUSB.print(F("0"));
SerialUSB.print(gps.time.hour());
SerialUSB.print(F(":"));
if (gps.time.minute() < 10) SerialUSB.print(F("0"));
SerialUSB.print(gps.time.minute());
SerialUSB.print(F(":"));
if (gps.time.second() < 10) SerialUSB.print(F("0"));
SerialUSB.print(gps.time.second());
SerialUSB.print(F("."));
if (gps.time.centisecond() < 10) SerialUSB.print(F("0"));
SerialUSB.print(gps.time.centisecond());
}
else
{
SerialUSB.print(F("无效"));
}

SerialUSB.println();
}

5. 低功耗​

在我们的测试中,最小电流为80uA(适用于Seeeduino LoRaWAN)。 请按照以下步骤操作。

  1. 移除PWR LED(如果不移除此LED,电流将>2mA)
  2. 移除CHG LED
  3. 将以下代码上传到您的开发板。
#include <LoRaWan.h>
#include <EnergySaving.h>

EnergySaving nrgSave;

void blink()
{
for(unsigned char i = 0; i < 5; i ++)
{
digitalWrite(13,HIGH);
delay(500);
digitalWrite(13,LOW);
delay(500);
}
}

void setup()
{
for(unsigned char i = 0; i < 26; i ++) // 重要,将所有引脚设置为HIGH以节省功耗
{
pinMode(i, OUTPUT);
digitalWrite(i, HIGH);
}

lora.init();
blink();
lora.setDeviceLowPower();
blink();
nrgSave.begin(WAKE_EXT_INTERRUPT, 7, dummy); // D7上的按钮用于唤醒开发板
nrgSave.standby();
}

void loop()
{
blink();
nrgSave.standby();
}

void dummy(void)
{
// 做一些事情
}

// END File

6. 更新固件​

如果您想检查板子的版本,请将以下代码上传到您的板子。

void setup()
{
Serial1.begin(9600);
SerialUSB.begin(115200);
}

void loop()
{
while(Serial1.available())
{
SerialUSB.write(Serial1.read());
}
while(SerialUSB.available())
{
Serial1.write(SerialUSB.read());
}
}

打开您的串口监视器并输入

AT+VER

然后您将获得您的开发板版本。

note

如果您的 Seeeduino LoRawan 开发板是 AM 版本,它无法支持 V3 固件,您需要 DM 版本来将固件更新到 3.0 以上。因为 V3 固件太大,AM 闪存太小。

enter image description here

固件版本是 2.0.10,如果您想更新固件,需要按照以下几个步骤操作。

  • 步骤 1. 复制并上传以下代码到您的开发板。
// Update firmware to RHF76-052AM
#include <Arduino.h>

void setup()
{
SerialDBG.begin(115200);
SerialUSB.begin(115200);
}

void loop()
{
while(SerialDBG.available())
{
SerialUSB.write(SerialDBG.read());
}
while(SerialUSB.available())
{
SerialDBG.write(SerialUSB.read());
}
}

  • 步骤 2. 从 USB 中移除开发板并重新连接,然后按下 DFU 按钮,当固件模式 LED 闪烁后,您可以进行下一步。

  • 步骤 3. 点击下载最新固件,这是一个 .bin 文件。

enter image description here

  • 步骤 4. 打开 PuTTy 并连接到开发板

enter image description here

tip

您可以在这里找到最新的 PuTTy:http://www.extraputty.com/download.php

  • 步骤 5. 成功将您的开发板连接到 PuTTy 后,您会发现字符 'C' 在监视器上持续打印。 点击 Files Transfer > Ymodem > Send,并选择我们在步骤4中下载的 .bin 文件。

  • 步骤 6. 然后更新开始。 enter image description here

常见问题​

Q1: Seeeduino Lorawan 停止被 PC 识别

A1: 快速双击复位按钮来恢复开发板。

Q2:Seeeduino Lorawan 没有 Examples > LoRaWAN

A2: 点击这里获取。

原理图在线查看器​

资源​

项目​

LoRa IoTea:应用于茶园的自动信息收集系统。它是智能农业信息收集的一部分。

技术支持与产品讨论​


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

Loading Comments...