原创 基于 ARM系统的 IoT 停车场系统演示

2016-6-29 14:07 1068 11 11 分类: MCU/ 嵌入式

1). 简介

在这篇博文中,我将介绍 IoT 停车演示系统以及其所用到的技术。我会阐述如何使用 Azure IoT Hub 在 Azure服务和设备之间发送消息,就像我们的演示系统那样。针对演示中用到的ARM系统模块,我也会做简单的介绍,但是主要还是专注于 Azure IoT Hub 以及如何方便地收发消息。如果你想更了解多关于 Azure IoT Hub 的信息,请点击这里

 

在我们的演示系统有多个设备,例如:

./ 停车场 1(名为 Stretnor)

./ 停车场 2(名为 heater Parkhouse)

./ 公告显示(每个停车场独立设备)

 

每个停车场包含以下多个设备:

 

./ 闸门控制器(Toradex Colibri T30 ARM计算机模块系统(基于nVidia Tegra 3)运行 Win10 IoT)

./ 停车控制器(Toradex Colibri VF50 运行ARM计算机模块系统(基于NXP Vybrid)Windows Embedded Compact 2013)

./ 支付终端(Apalis iMX6 ARM计算机模块系统(基于NXP iMX6)运行 Linux 和 Qt)

./ 公告显示(Colibri iMX6 ARM计算机模块系统(基于NXP iMX6)运行 Windows Embedded Compact 2013)


正如你在上面图片中看到的,所有的通信消息通过 Azure IoT Hub 发送至应用服务进行处理。你也注意到我们在 Azure 运行了网页和数据库,但是这个篇博文只介绍 Azure IoT Hub 部分。

 

2). IoT 停车场演示系统消息流

由两个基本的事件会触发设备和 IoT Hub 之间的消息流。

a). 第一个事件是当有车辆抵达闸门(参考下图):


当车辆抵达闸门时,闸门控制器会扫描车牌,向 IoT Hub(1)发送消息。在应用服务确认数据后,会向闸门控制器发送消息,开启闸门(2)。与此同时,指示停车位的消息也会发送至停车控制器(3)。停车控制器会开启红色 LED 灯闪烁,表示该停车位即将被占用。支付终端也将会收到消息。这个消息包括车牌号和抵达时间(4)。同时,公告显示器收到关于该区域里所有停车位的信息(5)。

当车辆停在停车位时,停车控制器停止红色 LED 灯闪烁,向 IoT Hub 发送车辆已经停靠的消息(6)。此时,闸门控制器被告知关闭闸门(7)。

 

b). 第二种事件是车辆离开停车位:


当车辆离开停车场的时候,司机首先需要支付停车费。在支付终端上,司机选择他自己车辆的车牌后支付。请求支付的消息发送至 IoT Hub(1)。应用服务计算价格,并发送到支付终端(2)。当支付终端接收付款后,发送支付成功的消息至 IoT Hub(3)。应用服务把车辆即将离开停车场的送消息发送到停车控制器(4)。停车控制器开始闪烁绿色 LED 灯。当车辆从停车位上离开后,IoT Hub 收到车辆已经离开的消息(5)。停车控制器打开出口闸门。在一段时间后,闸门关闭,一个指示停车位空闲的消息发送到 IoT Hub。之后,公告显示上也更新所有停车位的信息(6)。

 

3). 例程应用

在下面的例程中,我将向你演示如何方便地于 Azure IoT Hub 通信。你需要基本的 C# 知识来理解这个例程。如果你想要编译应用,请使用 Visual Studio 2015。

你同样也需要 Azure 账户来运行例程。你可以创建一个免费的 Azure IoT Hub,并在你的 Azure IoT Hub 上创建设备。使用 device explorer 完成这些任务。在 这里查看 device explorer 文档。

这里我将演示一个小的服务器应用,从 IoT Hub 获取消息并处理。代码是很简单的,并不适用于生产环境。这仅仅是向你介绍如何方便地同 Azure IoT Hub 通信。在这个代码里,我们只接收来自设备的信息,并将新的消息发送至同一个设备。

你需要使用你的连接字符串来修改服务器端的代码。

-----------------------

private const string CONNECTION_STRING = "";

-----------------------

正如你在代码中看到的一样,我只调用了 TDXServerEmulator 类中的 connect 方法

-----------------------

TDXServerEmulator ServerEmulator = new TDXServerEmulator();

ServerEmulator.Connect();

 -----------------------

 

这会处理接收和响应消息。

为了使用客户端,你需要 Azure IoT 的 URL 替换成你自己的。Device.cs.

-----------------------

const string iotHubUrl = "";

-----------------------

在客户端代码中,创建新的 Device 对象,注册 OnMessageReceived 事件。这能够使你的设备收到来自 Azure IoT Hub 的所有消息。

-----------------------

Device client1 = new Device("", "");

client1.OnMessageReceived += Client1_OnMessageReceived;

client1.Start();

-----------------------

接下来,你可以运行例程。两个终端串口会在程序执行之后出现。你需要等待服务器应用连接。


在服务器连接后,你可以在应用中选择 “Send Hi” 。


在上面的图片中,你可以看到客户端发送“Hi”。服务器接收到来自客户端的消息后,用“Hi from IoT Hub” 消息作为响应。

就像你在代码中看到的一样,同 Azure IoT Hub 通信和发送消息是很容易的。对于复杂的应用,还有许多可以改进的地方,这当然也会使得代码变得更加复杂。

通过以上的代码和解释,你应该可以使用 Azure IoT Hub 开发简单的应用。所有 Toradex ARM计算机模块 均支持 Azure IoT Hub。你可以在 这里了解 Toradex 模块的支持类型。你也可以下载 WinCE 和 Linux SDK。

文章评论0条评论)

登录后参与讨论
我要评论
0
11
关闭 站长推荐上一条 /2 下一条