我正在尝试使用可通过Arduino和Dragino Lora Shield编程的传感器来构建LoRaWan网络。
我发现了许多用于创建网关的解决方案,包括与另一台Dragino Lora Shield或iC880A连接的Raspberry Pi ,并且我收到的数据将通过云中的服务器发送。我对网关编程感到很困惑。
- 我需要告诉它连接到节点和服务器吗?还是自动接收数据?
- 我是否对服务器进行编程以使其连接到网关或直接连接到节点?
我正在尝试使用可通过Arduino和Dragino Lora Shield编程的传感器来构建LoRaWan网络。
我发现了许多用于创建网关的解决方案,包括与另一台Dragino Lora Shield或iC880A连接的Raspberry Pi ,并且我收到的数据将通过云中的服务器发送。我对网关编程感到很困惑。
Answers:
在典型的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
信件/包裹有地址。邮递员/网关从您的邮箱或您放下信件的任何邮箱中提取信件。它一直处理到收件人。如果地址错误,它将不会到达,您应该得到通知。收件人可以通过同一系统将一封信发送给您。
无论您是要使用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库和示例草图之类的东西。首先,您必须根据设备硬件确定如何配置设备的Pinmap才能正常工作。然后,如果您要使用TTN,请按照许多指南中的任何指南进行注册,并获取放入草图代码中所需的键。您还必须确保以适当的频率进行传输,以便与您所在区域的网关对齐。