当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘要:为了简化邻近异构分布式通信网络系统的组建并统一物联网通信框架,采用高通公司最新推出的AllJoyn开源框架,进行了Windows平台间通过WiFi-Direct方式传输文件的组网实验及VMware下Windows与Linux间的跨平台通信实验。结果证明:AllJoyn框架在通信协议与平台方面的独立性良好,而WiFi-Direct方式则具有组网过程简单、传输速度较快的特点。

引言

随着智能设备的发展与移动终端的普及,物联网技术逐渐在生活生产中得到广泛的应用,近距离无线组网技术备受关注。但现有的解决方案缺乏统一的技术标准,开发者需要实现通信的框架、协议与承载的平台,存在着独立开发的技术不能相互适配和连通、开发成本高昂等缺点。高通的AllJoyn开源框架针对现有的问题提出了一套完整的解决方案,在操作系统、开发语言、物理网络和通信协议上具有独立性叫本文以开发者的角度从整体的高度分析了AllJoyn的软件框架与在C++语言下的应用,并利用AllJoyn框架,通过WiFi-Direct的连接方式实现了搭载Windows系统的终端间的组网通信实验,与VMware虚拟机下Windows与Linux间的跨平台通信实验。

AllJoyn与物联网技术

物联网技术的工作流程是使用各类集成化的传感器实时感知和采集所需的信息,经过信息处理基站对信息进行分析、处理,并通过自组织的无线通信网络以“多跳中继”的方式将信息传送到用户终端。AllJoyn是一个独立于操作系统、开发语言、通信协议的通用软件框架,提供了一种广播和发现服务的抽象,简化了定位和应用服务的流程,适合用来组建无线通信网络。

AllJoyn的优势

AllJoyn作为开源的中性平台系统,是一个“能够使连接设备间进行互操作的通用软件框架和系统服务核心集”,在操作系统、开发语言、物理网络和通信协议上具有独立性。并且在框架内部集成了对网络拓扑结构、通信协议的实现与管理,不需要上层应用程序的开发人员对每种网络技术的特性进行了解,近距离传输速度快,组网流程简单,并且为“握手”模式的安全通信模型提供框架(PasswordManager类)。

3AllJoyn基本概念

3.1总线与总线附件

AllJoyn总线是AllJoyn通信框架的基本抽象,是所有通信过程的承载。它的作用类似于工业上的数据总线,为消息在分布式系统上的传递提供了一个精简高效的消息序列。总线附件(BusAttachment)是应用程序进程与AllJoyn总线连接的媒介,可分别作为服务端、客户端或着作为通信的对等点。

3.2总线对象与总线接口

总线对象(BusObject)实现总线接口(Interface)与总线方法(Method),是通信的发起点与终点,使用时需要在总线附件中注册。总线接口定义了接口规范(ajn::InterfaceDescription类),并将总线方法、总线信号、总线属性及相关的类型签名封装到一个消息组(ajn::MsgArg类)中。

3.3总线守护进程

总线守护进程(Daemon)是运行在操作系统中用来实现分布式逻辑总线段的进程。分布式总线段的连接实质上就是守护进程间通信的建立,除了使用库文件中的绑定守护进程(BundledDaemon)完成底层网络连接的实现,还可以为瘦客户端(ThinClient)编程实现精简易用的守护进程。

AllJoyn会话

会话的建立由服务器的半连接(会话选项、总线名称、会话端口)与客户端的半连接(会话选项、唯一名称、会话ID)的组合实现,产生唯一的AllJoyn通信路径。在客户端捜寻到由服务器广播出来的服务名之后,需要通过加入AllJoyn会话才能进行通信。

AllJoyn通信原理

图1所示是总线消息模式示意图。处于分布式总线段上的两个应用程序,釆用广播与发现well-known服务名(如图1中的org.alljoyn.sample.service)的方式发现远程设备,并通过连接远程AllJoyn守护进程创建的总线建立通信,以加入AllJoyn会话的方式确定一条信息的传递路径。信息的发送由总线对象的成员函数ajn::BusObject::Signal完成,信息的接收由向总线附件注册的信息处理函数来完成(注册由库函数ajn::BusAttachment::RegisterSignalHandler完成)。

基于AllJoyn框架的跨平台局域无线组网技术的实现

4AllJoyn软件框架

AllJoyn的软件框架由上层应用程序、基本服务框架、路

由结点(服务器)、客户端与底层网络构成。应用层可由开发者使用不同的开发语言,通过使用基本服务框架与调用AllJoyn库函数实现,图2所示是AllJoyn软件框架示意图。


基于AllJoyn框架的跨平台局域无线组网技术的实现

5开发环境的构建

Windows7平台:安装VisualStudio2010;从官网下载VisualStudio2010版本的预编译SDK(或使用源码包编译[9]);打开samples目录下的VC2008Win7工程,并按提示自动转换(库与头文件的路径在工程中都已经添加);复制一个示例工程并删除其中的示例项目,得到一个完整的开发环境。

Fedora19平台可从官网下载源码包(或使用git工具克隆—镜像工程:gitclonehttps://git.allseenalliance.org/gerrit/p/All-Projects.git),并安装工具与依赖库:“yuminstallgccdoxygengraphvizopenssl-develbluez-libs-devel”(根据错误提示安装其他的依赖库),同时使用scons工具编译,编译选项参考“sconsOS=linuxCPU=x86DOCS=devBINDINGS=cpp,cWS=offVARIANT=release”,编译成功后,在源码目录下的build目录中能找到编译出的release版本的AllJoyn库文件;在samples中将Makefile的示例复制出来,并在“LIBS”项后添加“-lalljoyn../../lib/BundledRouter.o-lajrouter”,使程序运行时使用编译好的绑定守护进程(BundledDaemon);再使用make工具编译源码得到可执行程序。

6组网通信实验

WiFi-Direct传输文件实验

在两台搭载Windows系统的终端上进行该实验,利用Windows7自带的WiFi-Direct进行连接,其中一台在网络与共享中心里设置新的无线网络连接,另一台捜索相应的无线网络并连接,并分别使用ipconfig与ping来测试连接。

完成无线网络的连接后,在作服务器的终端上运行cpp/bin/samples/FileTransferService.exe<FileName>,该进程将文件以二进制的格式读入128KB的缓冲区,并通过与本地总线守护进程的连接将进程连接到本地AllJoyn总线段上(QStatusstatus=s_msgBus->Connect();),接着广播服务名并等待客户端的连接。在客户端运行FileTransferClientexe,该进程同样也将进程与本地总线相连(在早期版本中则使用显式的远程连接方法,如:QStatusstatus=s_msgBus->Connect“tcp:addr=169.254.227.124,port=9955");在TCP协议下的通信端口为9955,UDP协议的端口为9956),守护进程会根据总线附件的成员函数ajn::BusAttachment::FindAdvertisedName自动的寻找可及网络内的被广播出来的服务名并加入由服务器创建的AllJoyn会话,并通过信号在服务端的发射与客户端接收来实现文件的传递。AllJoyn信号中带有描述信息MsgArg类,可存储128KB的描述信息,在该实验中文件就是被存储在MsgArg类中通过库函数ajn::BusObject::Signal传递的。其文件传输流程如图3所示。

服务端
客户端
|定义相关变量
_| |定义相关变量|
|获取并分割文件
| | 连接守护进程 |
|连接守护进程
I丿搜寻服务名|
| 广播服务名
FJ连接AllJoyn会话|
创建AllJoyn会话
K|等待会话的连接|
|发送带数据信号
I~h逐条接收信号|
断开连接并退出
生成文件并退出

图3文件传输流程示意图

经过多次实验统计,可得到表1所列的统计结果。测试结果说明,在同等距离下,单次传输大文件的平均速度慢于传输小文件的速度;小文件的传输速度存在着一定的不稳定性;传输的平均速度随距离的增大而减小。

表1文件传输速度分布表
距离(m)
文件大小(M
1B) 平均速度(KB/s)
方差(KB/s)
0
552.96
649.35
17.09
0
10.45
1136.68
41.82
0
114.48
876.59
24.15
5
114.48
567.81
14.42
10
114.48
418.86
20.49

实验说明:示例文件中的FileTransferService.exe在传输文件时可能会崩溃,原因在于在源代码移植过程中没有处理好Windows平台下的数据类型转换,在FileTransfer()函数中将变量bufferLength的从std::streamsize类型强制转换为unsignedint就能解决崩溃的问题,在目前最新的14.02.00版本中该问题仍然存在。

6.2跨平台通信实验

该实验使用示例文件chat.exe测试Windows与Linux平台间的通信。实验的流程与图3类似,所不同的是chat程序集成了服务器与客户端,并使用main函数参数对功能进行选择。经对比后发现,在Linux平台下编译所使用的chat.cc源码与Windows下的完全一致,体现出AllJoyn框架下源码的可移植性强。

由于Fedora19平台被搭建在VMware虚拟机中,所以使用NAT的网络连接方式就能实现Windows主机与Linux虚拟机的网络连接(通过VMware虚拟以太网配适器Vment8连接)[11]。在Windows终端中输入chat.exe-sROOM创建名为ROOM的服务名,Linux终端中输入./chat-jROOM&搜索名为ROOM服务名,并加入相应AllJoyn会话中,从而建立起Windows与Linux间的通信。

实验说明:运行时有可能会出现找不到动态库liballjoyn.so的错误提示,可将$PWD../../lib/中的liballjoyn.so拷贝至$PWD,并在Makefile的LIBS后添加-Wl,-rpath=”./”来修正错误。

7结语

AllJoyn的独立性通信场景可以经过移植并推广到通过Bluetooth、Zigbee等不同的通信协议进行通信,同时也可以推广到搭载Android、iOS、ARM-Linux等主流操作系统上,或以瘦客户協ThinClient)的方式推广到实时操作系统RTOS)移动终端的通信上,对构建局域无线通信网络具有较高的应用价值。

20211221_61c1bc4fe972f__基于AllJoyn框架的跨平台局域无线组网技术的实现

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

【2024年4月29日, 德国慕尼黑讯】嵌入式安全被认为是物联网(IoT)应用部署的一个重要属性。英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)近日宣布,其新型PSOC™ Edge E8x MC...

关键字: 微控制器 MCU 物联网

此战略布局将Wi-Fi HaLow置于台湾无线网络产业中心

关键字: Wi-Fi 无线网络 物联网

芯科科技推出其迄今最高能量效率且支持能量采集功能的无线SoC

关键字: 物联网 能量采集 SoC

【2024年4月24日,德国慕尼黑讯】英飞凌科技股份公司(FSE代码:IFX / OTCQX代码:IFNNY)发布全新PSOC™ Edge微控制器(MCU)系列的详细信息,该系列产品的设计针对机器学习(ML)应用进行了优...

关键字: 物联网 机器学习 MCU

TDK株式会社(东京证券交易所代码:6762)新近推出InvenSense SmartEdgeMLTM解决方案,这是一种先进的边缘机器学习解决方案,为用户提供了在可穿戴设备、可听戴设备、增强现实眼镜、物联网 (IoT)...

关键字: 机器学习 物联网 传感器

TDK 株式会社(东京证券交易所代码:6762)隆重宣布其具有片上处理能力的 InvenSense SmartSonic™ICU-10201 超声波飞行时间 (ToF) 传感器全面上市。该传感器可助力实现高性能和低功耗的...

关键字: 飞行传感器 物联网 机器人

硕特Smart Connector应用在著名的瑞士最佳应用程序奖(Best of Swiss Apps Awards) 中荣获铜牌。 这些奖项是应用程序行业最受认可的竞赛之一,享有很高的国际认可度。

关键字: 连接器 物联网

Wxsmart是Weller的首款一体式手工焊接平台,提供全过程控制技术、最大的连接性和可追溯性,并支持物联网标准

关键字: 物联网 智能焊接

全球智能城市运动代表着城市环境设计、体验和导航方式的重大转变。这一重大变革部分是由数字化转型和物联网(IoT)技术推动的,这些技术正在将城市基础设施和城市景观重塑为智能连接中心。这一趋势的核心是符合智能城市独特需求的先进...

关键字: 数字化转型 物联网 Wi-Fi

Qorvo 畅谈 Wi-Fi 7、BMS 及 Sensor Fusion 的革新之力

关键字: Wi-Fi 7 BMS 物联网
关闭