Linux人工智能开发实例 课件 5.3 Linux网关远程服务设计_第1页
Linux人工智能开发实例 课件 5.3 Linux网关远程服务设计_第2页
Linux人工智能开发实例 课件 5.3 Linux网关远程服务设计_第3页
Linux人工智能开发实例 课件 5.3 Linux网关远程服务设计_第4页
Linux人工智能开发实例 课件 5.3 Linux网关远程服务设计_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第5章智能家居网关Linux开发案例5.3Linux网关远程服务设计智能家居网关Linux开发案例Linux网关的远程服务设计,通过TCP网络服务设计、MQTT数据服务设计、Linux网关协议设计3个功能步骤进行设计。1)TCP网络服务设计网关收到串口的数据后可以通过UDP或者TCP服务将传感器的MAC地址和传感器数据传输到服务器上面,实现Zigbee数据通信的上行。这里选择传输比较稳定的TCP服务来实现这种上行方式,如图所示。5.3.1远程服务设计分析智能家居网关Linux开发案例2)MQTT数据服务设计MQTT数据服务设计,通过Linuxc编程mosquitto库的调用,实现一个mqtt客户端,向服务推送消息与接收处理用户控制指令,如图所示。5.3.1远程服务设计分析智能家居网关Linux开发案例3)Linux网关协议设计Linux网关协议设计,是在TCP网络服务设计的基础上,通过TCP网络编程通信,与服务器进行通信数据交互。Linux网关协议设计将在网关上建立一个TCP客户端,连接时需要发送网关认证数据包,进行认证。认证通过后,数据按照ZXBee协议进行封包与解包处理。Linux网关协议设计框架如图所示。5.3.1远程服务设计分析智能家居网关Linux开发案例网关收到串口的数据后可以通过UDP或者TCP服务将传感器的MAC地址和传感器数据传输到服务器上面,实现Zigbee数据通信的上行。这里选择传输比较稳定的TCP服务来实现这种上行方式。数据转发服务设计将在网关上建立一个TCP服务端,然后将传感器数据转发到连接的客户端,客户端由TCP&UDP测试工具来模拟。网络数据转发服务设计框架如图所示。数据转发服务设计主要由两大部分组成,一部分是网关(服务器)发数据给客户端,把这个过程叫做ZigBee上行数据通信,另外一部分是发送数据给网关(服务器),网关对数据进行处理,最后发送命令给ZigBee节点,把这个过程客户端叫做ZigBee下行数据通信。5.3.2TCP网络服务设计TCP网络服务设计分析智能家居网关Linux开发案例5.3.2TCP网络服务设计TCP网络服务设计分析本项目函数接口与说明如表所示(详细函数解析请查看文档)智能家居网关Linux开发案例5.3.2TCP网络服务设计TCP网络服务设计分析(详细函数解析请查看文档)智能家居网关Linux开发案例5.3.2TCP网络服务设计TCP网络服务设计分析(详细函数解析请查看文档)智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT协议概述MQTT(消息队列遥测传输)是ISO标准(ISO/IECPRF20922)下基于发布/订阅范式的消息协议。它工作在TCP/IP协议族上,是为硬件性能低下的远程设备以及网络状况糟糕的情况下而设计的发布/订阅型消息协议,为此,它需要一个消息中间件。MQTT是一个基于客户端-服务器的消息发布/订阅传输协议,是一种轻量信息传输协议,专门为受限设备,低带宽,高延迟或不可靠的网络而设的。MQTT的设计原理是最小化网络带宽和设备资源要求。MQTT协议的底层是基于TCP/IP,它工作在TCP和IP协议层上,属于应用层协议,在支持TCP/IP协议的机器上运行。MQTT协议为计算能力有限,且工作在低带宽、不可靠的网络的远程传感器和控制设备通讯而设计的协议,具有以下主要的几项特性:1、使用发布/订阅消息模式,提供一对多的消息发布,解除应用程序耦合;2、对负载内容屏蔽的消息传输;3、使用TCP/IP提供网络连接;4、小型传输,开销很小,协议交换最小化,以降低网络流量;5、使用LastWill和Testament特性通知有关各方客户端异常中断的机制。LastWill:即遗言机制,用于通知同一主题下的其他设备发送遗言的设备已经断开了连接。Testament:遗嘱机制。智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT协议概述MQTT协议中的订阅、主题、会话订阅(Subscription):订阅包含主题筛选器(TopicFilter)和最大服务质量(QoS)。订阅会与一个会话(Session)关联。一个会话可以包含多个订阅。每一个会话中的每个订阅都有一个不同的主题筛选器。会话(Session):每个客户端与服务器建立连接后就是一个会话,客户端和服务器之间有状态交互。会话存在于一个网络之间,也可能在客户端和服务器之间跨越多个连续的网络连接。主题名(TopicName):连接到一个应用程序消息的标签,该标签与服务器的订阅相匹配。服务器会将消息发送给订阅所匹配标签的每个客户端。主题筛选器(TopicFilter):一个对主题名通配符筛选器,在订阅表达式中使用,表示订阅所匹配到的多个主题。负载(Payload):消息订阅者所具体接收的内容。智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT协议概述网络传输与应用消息MQTT会构建底层网络传输:它将建立客户端到服务器的连接,提供两者之间的一个有序的、无损的、基于字节流的双向传输。当应用数据通过MQTT网络发送时,MQTT会把与之相关的服务质量和主题名相关连。MQTT客户端一个使用MQTT协议的应用程序或者设备,它总是建立到服务器的网络连接。客户端作用:(1)发布其他客户端可能会订阅的信息;(2)订阅其它客户端发布的消息;(3)退订或删除应用程序的消息;(4)断开与服务器连接。MQTT服务器MQTT服务器以称为"消息代理"(Broker),可以是一个应用程序或一台设备。它是位于消息发布者和订阅者之间,它作用:(1)接受来自客户的网络连接;(2)接受客户发布的应用信息;(3)处理来自客户端的订阅和退订请求;(4)向订阅的客户转发应用程序消息。智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT协议概述网络传输与应用消息MQTT协议中的方法MQTT协议中定义了一些方法,来于表示对确定资源所进行操作。这个资源可以代表预先存在的数据或动态生成数据,这取决于服务器的实现。通常来说,资源指服务器上的文件或输出。主要方法有:(1)Connect。等待与服务器建立连接。(2)Disconnect。等待MQTT客户端完成所做的工作,并与服务器断开TCP/IP会话。(3)Subscribe。等待完成订阅。(4)UnSubscribe。等待服务器取消客户端的一个或多个topics订阅。(5)Publish。MQTT客户端发送消息请求,发送完成后返回应用程序线程。智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT协议概述网络传输与应用消息MQTT协议数据包结构在MQTT协议中,一个MQTT数据包由:固定头(Fixedheader)、可变头(Variableheader)、消息体(payload)三部分构成。MQTT数据包结构如下:(1)固定头(Fixedheader)。存在于所有MQTT数据包中,表示数据包类型及数据包的分组类标识。(2)可变头(Variableheader)。存在于部分MQTT数据包中,数据包类型决定了可变头是否存在及其具体内容。(3)消息体(Payload)。存在于部分MQTT数据包中,表示客户端收到的具体内容。(MQTT通信架构图)智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT协议概述网络传输与应用消息MQTT协议实现方式实现MQTT协议需要客户端和服务器端通讯完成,在通讯过程中,MQTT协议中有三种身份:发布者(Publish)、代理(Broker)(服务器)、订阅者(Subscribe)。其中,消息的发布者和订阅者都是客户端,消息代理是服务器,消息发布者可以同时是订阅者。(1)发布者将消息发布至代理服务器中,消息在代理服务器中以树的方式存储。(2)订阅者通过订阅消息接受订阅的消息,代理服务器接收到订阅消息后将订阅者放置在对应末端节点的下方。(3)代理根据消息的设置决定是否发送一些以前的信息,或者当发布者发布信息时,代理将信息推送到订阅服务器。智能家居网关Linux开发案例5.3.3MQTT数据服务设计Mosquitto安装与调试Mosquitto是一个开源(BSD许可证)的消息代理,是一款实现了消息推送协议MQTT的开源消息代理软件,提供轻量级的,支持可发布/可订阅的的消息推送模式,使设备对设备之间的短消息通信变得简单,比如现在应用广泛的低功耗传感器,手机、嵌入式计算机、微型控制器等移动设备,安装步骤如下:1、Mosquitto安装在下述网址下载MQTT/files/source/#解压tarzxfvmosquitto-x.x.x.tar.gz#进入目录cdmosquitto-1.4.9#编译make#安装sudomakeinstallMosquitto功能命令如下:mosquitto–代理器主程序mosquitto.conf–配置文件mosquitto_passwd–用户密码管理工具mosquitto_tls–veryroughcheatsheetforhelpingwithSSL/TLSmosquitto_pub–用于发布消息的命令行客户端mosquitto_sub–用于订阅消息的命令行客户端mqtt–MQTT的后台进程libmosquitto–客户端编译的库文件智能家居网关Linux开发案例5.3.3MQTT数据服务设计Mosquitto安装与调试2、Mosquitto测试Mosquitto服务器安装完成后,通过以下3个命令对服务进行测试。这3个命令需要在3个Linux命令行终端中运行。mosquitto–代理器主程序mosquitto_pub–用于发布消息的命令行客户端mosquitto_sub–用于订阅消息的命令行客户端首先,在命令行终端启动mosquiltto服务。root@zonesion:/home/mysdk/gw3399-linux/mosquitto-1.6.8#mosquitto-v1600304111:mosquittoversion1.6.8starting1600304111:Usingdefaultconfig.1600304111:Openingipv4listensocketonport1883.1600304111:Openingipv6listensocketonport1883.智能家居网关Linux开发案例5.3.3MQTT数据服务设计Mosquitto安装与调试2、Mosquitto测试发布使用mosquitto_pub命令,订阅使用mosquitto_sub命令。常用参数介绍如表所示。新建一个命令行终端,输入命令“mosquitto_sub-h-p1883-v-ttesttopic”订阅主题,如右图所示。参数描述-h服务器主机,默认localhost-t指定主题-u用户名-P密码-i客户端id,唯一-m发布的消息内容智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT数据服务设计分析MQTT数据服务设计,通过Linuxc编程mosquitto库的调用,实现一个mqtt客户端,向服务推送消息与接收处理用户控制指令,如图所示。智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT数据服务设计分析本项目函数接口与说明如表所示。智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT数据服务设计分析本项目函数接口与说明如表所示。智能家居网关Linux开发案例5.3.3MQTT数据服务设计MQTT数据服务设计分析本项目函数接口与说明如表所示。智能家居网关Linux开发案例1)通过MobaXterm软件将zigbee-tcp-test文件拷贝到开发板的/home/zonesion目录下面,输入如下命令进入实验目录:5.3.5开发实践:Linux网关远程服务设计TCP网络服务设计test@rk3399:~/work$cdzigbee-tcp-test/test@rk3399:~/work/zigbee-tcp-test$lscache-addr.cMakefileprotol.huart.hutil.hzigbee.hcache-addr.hprotol.cuart.cutil.czigbee.czigbee-tcp-test.c2)输入make命令进行编译,查看是否生成目标文件test@rk3399:~/work/zigbee-tcp-test$makegcc-static-pthreaduart.cutil.cprotol.czigbee.ccache-addr.czigbee-tcp-test.c-ozigbee-tcp-testprotol.c:Infunction‘mk_net_data’:protol.c:70:15:warning:implicitdeclarationoffunction‘calc_fcs’[-Wimplicit-function-declaration]pkg[9+len]=calc_fcs(&pkg[1],pkg_len-2);^test@rk3399:~/work/zigbee-tcp-test$lscache-addr.cprotol.cuart.hzigbee.czigbee-tcp-test.ccache-addr.hprotol.hutil.czigbee.hMakefileuart.cutil.hzigbee-tcp-test智能家居网关Linux开发案例5.3.5开发实践:Linux网关远程服务设计TCP网络服务设计3)查看网关以太网地址test@rk3399:~/work/zigbee-tcp-test$ifconfigwlan0Linkencap:以太网

硬件地址6c:21:a2:ec:55:ebinet地址:1广播:55掩码:inet6地址:fe80::38c6:ca99:8363:32b5/64Scope:LinkUPBROADCASTRUNNINGMULTICASTMTU:1500跃点数:1

接收数据包:791错误:0丢弃:2过载:0帧数:0

发送数据包:677错误:0丢弃:0过载:0载波:0

碰撞:0发送队列长度:1000

接收字节:118235(118.2KB)发送字节:132562(132.5KB)test@rk3399:~/work/zigbee-tcp-test$./zigbee-tcp-testzigbeezigbeetestprogramv0.1

发送数据格式MAC地址,数据

例如:00:12:4B:00:06:1B:5F:BB,{A0=?}

tcpserverlistenport600004)输入如下命令运行测试程序,终端打印出如下信息:智能家居网关Linux开发案例5.3.5开发实践:Linux网关远程服务设计TCP网络服务设计5)打开TCP测试工具,会出现如左图所示界面6)然后在发送区输入如下信息“00:12:4B:00:15:D1:49:7A,{OD1=64,D1=?}”,并点击发送按钮,注意MAC地址必须是对应自己控制类节点的。(注意,如果节点原来状态是D1=64,需要先发送命令00:12:4B:00:15:D1:49:7A,{CD1=64,D1=?},关闭继电器1会看到接收区立即出现一行新的应答信息“00:12:4B:00:15:D1:49:7A,{D1=64}”,说明数据的下行和上行都成功了。(如右图)智能家居网关Linux开发案例5.3.5开发实践:Linux网关远程服务设计 Linux网关协议设计1)启动mqtt服务器中的mosquitto服务2)启动网关消息发布程序3)服务器端订阅主题4)Android端mqtt服务测试测试1测试3测试2测试4智能家居网关Linux开发案例5.3.5开发实践:Linux网关远程服务设计Linux网关协议设计1)将zigbee-tcp_sen

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论