项目六--Alljoyn 物联网关
本项目是我们和北京邮电大学合作的一个项目,基于microWRT和Microduino的基础模块搭建一个异构无线网络系统。 由物联网(Internet of Things)和web技术结合产生了一个新的概念,那就WoT。WoT是IoT的实现模式,可以将从各传感器终端采集的数据、服务都抽象成资源,并集成到web上去。 WoT利用了web的标准,将互联网的整个生态环境拓展到传感器终端。WoT主要有外部设备、WoT网关、WoT平台和WoT应用层组成。 WoT网关是外部设备接入到物联网的接口。相当于一个路由器将设备连接到物联网中。WoT网关支持多种通信协议(WiFi、蓝牙、ETH、Zigbee、串口等), 为不支持TCP/IP的设备提供接入Internet的通道,帮助传感器节点在WoT平台注册。WoT网关可以读取传感器感知数据,并将数据封装上传至wot平台, 同时,网关可以将来自的上层的控制信息下发至执行器。在本系统中WoT网关由microWRT来实现,而外围设备有microduino的基础模块来完成。 详细的系统框图如下: 本教程中主要介绍由microWRT来完成的WoT网关部分。玩家可以在此基础上搭建出适合自己项目的完整系统。 WoT网关系统组件1. 网关中间件 目前由python语言实现,其主要功能包括注册网关、设备以及资源;上传资源数据和心跳;接收来自微信客户端的控制命令,并下发命令到设备端。 2. 网关AllJoyn服务端 由高通公司开发的物联网框架AllJoyn实现,运行在网关上,接收来自AllJoyn客户端的注册信息和数据信息,并且通过socket接口将信息传给网关中间件, 由中间件将数据传送至平台。 3. 网关AllJoyn客户端 由AllJoyn实现,运行在各个支持OpenWrt的节点上;发送节点注册信号给AllJoyn服务端,同时从节点驱动程序中获取数值,封装成一定格式后定期发送给AllJoyn服务端。 4. 异构客户端 包括zigbee、红外等各种传输模式的客户端节点,运行在各个支持OpenWrt的节点上。与OpenWrt节点相连的Microduino模块负责接收来自zigbee、红外、串口等数据, 并传给异构客户端程序,而它负责继续将数据发送给网关中间件。 WoT系统构建1. 在Microwrt上搭建python执行环境 由于Microwrt本身外存的限制无法在其上安装较大的软件包,所以需配置一存储卡,通过USB接口接入OpenWRT系统,方便我们的开发 具体教程可参考这里:https://www.microduino.cc/wiki/index.php?title=第八课--MicroWRT_SD卡/U盘使用 2. 移植AllJoyn库 由于我们需要在MicroWRT系统下运行AllJoyn程序,因此需要交叉移植,在PC主机上编译OpenWRT源码,在其中加入AllJoyn的库,使其生成liballjoyn.so等相关重要链接库。具体操作可参看AllJoyn官方教程 https://wiki.allseenalliance.org/develop/openwrt_package_development 3. 网关中间件 由于python的良好可移植性,可先在PC上编写和调试,详细代码可参看后面的github项目。中间件程序的执行流如下图所示: 4. AllJoyn服务端 由于AllJoyn服务端要与中间件程序进行socket通信,负责发送节点注册信息和节点数据,结构示意图如下: 5. AllJoyn客户端 运行在各个节点处的AllJoyn客户端,一方面需要循环发送由节点驱动提供的数据,另一方面要与AllJoyn服务端建立会话,通过发送信号保持通信。结构示意图如下: 6. 异构客户端 网关与Microduino通过串口相连,底层数据传输通过zigbee模块进行;在底层节点上,传感器接到Microduino上,通过开源硬件编程获取数值,通过zigbee传输上传到网关上. 异构客户端与网关中间件通信结构示意图如下: WoT系统部署1. 下载github项目 项目网址:https://github.com/minelabwot/wot_gateway 并通过scp命令将中间件代码和AllJoyn服务端执行文件aj_server复制到网关Microwrt的存储卡上,将AllJoyn客户端执行文件aj_client复制到节点系统上 目前关于AllJoyn模块的内容在gateway/bin/alljoyn下,有三个文件,分别是服务端aj_server,客户端aj_client和daemon程序alljoyn-daemon;与之相关的库文件是liballjoyn.so 若测试是在两个MicroWRT板上进行,则需提前保证两边防火墙是打开的,即允许alljoyn网络消息通过,具体设置请参照这里:http://blog.csdn.net/baiwfg2/article/details/42556767 2. 运行中间件程序 在命令行下执行:python main.py 3. 后台运行alljoyn-daemon 即在终端输入./alljoyn-daemon &,它是alljoyn程序运行成功的基础 4. 开启服务端 ./aj_server 此时它会连接网关中间件上的监听程序 5. 开启客户端 ./aj_client [temp]:{资源编号} [monitor]:{资源编号} … 冒号前为资源类型,包括temp(温度)、light(光照)、camera(照相机)、monitor(摄像头); 冒号后为资源编号,由用户自定义,不重复即可 此后就可看到属性与数据的上传了,同时在微信客户端或者易信客户端看到数据了 |