基于ARM系统的 IoT 停车场系统演示
1). 简介
在这篇博文中,我将介绍 IoT 停车演示系统以及其所用到的技术。我会阐述如何使用 Azure IoT Hub 在 Azure服务和设备之间发送消息,就像我们的演示系统那样。针对演示中用到的ARM系统模块,我也会做简单的介绍,但是主要还是专注于 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
- Linux嵌入式系统开发平台选型探讨(11-09)
- 基于ARM体系的嵌入式系统BSP的程序设计方案(04-11)
- 在Ubuntu上建立Arm Linux 开发环境(04-23)
- 达芬奇数字媒体片上系统的架构和Linux启动过程(06-02)
- SQLite嵌入式数据库系统的研究与实现(02-20)
- 革新2410D开发板试用手记(04-21)