项目3任务5-物联网APP和MQTT.fx客户端通信_第1页
项目3任务5-物联网APP和MQTT.fx客户端通信_第2页
项目3任务5-物联网APP和MQTT.fx客户端通信_第3页
项目3任务5-物联网APP和MQTT.fx客户端通信_第4页
项目3任务5-物联网APP和MQTT.fx客户端通信_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

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

文档简介

2相关知识34任务小结与练习1任务实施任务引入与目标物联网APP和MQTT.fx客户端通信一、任务引入与目标任务目标任务5使用MQTT.fx软件创建一个MQTT客户端,让APP和其进行MQTT通信,实现如下功能:(1)APP发送,MQTT.fx接收,消息topic为“/手机号/my_APP/set”,代表APP发布的命令;(2)MQTT.fx发送,APP接收,消息topic为“/手机号/my_FX/post”,代表MQTT.fx发布的消息。APP和MQTT.fx这两个客户端需要通过MQTT服务器进行消息转发。任务引入任务4中APP已经连接到MQTT服务器,MQTT服务器起到了消息代理的作用。如果APP和另一个MQTT客户端之间能进行消息传递,感受会更直观。二、相关知识Java中的字符串处理方法在Java中,常用的字符串(String类)处理函数有indexOf()方法、substring()方法、contains()方法,结合起来可以用于字符串的解析。indexOf()方法indexOf()方法可以在字符串中查找子字符串出现的位置(即索引值)。如果存在则返回索引值,如果不存在则返回-1。其中,字符串的索引是从0开始的。substring()方法substring()方法用于截取字符串的子字符串。其语法为:publicStringsubstring(intbeginIndex),或publicStringsubstring(intbeginIndex,intendIndex)。参数:beginIndex———起始索引(包括),索引从0开始;endIndex———结束索引(不包括)。二、相关知识contains()方法contains()方法用于判断字符串中是否包含指定的字符或子字符串。其语法为:publicbooleancontains(CharSequencechars)。参数:chars———要判断的字符或字符串。返回值:如果包含指定的字符或字符串,则返回true,否则返回false。课堂讨论根据介绍,indexOf()方法是否可以起到contains()方法同样的功能,即判断字符串的包含关系?三、任务实施实施设备安装了AndroidStudio开发环境和MQTT.fx软件的计算机,部署了MQTT服务器的云服务器。1.MQTT.fx配置MQTT.fx可通过点击齿轮图标或从Extras→EditConnectionProfiles进入连接配置。如图3-23所示,在连接配置中,设置要访问的MQTT代理服务器IP地址和端口号,端口号为1883;设置独一无二的客户端ID,也可以点击“Generate”自动生成;其他参数可以默认,访问MQTT服务器的账号、密码可以空着。实施过程图3-23MQTT.fx配置三、任务实施点击“Connect”后,在MQTT.fx中创建的MQTT客户端即可建立与MQTT服务器的连接。如图3-24所示,点击“Publish”选项卡,可以设置发布消息的topic,注意这个topic是APP要收到的消息topic。图3-24MQTT.fx发布消息图3-25MQTT.fx订阅消息如图3-25所示,点击“Subscribe”选项卡,可以设置订阅消息的topic,点击Subscribe即可订阅成功。注意这个topic是APP要发布的消息topic。三、任务实施2.APP程序设计(1)APP的MQTT消息约定。在APP中,布局如图3-26所示,约定如下:①点击image21和image22,发布消息。topic为“/手机号/my_APP/set”,payload分别为{"LedStatus":1}和{"LedStatus":0};②收到订阅的消息,topic为“/手机号/my_FX/post”,提取消息payload的“temperature”字段的值,拼接后显示在text23处。消息payload格式为{"temperature":16}。发布和接受的消息都是字符串类型,毫无疑问我们要求消息满足JSON格式规范(这是基本要求,必须遵守)。图3-26image21和image22的布局三、任务实施(2)APP发布MQTT消息。如图3-27所示,需要在image21和image22的单击事件监听器中调用消息发布函数。代码如下:图3-27image21和image22的单击事件监听//点击image21,发布消息:{"LedStatus":1}binding2.image21.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){publishmessageplus(mqtt_pub_topic,"{\"LedStatus\":1}");}});//点击image22,发布消息:{"LedStatus":0}binding2.image22.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){publishmessageplus(mqtt_pub_topic,"{\"LedStatus\":0}");}});三、任务实施点击image21,调用自编的publishmessageplus函数发布MQTT消息,payload为{"LedStatus":1};点击image22,调用自编的publishmessageplus函数发布MQTT消息,payload为{"LedStatus":0}。点击这两个图像控件,发布的MQTT消息topic是一样的。case31://连接成功Toast.makeText(MainActivity.this,"连接成功",Toast.LENGTH_LONG).show();try{//订阅消息client.subscribe(mqtt_sub_topic,1);}catch(MqttExceptione){e.printStackTrace();}break;(3)APP接收MQTT消息。接收消息需要注意,先订阅消息,然后才能接收(MQTT服务器转发过来的消息)。下面在Handler中完成这两步。当APP的MQTT客户端client连接MQTT服务器成功后,调用subscribe方法订阅消息。代码如下:三、任务实施接收解析的代码如下:case3://MQTT收到消息回传if(msg.obj.toString().contains("temperature")){StringT_val=msg.obj.toString().substring(msg.obj.toString().indexOf("temperature")+13,msg.obj.toString().indexOf("}"));Stringtext_val="温度:"+T_val+"℃";binding2.text23.setText(text_val);}break;分析当APP收到订阅消息后,是如何提取出温度值,并在text23文本框中显示的:已知回传Handler消息标志为3,obj为/1**********/my_FX/post:{"temperature":16};Handler处理时,判断标志是否为3,然后调用toString()方法将msg.obj转换为字符串,再调用contains方法判断是否包含子字符串"temperature";假如以上均满足,在字符串中进行截取操作,起始位置是字符"t"的位置加13,定位到温度的数值部分,结束位置是字符右花括号(不包括),这样就提取出了子字符串"16"。最后和前后字符串拼接后,在text23显示出来"温度:16℃"。三、任务实施3.APP和MQTT.fx通信测试(1)APP发送MQTT消息到MQTT.fx。如图3-28所示,当在APP上点击image21后,可在MQTT.fx客户端的Subscribe选项卡看到消息内容。图3-28MQTT.fx收到image21的消息点击image22,MQTT.fx客户端也可以成功收到APP发送的MQTT消息,如图3-29所示。图3-29MQTT.fx收到image22的消息三、任务实施(2)MQTT.fx发送MQTT消息到APP。如图3-30所示,当MQTT.fx发布消息时,APP可以收到并解析显示。还可以在真机上测试,效果是一样的。图3-30MQTT.fx发

温馨提示

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

评论

0/150

提交评论