Blog:
基于 Toradex 模块的 IoT 停车场系统演示

2016年6月15日星期三
IoT

IoT

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

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

  • 停车场 1(名为 Stretnor)
  • 停车场 2(名为 heater Parkhouse)
  • 公告显示(每个停车场独立设备)

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

  • 闸门控制器(Colibri T30 运行 Win10 IoT)
  • 停车控制器(Colibri VF50 运行 Windows Embedded Compact 2013)
  • 支付终端(Apalis iMX6 运行 Linux 和 Qt)
  • 公告显示(Colibri iMX6 运行 Windows Embedded Compact 2013)

IoT parking lot demo

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

IoT 停车场演示系统消息流

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

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

Message flow in IoT parking lot demo

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

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

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

IoT parking demo

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

例程应用

在下面的例程中,我将向你演示如何方便地于 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();

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

IoT parking demo console application 1

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

IoT parking demo console application 2

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

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

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

参考
作者: Luka Pivk, ‎Embedded Software Developer, Toradex AG

评论

Please login to leave a comment!
Have a Question?