sundway / blog

oh~~
110 stars 6 forks source link

在 LORIOT 创建你的 LoRa 网络 #10

Closed sundway closed 5 years ago

sundway commented 7 years ago

如果没有这样做,请先阅读建立创建你自己的私有 LoRa 网络

现在你已经建立了网关,数据可以到达互联网,是时候安装 LORIOT 软件了,它可以发送 LoRa 数据包。

注意在 Kerlink IoT 站:通常,Kerlink IoT 站预先配置了数据包转发器(运行 ps | grep pkt 以查看是否正在运行)。如果是这种情况,请通过从 /etc/init.d 中删除该条目来确保数据包转发器在启动时不启动。

安装 LORIOT 软件

提示:使用像 scp 这样的工具将二进制文件从计算机复制到网关。例如: scp〜/ Downloads / loriot_pi_2_iC880A_USB_1.0.1.tar pi@192.168.2.7:〜/

提示:LORIOT 有一个“网关点击”,可以从你的网关页面访问。这允许你查看网关正在拾取哪些消息,这在调试时非常有用。

网关启动时自动启动LORIOT二进制文件

Kerlink IoT站

如果您遵循 LORIOT 文档中的安装步骤,则每当网桥引导时,二进制文件自动启动。

MultiTech Conduit

Raspberry Pi and IMST iC880A

当Raspberry Pi启动时,按照此页面上的步骤启动LORIOT二进制文件。

构建设备

现在开始有趣的工作:构建可以通过 LoRa 网络发送传感器数据的设备。例如,您可以使用 PIR 传感器创建运动传感器(当地五金店不到10欧元,从中国订购时为2欧元)。当然,你可以使用任何其他传感器。

一些关于写固件的笔记

不断发送数据

由于占空比限制,你不能持续发送数据。这是使用开放频谱的要求。如果发送太快,发送将失败。允许发送的速度取决于你使用的扩展因子。以较高的扩展因子,尽管网关收到的机会增加,但发送消息需要更长时间。因此,您需要等待更长时间才能再次发送。在开发过程中,您可以将扩展因子设置为SF7(最低),它可以每6-7秒发送一次。

LoRaWAN 具有称为自适应数据评估(ADR)的功能,网络可以通过该功能来控制扩展因子。 你可能希望启用此功能。

阻塞针

LoRa 屏蔽的一个缺点是它会阻塞所有引脚。您可以在屏蔽背面焊接一些新的接头以添加新的外围设备,或者使用像 nRF51-DK 这样的微控制器,其引脚可用两次,一次通孔连接器,一次通过母头。

在 LORIOT 上注册设备

LoRa 是端对端加密的,带有两组密钥。你需要将这些密钥和设备 ID 编程到设备固件中。你将使用这些密钥签署邮件,并由网络服务器进行验证。

生成新的密钥对:

现在你有 keys,你可以开始编写软件。

使用LoRa屏蔽

将样板程序导入在线IDE

注意:确保您选择编译器右上角的正确微处理器。

设置屏蔽频率

你需要为你拥有的屏蔽版本(以及你在世界上的哪个位置)设置正确的频率。

打开 LMiC / lmic.h,找到以下几行:

// mbed compiler options
//#define CFG_eu868                                   
#define CFG_us915  

确保正确的行被取消注释,具体取决于你拥有的屏蔽版本。

如果使用 SX1276MB1LAS:

//#define CFG_eu868                                   
#define CFG_us915   

如果使用 SX1276MB1MAS:

#define CFG_eu868                                   
//#define CFG_us915  

添加 LORIOT keys

将 keys 从 LORIOT 编程到设备固件中。

打开 "main.cpp",并更改以下行:

#define LORAWAN_DEV_ADDR                            ( uint32_t )0x12345678

static uint8_t NwkSKey[] =
{
    0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
    0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
};

// application session key
static uint8_t ArtSKey[] =
{
    0x2B, 0x7E, 0x15, 0x16, 0x28, 0xAE, 0xD2, 0xA6,
    0xAB, 0xF7, 0x15, 0x88, 0x09, 0xCF, 0x4F, 0x3C
};

验证设置

现在,您可以通过单击编译按钮来验证设置是否工作。

当编译成功时,下载一个文件。

将开发板插入计算机(通过 micro-USB)将其作为 USB 大容量存储设备进行安装。在大多数情况下,您不需要驱动程序,但你可以在此找到驱动程序,以防万一。

设备挂载后,将编译好的文件拖到板上。这将导致设备启动。然后,你可以看到消息进入 LORIOT 设备页面:

切换到手动发送

默认情况下,应用程序会自动发送数据。如果要更改此选项,请从 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

添加 LORIOT 键

现在,将密钥从 LORIOT 编程到设备固件中。

打开 main.cpp,并从 LORIOT 将大码头 DevAddr(绿色),NWKSKEY(橙色)和 NWKSKEY(黄色)复制到应用程序中:

static const char LORIOT_DEV_ADDR[]  = "AABBCCDD"; // green
static const char LORIOT_NWK_S_KEY[] = "E8A25EBD07F85800E08478A041FACBA7"; // orange
static const char LORIOT_APP_S_KEY[] = "BE8EF84E745D0AB14D4507B0BA600555"; // yellow

验证设置

现在, 你可以通过单击编译按钮来验证设置是否工作。

当编译成功时,下载一个文件。

将开发板插入计算机(通过 micro-USB)将其作为 USB 大容量存储设备进行安装。在大多数情况下,您不需要驱动程序,但你可以在此找到驱动程序,以防万一。

设备挂载后,将编译好的文件拖到板上。这将导致设备启动。然后,你可以看到消息进入 LORIOT 设备页面:

切换到手动发送

默认情况下,应用程序会自动发送数据。如果要更改,请删除 send_data();调用,并手动调用(例如从中断)。有关更多信息,请参阅上面有关 LoRa 屏蔽的部分。

构建Web应用程序

现在网络的前三个部分一句就绪,到了在一个小应用程序中使用传感器数据的时候了。 LORIOT 提供了将数据从服务中删除的方法,但最简单的方法是使用 Websocket。您可以编写一个 Web 应用程序,当检测到移动时将页面变红,当一切正常时,都会显示绿色。您可以通过检查 LoRa 有效负载的第一个字节(1=运动,0=无运动)来执行此操作。

1.在 LORIOT 中:转到你的信息中心,然后单击应用程序>示例应用程序>输出。 2.将输出类型更改为 WebSocket。

3.在当前输出设置下复制 URL 和令牌,并将其粘贴到下面的代码示例中:

<!DOCTYPE html>
<html>
<head>
    <title>PIR Sensor monitoring!</title>
</head>
<body>
    <p id="status">Connecting...</p>
    <script>
    var token = 'YOUR_AUTHENTICATION_TOKEN_HERE';
    var url = 'YOUR_TARGET_URL_HERE (incl {token} part)';
    var ws = new WebSocket(url.replace('{token}', token));
    ws.onopen = function() {
        document.querySelector('#status').textContent = 'Connected';
    };
    ws.onclose = function() {
        document.querySelector('#status').textContent = 'Disconnected';
    };
    ws.onmessage = function(e) {
        console.log('onmessage', e);
        var data = JSON.parse(e.data);
        if (data.cmd !== 'rx') return;

        switch (Number(data.data.slice(0, 2))) {
            case 0: document.body.style.backgroundColor = 'green'; break;
            case 1: document.body.style.backgroundColor = 'red'; break;
        }
    };
    </script>
</body>
</html>

您现在拥有一个功能齐全的 LoRa 网络,其中包含设备,网关和 Web 应用程序:

结束语

LoRa 是一项具有很大潜力的伟大技术,特别是因为任何人都可以建立网络,并开始建立投影相对较小的远程 IoT 设备。我们希望本指南帮助您开始使用,我们很乐意看到你使用 LoRa 和 ARM mbed 制作的内容! 原文链接:https://docs.mbed.com/docs/lora-with-mbed/en/latest/iotx/