我正在尝试使用可通过 Arduino 和Dragino Lora Shield编程的传感器构建 LoRaWan 网络。
我找到了许多创建网关的解决方案,包括将 Raspberry Pi 与另一个 Dragino Lora Shield 或与iC880A 连接,我收到的数据将发送到云端的服务器。我对网关编程感到非常困惑。
- 我需要告诉它连接到节点和服务器吗?还是自动接收数据?
- 我是将服务器编程为连接到网关还是直接连接到节点?
我正在尝试使用可通过 Arduino 和Dragino Lora Shield编程的传感器构建 LoRaWan 网络。
我找到了许多创建网关的解决方案,包括将 Raspberry Pi 与另一个 Dragino Lora Shield 或与iC880A 连接,我收到的数据将发送到云端的服务器。我对网关编程感到非常困惑。
在典型的 LoRaWAN 网络中,网关是愚蠢的设备,如 LoRa 联盟所述:
LoRaWAN 网络架构通常采用星形拓扑结构,其中网关是一个透明的桥梁,在终端设备和后端的中央网络服务器之间中继消息。
因此,网关只需要配置为连接到某些网络服务器,例如开放的 The Things Network。就这样。
网关通常被称为“数据包转发器”。因此,网关就是这样做的:它们将所有接收到的 LoRaWAN 数据包转发到某个网络服务器(无论哪个节点发送它),并且它们传输网络服务器所命令的任何内容。因此,节点(终端设备)不会连接到某个网关;相反,他们只是传输并希望一个或多个网关接收他们的传输并将其转发到知道节点的网络服务器。(网关无法读取它们转发的加密数据。)
要将节点连接到网络,可以使用以下两个选项之一“激活”它们:
无线激活 (OTAA)
首先,使用某个网站或 API,每个新节点都使用其唯一的设备 EUI ( DevEUI
)在网络服务器中注册。然后它获得一个公共应用程序 ID ( AppEUI
) 和一个秘密应用程序密钥 ( AppKey
)。这三个值被编程到节点中。
接下来,当第一次准备好发送时,节点使用这些值来创建和传输 LoRaWAN 加入请求。如果这样的请求被一个或多个网关接收到,它被转发到网络服务器,如果被批准,它将告诉一个网关发送一个加入接受。如果由节点接收,则这会为节点提供公共设备地址 ( DevAddr
)、秘密网络会话密钥 ( NwkSKey
) 和秘密应用程序会话密钥 ( AppSKey
)。
每当节点需要传输一些实际数据时,就会使用由加入接受确定的值(以及在加入时从零开始的安全计数器)。只要节点将其保留在内存中(并且安全计数器尚未耗尽),激活就有效,通常持续数月甚至数年。每当丢失时,节点可以发送新的加入请求并获得新的秘密。
个性化激活 (ABP)
在这里,当使用某个网站或 API 进行注册时,节点会立即获得设备地址 ( DevAddr
)、秘密网络会话密钥 ( NwkSKey
) 和秘密应用程序会话密钥 ( AppSKey
),这些都被编程到节点中并且永远不会改变。节点在开始发送任何数据之前不需要先发送加入请求,但需要注意安全计数器不会丢失。此外,密钥是特定于给定网络的;APB 使得将节点移动到不同的网络提供商变得困难(如果不是不可能的话)。
Arjan 的回答很好。技术的。我想提供一个不同风格的答案,以帮助那些新的并且正在努力将有关网关以及数据包如何来回移动的图片放在一起的人。
比喻...
You > Letter > Mailbox > Mailman > Post Office Dist > Recipient
|----------------- TX -------------------|
Node > Packet > Transmission > Gateway > Network Server > Application
|----------------- RX -------------------|
Node < Packet < Transmission < Gateway < Network Server < Application
Letter/Packet 有一个地址。邮递员/网关从您的邮箱或您投递信件的任何邮箱中提取信件。它一直被处理到收件人。如果地址错误,它将不会到达,您应该收到通知。收件人可以通过同一系统给您回信。
无论您是要使用The Things Network还是尝试使用LoRaServer 之类的东西构建您自己的私有服务器,您都需要在您的节点/节点/终端设备范围内建立一个网关来来回转发消息。将节点代码中的不同键视为类比中字母上的地址。
您可以在他们的地图页面上确定您所在地区是否已经有一个 TTN 网关,如果您的节点有一个网关,您的消息应该到达您的 TTN(假设您已注册并将密钥应用到您的节点)。如果没有触手可及的网关,您可以构建自己的网关。有很多选择可以做到这一点。
关于配置网关,根据您选择的库,您通常只需要在源代码或 global_conf.json 或 local_conf.json 文件中配置一些参数。
这是使用single_chan_pkt_fwd修补 RFM9X(基于 SX1276)和 RPI3 B+ 的示例顺便说一句,它不会提供回复......请记住,这只是为了修补/测试。转发器和下面的 global_conf.json 示例都不是即插即用的,不应依赖于正确的 LoRaWan 网络。合规网关有 3 个无线电,可以处理多个通道并同时发送/接收。这个例子只是从单通道上的节点接收,不是很可靠,但确实存在配置。每个值都取决于您使用的硬件和您所在的位置……或者网关所在的位置,例如美国、欧盟等……还值得注意的是,这样的 global_conf.json 不是一个大小适合所有。不同的库通常为多个无线电、频道等提供更多配置选项……仅供参考。
{
"SX127x_conf": // depending on your hardware/radio this could be something like sx1301..., sx127x...., etc..
{
"freq": 903000000, // depending on whether US (900 range), EU (800 range) or other...
"spread_factor": 7, // look this up
"pin_nss": 10, // wiringpi value = physical pin #24
"pin_dio0": 5, // wiringpi value = physical pin #18
"pin_rst": 21 // wiringpi value = physical pin #29
},
"gateway_conf":
{
"ref_latitude": 0.0,
"ref_longitude": 0.0,
"ref_altitude": 2,
"name": "WHATEVER NAME",
"email": "WHATEVER@EMAIL.TLD",
"desc": "WHATEVER DESC",
"servers":
[
{
"address": "localhost", // this one is private so localhost, but TTN lookup address
"port": 1700, // this one is private so localhost, but TTN lookup port
"enabled": true
} // you could add more... say you have a private one and TTN
]
}
}
假设您正在使用 Arduino 设备和代码构建节点。你使用类似 LMIC-Arduino 库和示例草图的东西。您首先必须根据设备硬件确定如何配置引脚图以使设备正常工作。然后,如果您打算使用 TTN,您可以按照许多指南中的任何一个来注册并获取您放入草图代码中的所需密钥。您还必须确保以适当的频率进行传输,例如……与您所在地区的网关对齐。