×

与Azure IoT Central的分布式网格集成

消耗积分:0 | 格式:zip | 大小:1.39 MB | 2022-12-20

刘涛

分享资料个

描述

介绍

我们准备去;

将以下无线节点连接到 Azure Sphere;

  • 用于监控门开/关状态的无线霍尔效应传感器,
  • 3 个无线压力、温度和湿度传感器,
  • 无线追踪器。
  • 以上任何一项也可用于通过 GPIO 或 UART 输出进行控制。

我们将使用 GPIO 控制的 LED 来指示状态并说明 Azure IoT Central 控制。

将 Azure Sphere 配置为 Azure IoT Central 和内部节点网络之间传感器和控制数据的透明网关。

配置 IoT Central 仪表板以显示传感器数据并提供简单的控制。

 

概述

分布式数据系统是任何通信节点的系统,每个节点维护数据对象作为一个单一的、连贯的数据系统可访问。我们的公司 Koliada 维护着一个分布式数据系统 (EtherDATA),该系统旨在透明访问和管理小型嵌入式设备上的分布式和复制数据对象。该项目使用 Azure Sphere 和 Azure IoT Central,借助 EtherDATA 有效地监视和控制无线传感器节点。

该系统由安全的 Azure 云平台产品 Azure IoT Central、安全的物联网网关设备 Azure Sphere 和分布式数据系统 EtherDATA 组成,EtherDATA 将数据访问抽象为一组布置为无线网格的无线传感器节点。网格由 EtherMESH 管理,这是一种嵌入式网格协议,也由 Koliada 维护,用于小型、低功耗、嵌入式设备。

传感器和控制数据使用 EtherDATA 通过无线网格进行分发,包括使用 JSON over UART 连接到 Azure Sphere 的网格网关设备。Sphere 在网格和 Azure IoT Central 之间转发数据以进行远程监控。

poYBAGOSfgOAcX0KAAFmWUCBkEw073.png
系统总览
 

部分总结

本文档末尾提供了指向所有组件的详细信息的链接。

蔚蓝

Azure 微软的公共云计算平台。它提供一系列云服务,包括计算、分析、存储和网络服务。用户可以从这些服务中挑选,以在公共云中开发和扩展新应用程序,或运行现有应用程序。

本项目专门使用了 Azure IoT 中央服务。

Azure 物联网中心

Azure IoT Central 是一种完全托管的 IoT 软件即服务解决方案,可以轻松创建连接物理世界和数字世界的产品。您可以通过以下方式将互联产品愿景变为现实:

• 从连接的设备中获得新的见解,为您的客户提供更好的产品和体验。

• 为企业创造新的商机。

pYYBAGOSfgWAe09oAABDejTV3JM075.jpg
Azure IoT Central 概述
 

Azure IoT Central 有四个与 Azure IoT Central 应用程序交互的角色:

• 构建者负责定义连接到应用程序的设备类型并为操作员定制应用程序。

• 操作员管理连接到应用程序的设备。

• 管理员负责管理任务,例如管理应用程序中的用户和角色。

• 设备开发人员创建在连接到您的应用程序的设备上运行的代码。

蔚蓝球体

Azure Sphere 是一个安全的高级应用程序平台,具有用于连接 Internet 的设备的内置通信和安全功能。它包括一个安全、互联、交叉的微控制器单元 (MCU)、一个定制的基于 Linux 的高级操作系统 (OS),以及一个基于云的安全服务,可提供持续、可更新的安全性。

Azure Sphere 硬件、软件和安全服务为设备维护、控制和安全提供了独特的集成方法。硬件架构为连接的设备提供了一个从根本上安全的计算基础,让您可以专注于您的产品。

该软件架构具有在 Microsoft 编写的安全监视器上运行的安全自定义操作系统内核,同样使您能够将软件工作集中在增值物联网和特定于设备的功能上。

poYBAGOSfgmAB2yWAADuz4xumoQ925.png
蔚蓝架构
 

将 Azure Sphere 用作该项目的一部分的优势在于,它为传感器和控制器的内部网络提供了一个高度安全的网关。使用 Sphere 可以降低内部网络的复杂性、成本和功耗,而不会影响整个系统的安全性。

以太数据

EtherDATA 是一个数据定义、存储和访问系统,它使用简单的数据定义范例满足小型分布式节点之间数据复制和通信的需求。EtherDATA 解决了以下架构规则;

逻辑数据独立性

EtherDATA 数据对象通过数据模式进行描述和访问。

物理数据独立性

EtherDATA 数据对象由系统定义的逻辑到物理映射存储和引用,并作为系统服务提供给应用程序。

网络透明度

EtherDATA 可以通过各种网络技术实现,包括但不限于 TCP/IP、以太网和使用各种节点架构的无线技术。通信和节点架构的细节对应用程序是隐藏的。

复制透明度

数据复制改善了引用的局部性,并在发生故障时提高了访问的冗余性。EtherDATA 数据对象可以透明地在网络中的节点或节点组之间进行复制。

碎片透明度

小型嵌入式系统没有资源来存储系统可访问的所有数据,并且任何数据库都必须跨网络节点分段。EtherDATA 向应用程序隐藏了这种碎片。

EtherDATA 不提供关系数据库管理工具。它专门设计用于为小型异构系统轻松抽象数据引用。在 8051 中,EtherDATA 可以部署在少至 5k 字节的 ROM 和可忽略不计的 RAM 占用空间(< 128 字节)中。

在这个项目中,EtherDATA 使用 Koliada 的底层无线网状网络技术 EtherMESH 来实现网状网络连接。

以太网状网络

网状网络是一种网络拓扑结构,其中每个节点不仅要捕获和传播自己的数据,还要充当其他节点的中继。

poYBAGOSfhKAaKZ5AACYz7y8M2g236.png
EtherMESH 概述
 

以太网;

是异质节点的同质网格

  • 所有帧都可以到达所有节点

使用优化的洪水填充算法进行动态路由和传播

  • 单个“广播”传输到达所有本地节点,减少 RF“颤动”。
  • 简单的存储转发架构。
  • 正在申请专利的流量管理优化
  • 消除了对特定节点类型的需求

自同步通信

  • 显着降低配置要求。
  • 消除了比沟通所需的时间更长的清醒时间。

就我们的项目而言,EtherMESH 提供以下主要功能;

1.低功耗

2. 易于部署,以及

3.便于管理。

KoliadaES

KoliadaES 是一个用于异构嵌入式开发的同构模块化嵌入式系统。它既是嵌入式系统开发和实现的范例。

poYBAGOSfhaAEpN3AAFQyDJcpMs160.png
KoliadaES 堆栈
 

我们使用 E3 Embeddeds PIEP 板和 KoliadaES 来快速启动数据节点。

PIEP

PIEP——处理器独立嵌入式平台——E3 Embedded 的模块化硬件系统——利用了模块化嵌入式系统 KoliadaES 的潜力。

PIEP
 

PIEP 系统由多个不同种类的可堆叠板组成,无论是处理器还是外围设备或可互换的分线板。

MCU 架构的改变是通过简单地更换处理器板来实现的,并且在使用 KoliadaES 时,利用相同的源代码和相同的外围设备。

硬件和软件要求

为了设置这个项目,我们需要。

1. 设置终端网关——Azure sphere设备

硬件

  • Azure sphere MT3620套件
  • PIEP-KOLIADA 站栈 x 1

任何 PIEP 处理器板

接线板

USB板

软件

• Windows 10 版本 1607 或更高版本

• Azure 云服务(Azure IoT Central)

工具

• Visual Studio VS2017 15.9+ 或 VS 2019 16.04+

• 用于视觉工作室的 Azure Sphere SDK

• Azure sphere 开发人员命令提示符

2. 设置 KoliadaES 系统

硬件

• EtherDATA 压力/温度/湿度堆栈 x 3

任何 PIEP 处理器板

温度/相对湿度/压力板

USB板

电池板

• EtherDATA 跟踪器堆栈 x 1

任何 PIEP 处理器板

电池板

USB板

• EtherDATA 磁力计堆栈 x 1

任何 PIEP 处理器板

接线板

电池板

USB板

• EtherDATA 站堆栈 x 1

任何 PIEP 处理器板

接线板

USB板

• 外部磁力计传感器

软件

• Windows 10 版本 1607 或更高版本

• KoliadaES SDK

• Visual Studio Code(或任何基于 make 的 IDE)

工具

• Visual Code 1.39 或更高版本(或任何基于 make 的 IDE)

• KoliadaES SDK

poYBAGOSfleAJQfJAAgcYOV8IBk859.png
整套组装硬件
 

在我们的部署中,我们使用了 PIEP Mini TI CC2541 处理器板,但任何启用无线、支持 KoliadaES 的 MCU 都可以与相同的应用程序代码一起使用。

构建系统

该系统由一组无线传感器节点组成,这些节点使用 KoliadaES 的专有网状协议 (EtherMESH) 和分布式数据系统 (EtherDATA) 主动测量数据并相互通信。EtherDATA 与 Azure sphere 集成以将此数据转发到 Azure IoT 中央数据库。

pYYBAGOSfl2Ab53QAACgafumZ5E890.png
 

关键部件是

• 三个压力/温度/湿度节点,每 30 秒记录一次 PHT 数据。

• 用于跟踪资产或人员位置的跟踪器节点。等等,每 10 秒记录一次数据。

• 用于跟踪门或大门状态的磁力计(磁传感器)。

注意:一旦有新的传感器读数或电池值,所有这些都会通过网状网络传输数据。

• 站点节点(网状网络的一部分)从上述节点收集所有传感器和电池数据,并将其传送给

• Azure Sphere 设备(通过UART 或串行通信)。Azure Sphere 能够将从 PIEP Koliada 站接收到的传感器推送到 Azure IoT Central 数据库。

• Azure IoT Central 提供对基于网络的仪表板的访问,该仪表板填充上述接收到的传感器数据,可以使用任何网络浏览器远程监控这些数据。

构建 PIEP-KoliadaES-Sphere-Azure 系统

步骤1

下载并安装 KoliadaESDK(TM)。

按照 KoliadaESDK 说明进行安装 ( https://docs.koliada.com )。

第2步

PIEP节点的组装说明

在开始组装 PIEP 板之前,请确保这些板中的每一个都堆叠在一起,并且排针引脚如下图所示对齐。

poYBAGOSfmeAAf3-AAKjJaGxQgQ130.jpg
 

使用螺钉堆叠所有板以保持它们完好无损。

pYYBAGOhFxuAM4P0AANiJy9_gqE135.jpg
 

现在让我们堆叠此项目所需的电路板。

  • PHT(压力/温度/湿度)堆栈
pYYBAGOhFx6AfJWwAADlaTdZX28387.jpg
PHT(压力/温度/湿度)堆栈
 
  • 跟踪堆栈
poYBAGOhFyGAeQZnAACuD2ovcZM730.jpg
跟踪堆栈
 
  • 磁力计堆栈
pYYBAGOhFy2AB2R-AAFBUsk0TFs852.jpg
 
  • 站栈
pYYBAGOhFzKAKp57AAC0CWqq43o490.jpg
站栈
 

将 KoliadaES下载构建PIEP节点

您可以在我们的 KoliadaES 示例页面 ( https://docs.koliada.com ) 上找到所有网格节点代码。

构建并刷新为每个节点提供的项目。请注意,不同的项目需要不同的二进制组件。加载程序使用项目清单来确定每个节点设备需要哪些二进制文件。

对每个 PIEP 堆栈进行编程后,打开节点——它们将形成一个运行 EtherDATA 的网格。

现在您需要在节点和 Azure Sphere 之间建立连接,然后 Azure Sphere 可以将数据推送到 Azure IoT Central 以进行远程监控。

第 3 步- 设置 Azure 帐户

如果您还没有,Microsoft 还提供了有关使用Azure以及我们使用的服务Azure IoT Central的文档Azure IoT Central 允许用户远程管理他们的 IoT 设备,并提供统计数据和视觉效果来帮助展示收集到的数据。

拥有帐户后,创建 IoT Central 服务并按照 Microsoft 提供的此处说明授权您的 Azure Sphere。

现在您可以创建 IoT Central Dashboard

要准备 Azure IoT Central 仪表板以显示来自无线传感器节点的湿度、温度、压力、电池、门数据,您需要按照此处给出的说明进行操作

第 4 步- 将 Station Stack 连接到 Azure Sphere

第 2 步中的项目之一构建了一个系统,用于将 EtherDATA 网格连接到 Azure Sphere。

pYYBAGOhF1mADNX7AAX-VIt69KE939.jpg
将 Station Stack 的接线板(引脚 7、8、9)的跳线连接到 Azure Sphere 上的 TX、RX 和 GND
 

现在您已经建立了 Azure Sphere 和 EtherDATA 与网状网络之间的连接。无线传感器网络已成功将其数据转发到 Azure 球体。为了让适配器程序将你的设备连接到你的 IoT Central 服务并转发在 Station Stack 上收集的所有数据,你需要设置一个 Azure 云帐户和 Azure IoT Central 服务。

您可以通过将 Station Stack 的终端板连接到插入 PC 的 UART-USB 适配器并以 115200 波特率运行任何终端程序来单独验证数据收集。您将看到发出的 JSON 字符串;

poYBAGOhF1yAGRYVAACkryAtqSg450.png
站点 JSON 输出
 

这显示了根据为 EtherDATA 定义的模式来自各个节点(节点是一组节点)的数据;batteryValue、eValue(温度、湿度和压力)和 DoorState(有关 EtherDATA 模式的更多详细信息,请参见下文)。

第 5 步- 设置 Azure Sphere

要开始设置,请按照 Microsoft 的文档Azure Sphere Setup进行操作此链接将引导你完成安装 Azure Sphere SDK 并让你的设备为应用程序部署做好准备的步骤。

将我们的附加程序加载到您的 Azure Sphere

按照 Microsoft 中有关侧载应用程序的说明进行操作。使用提供的 Github 代码让您的 Azure Sphere 准备好使用 KoliadaES 适配器程序。

现在您已经设置了该项目所需的一切。

发生了什么?

现在所有无线传感器节点都在采样数据并在整个网格中分发该数据。然后,该数据通过串行通信通过站节点转发到 azure sphere。球体运行一个连接模块来连接到 Azure 服务,并将它接收到的数据(从站节点)推送到 Azure IoT Central 数据库。现在您可以看到您的仪表板正在使用实时数据更新,如下所示。

pYYBAGOhF2CARbp8AAE1bKc3MW4883.png
仪表板中的实时数据
 

您应该看到以下行为:-

• 所有三个节点的温度、压力、湿度和电池数据应每 30 秒在仪表板上更新一次,并且还可以看到最新数据的图表。

• DoorState(磁力计数据)在每次状态改变时更新。在我们的例子中,我们将传感器连接到磁性门上,每次打开或关闭门时都会更新 DoorState。

温度、压力和湿度堆栈可以放置在任何其他网格节点最远 50 米范围内的不同位置。在这里,我们在玻璃咖啡桌上放置了一个监控室内温度的设备。

poYBAGOhF2OAOn08AAECIHMtOAc107.png
 

第二个 PHT 堆栈放置在服务器系统机架中,用于监控服务器温度。

pYYBAGOhF3iAWYjKAAZtJSMcEU8668.jpg
 

第三个 PHT 堆栈放置在房屋外的露台上,以监测室外环境温度。

poYBAGOhF36ARPAoAAF3mJZyiqk484.png
 

磁力计安装在门上,可在门打开或关闭时发送信号。

追踪器装置放置在背包中,以追踪背包是否在屋内,并提供背包何时被带出和进入屋内的历史记录。

站节点串行连接到 Azure Sphere。它在网格节点和 Azure Sphere 之间转发数据,从而在 Azure IoT Central 之间转发数据。

poYBAGOhF4WANSsTAAFHgjg8BY4967.png
车站堆栈
 

该系统为多个独立无线节点的安全监视和控制提供了一个很好的框架。可以从 PC 或手机访问数据和控制 UI。由于所有的数据都被转发到Azure IoT Central,便于从世界任何地方进行远程监控。

代码说明

EtherDATA(分布式数据)——设置节点数据

EtherDATA 使用元数据文件 (.ddl) 来描述托管数据对象。我们根据此处显示的示例指定一组监视和控制对象;

UInt8 batteryValue
{
description "current (uncalibrated) battery value";
access readonly;
units "/4096";// raw 12 bit value
}

int eValue[3]
{
description "Current Humidity Sensor Value";
access readonly;
units "% or deg or mbar";
}

byte deviceType
{
description "Device Type";
// 1 - station
// 2 - tracker
// 3 - DoorSensor
// 4 - PHT
access readonly;
}

byte DoorData
{
description "Door values";
access readonly;
}

EtherDATA 对象是全局定义的,并且对于网格中的所有节点都必须相同。网络全局定义允许 EtherDATA 从任何节点访问和管理数据对象。

在应用程序中,我们使用 EtherDATA API 从特定节点通过网络发布数据对象,如下所示;

dbPublish(eValue);		// for PHT nodes only
dbPublish(batteryValue);	// all nodes have a battery
dbPublish(buttonData);		// for nodes with buttons

只有 PHT 节点具有压力、温度和湿度传感器,因此仅需要从 PHT 节点调用 dbPublish(eValue)。它们是发布 PHT 数据的节点。

类似地,磁力计节点使用 dbPublish(DoorData) 并且 dbPublish(batteryvalue) 在所有使用电池的节点上使用。

dbPublish 只是告诉 EtherDATA 在数据对象可用时发布它,它仍然由应用程序来确定何时可用。

以下命令根据来自传感器的每个样本设置/更新数据对象值。

dbSet(eValue, data);		// PHT nodes
dbSet(batteryValue, data);	// all nodes
dbSet(DoorData, data);		// magnetometer node
dbSet(buttonData, data);	// button nodes

数据项的值将使用 GPIO、ADC、SPI、UART 等的系统接口从底层系统派生。通常,样本采用定时器事件处理程序并调用 dbSet 函数以将数据发布到 EtherDATA 以进行分发。

最后,站节点需要包含以下配置代码,以便从其他传感器节点接收所有更新的数据。

dbSubscribe(“*”,eValue, callback);
dbSubscribe(“*”,batteryValue, callback);
dbSubscribe(“*”,DoorData, callback);
dbSubscribe(“*”,buttonData, callback);

如前所述,所有 EtherDATA 对象都是全局定义的,这允许在所有节点中以相同的方式访问和管理 EtherDATA 系统中的任何节点。

除了项目文件中描述的一些基本设置和事件处理之外,尽管可以说更多的内容来描述 EtherDATA、EtherMESH 和 KoliadaES,但这几乎总结了网格节点的设置。

Azure Sphere - 设置 IoT Central 数据库连接

Azure SDK main.c 文件包含设置 Azure IoT Central 连接句柄所需的初始化。此处显示了 Azure IoT Central/Hub 定义;

#include "parson.h" // used to parse Device Twin messages.
// Azure IoT Hub/Central defines.
#define SCOPEID_LENGTH 20
static char scopeId[SCOPEID_LENGTH]; // ScopeId for the Azure IoT Central application, set in // app_manifest.json, CmdArgs
static IOTHUB_DEVICE_CLIENT_LL_HANDLE iothubClientHandle = NULL;
static const int keepalivePeriodSeconds = 20;
static bool iothubAuthenticated = false;
static void SendMessageCallback(IOTHUB_CLIENT_CONFIRMATION_RESULT result, void *context);
static void ReceiveHubMessage(IOTHUB_CLIENT_CONFIRMATION_RESULT result, const unsigned char *payload, size_t payloadSize, void *userContextCallback);
static void TwinCallback(DEVICE_TWIN_UPDATE_STATE updateState, const unsigned char *payload,
size_t payloadSize, void *userContextCallback);
static void TwinReportBoolState(const char *propertyName, bool propertyValue);
static void ReportStatusCallback(int result, void *context);
static const char *GetReasonString(IOTHUB_CLIENT_CONNECTION_STATUS_REASON reason);
static const char *getAzureSphereProvisioningResultString(
AZURE_SPHERE_PROV_RETURN_VALUE provisioningResult);

Azure 帐户和范围 ID 的连接字符串设置如下所示;

int main(int argc, char *argv[])
{
Log_Debug("IoT Hub/Central Application starting.\n");
mydoorstate[0] = '0';
if (argc == 2) {
Log_Debug("Setting Azure Scope ID %s\n", argv[1]);
strncpy(scopeId, argv[1], SCOPEID_LENGTH);
}
else {
Log_Debug("ScopeId needs to be set in the app_manifest CmdArgs\n");
return -1;
}
Log_Debug("UART application starting.\n");
if (InitPeripheralsAndHandlers() != 0) {
terminationRequired = true;
}
// Main loop
while (!terminationRequired) {
if (WaitForEventAndCallHandler(epollFd) != 0) {
terminationRequired = true;
}
}
ClosePeripheralsAndHandlers();
Log_Debug("Application exiting.\n");
return 0;
}

InitPeripheralsAndHandlers 初始化UART 并等待UART Event(即从站节点接收数据)。

static void UartEventHandler(EventData *eventData)

每当它通过 UART 从站节点接收数据时,此事件处理程序都会执行必要的解析,如此处所示;

{
const size_t receiveBufferSize = 128;
uint8_t receiveBuffer[receiveBufferSize + 1]; // allow extra byte for string  termination
ssize_t bytesRead = -1;
for (int i = 0; i < 32767 && bytesRead == -1; i++) {
bytesRead = read(uartFd, receiveBuffer, receiveBufferSize);
}
if (bytesRead < 0) {
Log_Debug("ERROR: Could not read UART: %s (%d).\n", strerror(errno),  errno);
terminationRequired = true;
return;
}

然后识别解析的数据类型(PHT 值、电池或门状态)和节点名称,并将相应的数据推送到 Azure IoT Central,如此处所示;

SendRoomTemperature(evalue1);
SendRoomHumidity(evalue2);
SendRoomPressure(evalue3);


static void SendRoomTemperature(const unsigned char *value)
{
static char eventBuffer[100] = { 0 };
static const char *EventMsgTemplate = "{ \"RoomTemp\": \"%s\"}";
int len = snprintf(eventBuffer, sizeof(eventBuffer), EventMsgTemplate, value);
if (len < 0)
return;
IOTHUB_MESSAGE_HANDLE messageHandle = IoTHubMessage_CreateFromString(eventBuffer);
if (messageHandle == 0) {
Log_Debug("WARNING: unable to create a new IoTHubMessage\n");
return;
}
if (IoTHubDeviceClient_LL_SendEventAsync(iothubClientHandle, messageHandle, SendMessageCallback,
/*&callback_param*/ 0) != IOTHUB_CLIENT_OK) {
Log_Debug("WARNING: failed to hand over the message to IoTHubClient\n");
}
else {
//Log_Debug("INFO: IoTHubClient accepted the message for delivery\n");
}
IoTHubMessage_Destroy(messageHandle);
}

这总结了 Azure Sphere 设备的网格 → Azure 转发责任。反向的类似机制接收控制请求并将它们转发到网格。

现在剩下的都在 Azure Central 上了。由于设备已经预先在 IoT Central 上准备好(模仿我们的设置),IoT Central 知道设置并正在等待所有数据(PHT 值、电池或门状态)进入。

概括

在事先不了解 Azure Sphere 或 Azure IoT Central 的情况下,大约需要 5 天的时间来启动所描述的节点,配置 Azure Sphere 以在网格和 Azure IoT Central 之间移动数据。

在合适的容器中,PIEP 硬件专为稳健的现场部署和任意用户交互而设计。PIEP 板很容易简化为定制的、用户指定的硬件,无需更改代码PIEP 加上 KoliadaES 提供了一种简单的方法来稳健地制作原型,并根据需要转移到生产中,而无需大量的生产工程时间和成本。

我们有多个类似的网格部署,用于在家庭、工业和医疗保健环境中部署数据和控制。Azure Sphere 让我们能够简单而安全地将这些网络连接到互联网。

链接

视觉工作室;

• 安装 Visual Studio

• 安装 Visual Studio Code

天蓝色;

• 开始使用 Azure

• 开始使用 Azure IoT Central

蔚蓝球体;

• Azure 球体入门

• 设置设备并安装 Azure SDK

• 添加遥测测量

自定义 EtherDATA 应用程序

这种分布式数据系统即插即用,易于用于各种应用。有关如何使用 KoliadaES 开始创建/自定义新应用程序的更多详细信息,请通过http://www.koliada.com联系我们


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !