-
Notifications
You must be signed in to change notification settings - Fork 6
Description
如果没有建立私人的 LoRa 网络,请先阅读 建立自己的私人 LoRa 网络。
现在您已经设置了网关,可以到达互联网,现在该安装和配置 LoRa 数据包转发器了,这样就有一个发送 LoRa 数据包的地方了。
安装 LoRa 数据包转发器
LoRa 数据包转发器是一个在网关上运行的开源应用程序,将捕获的 LoRa 数据包转发到您选择的主机。 你可以安装数据包转发器并将其配置为将其数据发送到 IoT-X。
要安装数据包转发器,请按照以下说明进行操作:
Kerlink IoT station
Kerlink IoT 站随附安装的数据包转发器。 运行 ps | grep pkt 来验证它是否已经在运行。 您可以通过 find / -name global_conf.json 找到数据包转发器的位置。
MultiTech Conduit
按照本文档的步骤。
Raspberry Pi和IMST iC880A
- 克隆
Lora-net / packet_forwarder存储库。 - 查看 v2.2.1 标签
- git checkout v2.2.1。 - 在“basic_pkt_fwd”文件夹中,运行
make构建数据包转发器。
配置LoRa数据包转发器
接下来,您需要一个数据包转发器的配置文件,您可以从IoT-X网站检索。
- 登录到您的帐户。
- 您被重定向到仪表板页面。
- 在左侧栏中,单击 Lora > Gateways。
- 单击添加网关注册新网关。
- 有一个向导,按照步骤操作。
- 你会进入网关页面,该页面具有你的平台的配置文件,单击下载配置下载配置文件。
- 在网关上,在数据包转发器目录中,找到
global_conf.json文件,并将其替换为下载配置。 - (Re)启动数据包转发器。
- 网关显示为在 IoT-X 网关页面上连接,你可以在设备上工作。
构建设备
现在开始有趣的工作:构建可以通过 LoRa 网络发送传感器数据的设备。 例如,您可以使用 PIR 传感器创建简单的运动传感器(在当地五金店不到10欧元,从中国订购时为2欧元)。 当然,您可以使用任何其他传感器。
一些关于写固件的笔记
不断发送数据
由于占空比限制,您不能持续发送数据。这是使用开放频谱的要求。如果发送太快,发送将失败。允许发送的速度取决于你使用的扩展因子。使用更高的扩展因子,发送消息需要更长的时间 - 尽管网关将收到它的机会增加。因此,你需要等待更久才能再次发送。在开发过程中,可以将扩展因子设置为 SF7(最低),因此可以每6-7秒发送一次。
LoRaWAN 具有称为自适应数据等级(ADR)的功能,网络可以通过该功能来控制扩展因子。你可能希望启用此功能。
阻塞管脚
LoRa 屏蔽的一个缺点是它会阻塞所有引脚。你可以在屏蔽背面焊接一些新的接头,以添加新的外围设备,或者使用像 nRF51-DK 这样的微控制器,其引脚可用两次,一次通孔连接器,一次通过母头。
在 IoT-X 上注册设备
LoRa 是端对端加密的,带有两组密钥。你需要将这些密钥和设备 ID 编程到设备固件中。将使用这些密钥签署邮件,并由网络服务器进行验证。
生成新的密钥对:
-
转到 IoT-X 仪表板。
-
单击应用程序
-
如果还没有应用程序,请单击创建应用程序,然后填写该表单。
-
在“添加设备”表单中的“设备类型”下,选择“OTA”。
-
在添加设备表单中,在设备 EUI:
- 如果你的设备有一个贴纸,说明 EUI(所有MultiTech设备),请输入此 EUI。
- 如果你的设备没有贴纸(所有屏蔽),则生成一个8字节的随机数,并输入不带空格的值。
-
在“添加设备”表单中的“设备 EUI”下,输入不带空格的16字节随机数。
-
在添加设备表单中的激活此设备下,启用复选框。
-
设备已激活。 单击 LoRa>应用程序>你的应用程序名称 返回到应用程序概述。
-
点击你刚刚创建的设备,并记下 App EUI 和 App Key。
现在你有 keys,可以开始编写软件。
注意:确保你在在线编译器的右上角选择了正确的开发板。
使用 LoRa 屏蔽
将样板程序导入在线 IDE
- 在 ARM mbed 上注册一个帐户,它将托管您将使用的在线编译器。
- 在“平台”页面上找到您的微控制器。
- 单击添加到您的 mbed 编译器。
- 去 LoRaWAN-lmic 应用程序。
- 单击导入此程序。
- 你被重定向到在线编译器,可以在其中给程序一个名称。
注意:确保您在在线编译器的右上角选择了正确的板。
设置屏蔽频率
你需要为你拥有的屏蔽版本(以及您在世界各地)设置正确的频率。
打开 LMiC / lmic.h,找到以下几行:
// mbed compiler options
//#define CFG_eu868
#define CFG_us915
确保正确的行被取消注释,具体取决于您拥有的屏蔽版本。
如果你有 SX1276MB1LAS:
//#define CFG_eu868
#define CFG_us915
如果你没有 SX1276MB1LAS:
#define CFG_eu868
//#define CFG_us915
添加 IoT-X keys
现在,将密钥从 IoT-X 编程到设备固件中。 你将需要“应用程序”页面和“设备”页面上的键。
打开 main.cpp,并将 OVER_THE_AIR_ACTIVATION 设置为1:
#define OVER_THE_AIR_ACTIVATION
然后,更改以下行:
// application router ID (LSBF)
static const uint8_t AppEui[8] =
{
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
};
// unique device ID (LSBF)
static const u1_t DevEui[8] =
{
0x01, 0x23, 0x45, 0x67, 0x89, 0xAB, 0xCD, 0xEF
};
// device-specific AES key (derived from device EUI)
static const uint8_t DevKey[16] =
{
0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
};
- 将 AppEui 设置为应用程序的唯一标识符(紫色框)。
- 将 DevEui 设置为设备的设备 EUI(绿色框)。
- 将 DevKey 设置为设备的应用程序键(红色框)。
注意:将它们变成十六进制数字。 例如,5ADA30AA 的密钥在你的代码中应该是 0x5A,0xDA,0x30,0xAA。
验证设置
现在您可以通过单击“编译”按钮来验证设置是否有效。
当编译成功时,下载一个文件。
将开发板插入计算机(通过micro-USB)将其作为 USB 大容量存储设备进行安装。 在大多数情况下,你不需要驱动程序,但你可以在此找到驱动程序,以防万一。
设备挂载后,将编译的文件拖到板上。 这将导致设备启动。 然后,你可以看到进入 IoT-X 应用程序页面的消息:
切换到手动发送
默认情况下,应用程序会自动发送数据。 如果要更改此操作,请从 main.cpp 中删除这些行:
if( txOn == true )
{
//Sends frame every APP_TX_DUTYCYCLE +/- APP_TX_DUTYCYCLE_RND random time (if not duty cycle limited)
os_setTimedCallback( &sendFrameJob,
os_getTime( ) + ms2osticks( APP_TX_DUTYCYCLE + randr( -APP_TX_DUTYCYCLE_RND, APP_TX_DUTYCYCLE_RND ) ),
onSendFrame );
////Sends frame as soon as possible (duty cycle limitations)
//onSendFrame( NULL );
}
现在,你可以随时添加发送消息的代码,例如当有人在 PIR 传感器前移动时中断触发。 例如
InterruptIn pir(D5);
static void prepareTxFrame( void )
{
LMIC.frame[0] = pir; // current state of the pir sensor
#if ( LORAWAN_CONFIRMED_MSG_ON == 1 )
LMIC.frame[1] = LMIC.seqnoDn >> 8;
LMIC.frame[2] = LMIC.seqnoDn;
LMIC.frame[3] = LMIC.rssi >> 8;
LMIC.frame[4] = LMIC.rssi;
LMIC.frame[5] = LMIC.snr;
#endif
}
void movement() {
onSendFrame(NULL);
}
void no_movement() {
onSendFrame(NULL);
}
int main( void ) {
pir.rise(movement);
pir.fall(no_movement);
// ... lora related things
}
更改 prepareTxFrame 函数的内容以更改你要发送的数据(也更新 LORAWAN_APP_DATA_SIZE)。现在,只要 PIR 传感器改变状态(从运动到不运动,而另一方面),你将会收到一条消息。
使用 MultiTech mDot
将样板程序导入在线 IDE
- 在 ARM mbed 上注册一个帐户,它将托管您将使用的在线编译器。
- 转到 MultiTech mDot 平台页面。
- 单击添加到您的 mbed 编译器。
- 转到 Dot-Examples 项目页面。
- 单击导入此程序。
- 你被重定向到在线编译器,可以在其中给程序一个名称。
- 导入后,右键单击应用程序,然后选择“导入库”>“从URL”。
- 在模式中,在源URL下,输入:https://developer.mbed.org/teams/MultiTech/code/libmDot-mbed5/ ,然后单击导入。
注意:确保您选择编译器右上角的正确板。
添加IoT-X键
现在,将密钥从 IoT-X 编程到设备固件中。 你将需要“应用程序”页面和“设备”页面上的键。打开
示例 \src\ota_example.cpp.cpp,并更改以下代码。
static uint8_t network_id[] = { 0x6C, 0x4E, 0xEF, 0x66, 0xF4, 0x79, 0x86, 0xA6 };
static uint8_t network_key[] = { 0x1F, 0x33, 0xA1, 0x70, 0xA5, 0xF1, 0xFD, 0xA0, 0xAB, 0x69, 0x7A, 0xAE, 0x2B, 0x95, 0x91, 0x6B };
static uint8_t frequency_sub_band = 0;
static bool public_network = false;
- 将 network_id 设置为应用程序的唯一标识符(紫色框)。
- 将 network_key 设置为设备的应用程序键(红色框)。
- 将 public_network 设置为 true。
注意:将它们变成十六进制数字。 例如,5ADA30AA 的密钥在你的代码中应该是0x5A,0xDA,0x30,0xAA。
另外,将
update_ota_config_name_phrase(network_name, network_passphrase, frequency_sub_band, public_network, ack);
// update_ota_config_id_key(network_id, network_key, frequency_sub_band, public_network, ack);
改为:
// update_ota_config_name_phrase(network_name, network_passphrase, frequency_sub_band, public_network, ack);
update_ota_config_id_key(network_id, network_key, frequency_sub_band, public_network, ack);
验证设置
现在您可以通过单击“编译”按钮来验证设置是否有效。
当编译成功时,下载一个文件。
将开发板插入计算机(通过micro-USB)将其作为 USB 大容量存储设备进行安装。 在大多数情况下,您不需要驱动程序,但您可以在此找到驱动程序,以防万一。
设备挂载后,将编译的文件拖到板上,将启动设备。然后,你可以看到进入 IoT-X 应用程序页面的消息:
切换到手动发送
默认情况下,应用程序会自动发送数据。 如果要更改,可以更 sleep_wake_rtc_or_interrupt(); 调用,并将其替换为sleep_wake_interrupt_only();. 然后发送只有当您将唤醒针拉高时才会发生。
使用 MQTT 上的数据
现在,网络的前三部分正在运行,现在是在一个小应用中使用传感器数据的时候了。要从 IoT-X 网络中检索数据,它们提供了一个 MQTT 服务器。 MQTT 是一个支持良好的轻量级消息传递协议,大多数编程语言提供了一个 MQTT 客户端库。您可以编写一个 node.js 应用程序,该应用程序在检测到移动时告诉你。通过检查 LoRa有 效负载的第一个字节(1 =运动,0 =无运动)来执行此操作。
创建MQTT用户
- 在 IoT-X 中:转到服务> MQTT用户。
- 点击添加公司。
- 创建用户名和密码 - 您将使用这些凭据通过MQTT进行身份验证。添加新的MQTT用户
创建一个 node.js 应用程序
现在可以使用任何MQTT客户端连接到IoT-X MQTT服务器。这是node.js中的一个例子。
- 安装 node.js.
- 打开终端或命令窗口,并创建一个新的文件夹。
- 在这个文件夹中,运行 npm install mqtt。
- 创建一个新文件 iotx.js,并添加以下内容:
var mqtt = require(‘mqtt’);
var client = mqtt.connect(‘mqtts://lora-eu.iot-x.com’, {
username: ‘YOUR_USERNAME’,
password: ‘YOUR_PASSWORD’
});
client.on(‘connect’, function () {
console.log(‘Connected to Stream MQTT’);
client.subscribe(‘/lora/+/message’);
});
client.on(‘message’, function (topic, message) {
var deveui = (topic.split(‘/’).filter(f=>!!f)[1]).toUpperCase();
message = JSON.parse(message);
if (!message.gateway_info) {
/* downlink */
return;
}
var buffer = [].slice.call(Buffer.from(message.data, 'base64'));
if (buffer[0] === 1) {
console.log('Movement detected (' + deveui + ')');
}
else {
console.log('No movement detected (' + deveui + ')');
}
});
client.on(‘error’, err => console.error(‘Stream MQTT error…’, err));注意:使用您在上一节中创建的 MQTT 凭据替换 YOUR_USERNAME 和 YOUR_PASSWORD。
- 从终端,运行节点 iotx.js.
你现在拥有一个功能齐全的 LoRa 网络,其中包含设备,网关和应用程序。
结论
LoRa 是一项具有很大潜力的优秀技术,特别是因为任何人都可以建立网络,并开始建立投影相对较小的远程 IoT 设备。 我们希望本指南帮助你开始使用,我们很乐意看到你使用 LoRa 和 ARM mbed 制作的产品!




















