你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

使用受信任对象TO136 SE将LoRaWAN节点保护到AWS IoT

[复制链接]
点点&木木 发布时间:2018-12-17 19:37
从基于Trusted Objects-AvnetTO136 SE的安全LoRaWAN节点到AWS IoT,使用STM32 Nucleo板,Kerlink网关和Actility服务器。
15-1.jpg
在这个项目中使用的东西
  硬件组件  
  
   
STM32 Nucleo    P-NUCLEO-LRWAN1
   
LoRaWAN器件(带Semtech SX1272屏蔽的STM32 Nucleo-L073RZ板)
   
  
×
1
  
   
安富利和可信对象 - TO136
   
可信对象安全元素
   
  
×
1
  
   
Kerlink    iFemtoCell
   
LoRaWAN网关
   
  
×
1
  软件应用程序和在线服务  
  
   
Eclipse氧气
   
C / C ++ IDE
   
  
  
   
STMicroelectronics    I-CUBE-LRWAN
   
LoRaWAN软件堆栈
   
  
  
   
灵活性ThingPark
   
LoRaWAN网络/应用服务器
   
  

   
   
后端
   
  
介绍
可信对象提供LoRaWAN安全堆栈。该堆栈可以轻松集成到任何LoRaWAN项目中。
该项目展示了如何使用受信任对象-Anetnet TO136安全元素,Kerlink网关,Actility服务器和AWS IoT后端来保护LoRaWAN节点。
15-2.jpg
注意:屏幕截图值是示例
网关设置
KerlinkiFemtoCell网关安装和配置记录在Kerlink Wiki上
网关需要通过DHCP服务器连接到IP网络。
按照本指南设置网关。
网关配置
登录ActilityThingPark通过点击登录在标题栏。
仪表板上,单击左列中的“ 网络管理器 ”以配置网关。
单击左列中的基站。单击“ 添加基站”部分中的“ 创建”按钮以执行此操作。
使用为“灵活性”预先配置的网关信息填写表单。如果未预先配置网关,请按照以下步骤进行配置:
·        连接到您的Actility ThingPark 帐户
·        打开FAQ
·        选择您的网关标签
·        打开部分如果没有为partners.thingpark.com预先配置GW,该怎么办
·        按照网关的步骤进行操作
该过程应该为您提供表单信息。(LRR ID是网关MAC地址的最后4个字节)。
单击顶部的“ 创建按钮以创建网关。
15-3.jpg
服务器配置
仪表板上,单击左列中的“ 设备管理器 ”以配置应用程序和设备。
15.jpg
点击设备在左栏注册你的设备。在“ 添加设备”部分中,单击“ 创建”按钮以创建新设备。使用设备信息填充所有字段(使用可信对象-Anetnet TO136 SE中配置的DevEUI)。
在“ 网络参数”部分中选择连接计划(使用DEV Connectivity供应商进行测试)。在Applicationlayer handling部分中选择应用服务器路由配置文件。
单击顶部的创建按钮以创建设备。
15-4.jpg
后端配置
AWS IoT是物联网设备的后端,与所有其他AWS服务连接。
按照ActilityThingPark DX AWS配置指南配置AWS以允许来自Actility ThingParkDX API的连接。您可以忽略最后一部分,因为我们将使用WebSocket将Actility ThinkPark DX安全地连接到AWS IoT。
使用您的凭据连接到ActilityThingPark DX 。连接后,将生成令牌。选择DXDataflow API的Swagger-UI链接。 15-5.jpg
打开POST /bridgeDataflows部分,并使用followingdata注册桥数据流(用AWS中的数据替换值):
{   
    "id": "<unique id of your choice>",   
    "name": "Dataflow for AWS IoT",   
    "bidirectional": true,   
    "binder": {        
        "classRef": "LRC_HTTP",        
        "properties": {               
            "deviceEUIList": "<comma separated device EUIs>"   
        }   
    },   
    "driver": {        
        "classRef": "ASCII"   
    },   
    "connectors": [        
        {            
            "classRef": "AWSIoT",            
            "properties": {               
                "accountPrefix": "<account prefix>",            
                "region": "<region>",               
                "protocol": "WSS",               
                "deviceType": "<device type>",               
                "accessKeyId": "<access key ID>",               
                "secretAccessKey": "<secret access key>"         
            }        
        }   
}
15-6.jpg
服务器必须返回代码201(成功)。注意ref值作为响应,它将用于引用您的数据流。
打开GET /bridgeDataflows / {bridgeDataflowRef}部分,在bridgeDataflowRef字段中填写你的ref,然后选择Try it out!获取数据流状态。
15-7.jpg
您需要等待状态为READY。它将在几个小时内通过Actility进行更新。现在我们需要将上行链路消息路由到ThingPark DX。在Actility ThingPark DX中,选择DX Core API的Swagger-UI链接。
打开GET /设备部分,填写您的devEUI在deviceEUI领域,并选择试试吧!获取您的设备信息。
15-8.jpg
注意ref值作为响应,它将用于引用您的设备。
15-9.jpg
打开PUT / devices / {deviceRef}部分,填写你的ref in deviceRef字段,设备字段中的以下JSON ,然后选择Try it out!更新您的设备信息。
{   
    "processingStrategyId": "DATAFLOW"
}
15-10.jpg

您的设备现已配置为将其上行链路消息发送到AWS IoT。
IDE设置
我们需要为我们的STM32平台交叉编译源代码。下载并安装Eclipse的C / C ++版本。在OpenSTM32网站上创建一个帐户。按照本指南从Eclipse安装System Workbench for STM32。
设备设置
由于服务器现已完全配置,我们最终需要设置设备。
首先,我们需要I-CUBE-LRWAN软件代码(我们编写这些代码之日的版本1.1.4),它将用作我们的安全元素集成的基础。
15-11.jpg
下载档案并解压缩。源代码已包含Eclipse(和其他IDE)项目文件。打开Eclipse,然后选择FileImport ...,打开General选项卡并选择Existing Projects into Workspace
15-12.jpg
Select root directory,选择Browse,然后导航到Projects / Multi / Applications /LoRa / End_Node / SW4STM32 / STM32L073RZ-Nucleo / sx1272mb2das /
15-13.jpg
选择“ 完成”以完成项目的导入。将带有SX1272护罩的ST L073RZ通过USB端口插入计算机。
15-14.jpg
应该出现一个新的串行设备(Linux上的/ dev / ttyACM0)。打开串行控制台以查看输出日志:
sudo picocom -b115200 --imap lfcrlf,crcrlf --omap delbs,crlf /dev/ttyACM0
选择“运行”,“运行”以编译源并运行项目。
该程序应该正常启动。加入过程可能不会成功,因为AppEUI,DevEUI和AppKey是STM32CubeExpansion默认值。我们现在可以忽略,因为我们将使用安全元素配置。
15-15.jpg
安全的设备
一切正常,但安全级别较低。
我们需要通过集成Trusted Objects-Avnet TO136 SE来保护设备。
将受信任对象的库(libTO)添加到新项目Drivers / BSP /TO136文件夹中。必须在之前的项目中创建此文件夹。
不得导入受信任对象库示例和包装器(stm32_hal.c除外)。
必须添加文件夹驱动程序/ BSP / TO136 / libTO / src和Drivers / BSP / TO136 / libTO /include以包含项目的路径以允许包含新标题:
选择Project,Properties并打开C / C ++ General选项卡。单击路径和符号,包含选项卡和GNU C语言。按添加...,工作区...,然后浏览项目文件以选择要添加的文件夹。
首先,我们需要在堆栈初始化期间初始化Trusted Objects库。为此,请使用以下命令应用补丁libto-init.patch:
cd <project root directory>patch -p1 < <patch directory>/libto-init.patch
然后我们需要修改加密层。STM32CubeExpansion LRWAN源已经提供了默认软件LoRa MAC加密层实现。它位于STM32CubeExpansion源树的Middlewares / Third_Party / Lora /Mac目录中。
我们将使用Trusted Objects-Avnet TO136 SE加密层实现而不是此默认实现。将提供的文件(LoRaMacCrypto_TO.c/ h)导入Middlewares /Third_Party / Lora / Mac目录。
LoRaMacCrypto_TO.c 文件实现了LoRaMacCrypto_TO.h描述的新API 。
必须添加文件夹中间件/ Third_Party /Lora / Mac以包含项目的路径以允许包含新标头。使用与以前相同的步骤。
当我们更改加密API时,我们需要通过更改对旧API的所有调用来调整代码。
为此,请使用以下命令应用补丁new-cryptography-layer.patch
cd <project root directory>patch -p1 < <patch directory>/new-cryptography-layer.patch
需要在构建过程中添加以下预处理器定义:
·        TO_SE:使用可信对象-Avnet TO136 SE LoRa MAC加密层而不是软件实现(请参阅可信对象LoRa MAC加密层)
·        TO_ENABLE_LORA:启用libTO LoRa API
·        TO_ENABLE_LORA_OPTIMIZED:启用libTO LoRa优化API
选择Project,Properties并打开C / C ++ General选项卡。单击路径和符号,符号选项卡和GNU C语言。按添加...,然后输入符号名称和值(可选)。
单击确定,然后单击应用并关闭以进行验证。
将可信对象屏蔽插入电路板和SX1272屏蔽层之间。
15-16.jpg
选择“运行”,“运行”以编译已修改的源并运行该项目。
该程序应该正常启动。现在,加入过程将成功,因为AppEUI,DevEUI和AppKey是受信任对象-Anetnet TO136 SE配置值。
数据定制
默认情况下,STM32CubeExpansion端节点在LoRa端口2上发送包含一些传感器值的有效负载。
您可以通过编辑文件Projects / Multi / Applications /LoRa / End_Node / src / main.c的发送功能来更改此设置。
在本演示中,我们将保留默认值。
AWS中的数据
该项目的最初目的是在AWS IoT中获取LoRaWAN设备数据。可以使用AWS IoT MQTT客户端查看设备数据。您需要订阅主题才能查看数据(使用#topic查看所有内容)。主题可以是特定于应用程序服务器,也可以是AWS特定的(此处列出)
15-17.jpg
任何连接到AWS的MQTT客户端都可以订阅设备主题并处理数据。
代码如下:
Fromef0ac1a61090cabf26197dfd676ef99d42402555 Mon Sep 17 00:00:00 2001
From: Ugo RENNER <u.renner@trusted-objects.com>
Date: Tue, 14 Nov 2017 14:04:57 +0100
Subject: [PATCH 1/2] libTO initialization
---
Middlewares/Third_Party/Lora/Core/lora.c           | 18 ++++++++++++++
.../Multi/Applications/LoRa/End_Node/src/main.c    | 28 ++++++++++++++++++++++
2 files changed, 46 insertions(+)
diff --gita/Middlewares/Third_Party/Lora/Core/lora.cb/Middlewares/Third_Party/Lora/Core/lora.c
index 78a0a34..53b52aa 100644
---a/Middlewares/Third_Party/Lora/Core/lora.c
+++ b/Middlewares/Third_Party/Lora/Core/lora.c
@@ -51,6 +51,11 @@
#include "lora.h"
#include"lora-test.h"
+#ifdef TO_SE
+#include "TO.h"
+#include "TO_defs.h"
+#endif
+
/*!
  *Join requests trials duty cycle.
  */
@@ -266,12 +271,23 @@ void LORA_Init (LoRaMainCallback_t *callbacks,LoRaParam_t* LoRaParam )
  LoRaMainCallbacks->BoardGetUniqueId( DevEui );  
#endif
   
+#ifdef TO_SE
+  if(TO_lora_get_app_eui(AppEui) != TORSP_SUCCESS) {
+   PRINTF("TO_lora_get_app_eui failed\n");
+  }
+  if (TO_lora_get_dev_eui(DevEui)!= TORSP_SUCCESS) {
+   PRINTF("TO_lora_get_app_eui failed\n");
+  }
+#endif
+
#if( OVER_THE_AIR_ACTIVATION != 0 )
  PRINTF("OTAA\n\r");
  PRINTF("DevEui= %02X", DevEui[0]) ;for(int i=1; i<8 ; i++) {PRINTF("-%02X", DevEui); }; PRINTF("\n\r");
  PRINTF("AppEui= %02X", AppEui[0]) ;for(int i=1; i<8 ; i++) {PRINTF("-%02X", AppEui); }; PRINTF("\n\r");
+#ifndef TO_SE
  PRINTF("AppKey= %02X", AppKey[0]) ;for(int i=1; i<16; i++) {PRINTF("%02X", AppKey); }; PRINTF("\n\n\r");
+#endif
#else
#if (STATIC_DEVICE_ADDRESS != 1)
@@ -283,9 +299,11 @@ void LORA_Init (LoRaMainCallback_t *callbacks,LoRaParam_t* LoRaParam )
  PRINTF("ABP\n\r");
  PRINTF("DevEui= %02X", DevEui[0]) ;for(int i=1; i<8 ; i++) {PRINTF("-%02X", DevEui); }; PRINTF("\n\r");
  PRINTF("DevAdd=  %08X\n\r", DevAddr) ;
+#ifndef TO_SE
  PRINTF("NwkSKey= %02X", NwkSKey[0]) ;for(int i=1; i<16 ; i++) {PRINTF("%02X", NwkSKey); }; PRINTF("\n\r");
  PRINTF("AppSKey= %02X", AppSKey[0]) ;for(int i=1; i<16 ; i++) {PRINTF("%02X", AppSKey); }; PRINTF("\n\r");
#endif
+#endif
        LoRaMacPrimitives.MacMcpsConfirm = McpsConfirm;
        LoRaMacPrimitives.MacMcpsIndication = McpsIndication;
        LoRaMacPrimitives.MacMlmeConfirm = MlmeConfirm;
diff --git a/Projects/Multi/Applications/LoRa/End_Node/src/main.cb/Projects/Multi/Applications/LoRa/End_Node/src/main.c
index 64db291..9598c9b 100644
---a/Projects/Multi/Applications/LoRa/End_Node/src/main.c
+++b/Projects/Multi/Applications/LoRa/End_Node/src/main.c
@@ -53,6 +53,10 @@
#include "vcom.h"
#include "version.h"
+#ifdef TO_SE
+#include <TO.h>
+#endif
+
/* Private typedef-----------------------------------------------------------*/
/* Private define------------------------------------------------------------*/
@@ -184,6 +188,26 @@ int main( void )
   /* Configure the hardware*/
  HW_Init( );
   
+#ifdef TO_SE
+   int ret, i;
+   uint8_t sn[TO_SN_SIZE];
+   ret = TO_init();
+    if (ret == TO_OK) {
+       PRINTF("TO initialized\n");
+       ret = TO_get_serial_number(sn);
+       if (ret ==TORSP_SUCCESS) {
+           PRINTF("TO serial number : ");
+           for (i = 0; i <TO_SN_SIZE; i++)
+                PRINTF("%02X ", sn);
+           PRINTF("\n");
+       } else {
+           PRINTF("Error: unable to get TO serial number\n");
+       }
+   } else {
+       PRINTF("Error: unable to initialize TO\n");
+   }
+#endif
+
   /* USER CODE BEGIN 1 */
   /* USER CODE END 1 */
   
@@ -214,6 +238,10 @@ int main( void )
     /* USER CODE BEGIN 2 */
     /* USER CODE END 2 */
   }
+
+#ifdef TO_SE
+ TO_fini();
+#endif
}
static void LORA_HasJoined(void )
--
2.11.0


收藏 1 评论0 发布时间:2018-12-17 19:37

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
st-img 微信公众号
st-img 手机版