版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
2相關(guān)知識(shí)34任務(wù)小結(jié)與練習(xí)1任務(wù)實(shí)施任務(wù)引入與目標(biāo)物聯(lián)網(wǎng)APP和MQTT.fx客戶端通信一、任務(wù)引入與目標(biāo)任務(wù)目標(biāo)任務(wù)5使用MQTT.fx軟件創(chuàng)建一個(gè)MQTT客戶端,讓APP和其進(jìn)行MQTT通信,實(shí)現(xiàn)如下功能:(1)APP發(fā)送,MQTT.fx接收,消息topic為“/手機(jī)號(hào)/my_APP/set”,代表APP發(fā)布的命令;(2)MQTT.fx發(fā)送,APP接收,消息topic為“/手機(jī)號(hào)/my_FX/post”,代表MQTT.fx發(fā)布的消息。APP和MQTT.fx這兩個(gè)客戶端需要通過MQTT服務(wù)器進(jìn)行消息轉(zhuǎn)發(fā)。任務(wù)引入任務(wù)4中APP已經(jīng)連接到MQTT服務(wù)器,MQTT服務(wù)器起到了消息代理的作用。如果APP和另一個(gè)MQTT客戶端之間能進(jìn)行消息傳遞,感受會(huì)更直觀。二、相關(guān)知識(shí)Java中的字符串處理方法在Java中,常用的字符串(String類)處理函數(shù)有indexOf()方法、substring()方法、contains()方法,結(jié)合起來可以用于字符串的解析。indexOf()方法indexOf()方法可以在字符串中查找子字符串出現(xiàn)的位置(即索引值)。如果存在則返回索引值,如果不存在則返回-1。其中,字符串的索引是從0開始的。substring()方法substring()方法用于截取字符串的子字符串。其語法為:publicStringsubstring(intbeginIndex),或publicStringsubstring(intbeginIndex,intendIndex)。參數(shù):beginIndex———起始索引(包括),索引從0開始;endIndex———結(jié)束索引(不包括)。二、相關(guān)知識(shí)contains()方法contains()方法用于判斷字符串中是否包含指定的字符或子字符串。其語法為:publicbooleancontains(CharSequencechars)。參數(shù):chars———要判斷的字符或字符串。返回值:如果包含指定的字符或字符串,則返回true,否則返回false。課堂討論根據(jù)介紹,indexOf()方法是否可以起到contains()方法同樣的功能,即判斷字符串的包含關(guān)系?三、任務(wù)實(shí)施實(shí)施設(shè)備安裝了AndroidStudio開發(fā)環(huán)境和MQTT.fx軟件的計(jì)算機(jī),部署了MQTT服務(wù)器的云服務(wù)器。1.MQTT.fx配置MQTT.fx可通過點(diǎn)擊齒輪圖標(biāo)或從Extras→EditConnectionProfiles進(jìn)入連接配置。如圖3-23所示,在連接配置中,設(shè)置要訪問的MQTT代理服務(wù)器IP地址和端口號(hào),端口號(hào)為1883;設(shè)置獨(dú)一無二的客戶端ID,也可以點(diǎn)擊“Generate”自動(dòng)生成;其他參數(shù)可以默認(rèn),訪問MQTT服務(wù)器的賬號(hào)、密碼可以空著。實(shí)施過程圖3-23MQTT.fx配置三、任務(wù)實(shí)施點(diǎn)擊“Connect”后,在MQTT.fx中創(chuàng)建的MQTT客戶端即可建立與MQTT服務(wù)器的連接。如圖3-24所示,點(diǎn)擊“Publish”選項(xiàng)卡,可以設(shè)置發(fā)布消息的topic,注意這個(gè)topic是APP要收到的消息topic。圖3-24MQTT.fx發(fā)布消息圖3-25MQTT.fx訂閱消息如圖3-25所示,點(diǎn)擊“Subscribe”選項(xiàng)卡,可以設(shè)置訂閱消息的topic,點(diǎn)擊Subscribe即可訂閱成功。注意這個(gè)topic是APP要發(fā)布的消息topic。三、任務(wù)實(shí)施2.APP程序設(shè)計(jì)(1)APP的MQTT消息約定。在APP中,布局如圖3-26所示,約定如下:①點(diǎn)擊image21和image22,發(fā)布消息。topic為“/手機(jī)號(hào)/my_APP/set”,payload分別為{"LedStatus":1}和{"LedStatus":0};②收到訂閱的消息,topic為“/手機(jī)號(hào)/my_FX/post”,提取消息payload的“temperature”字段的值,拼接后顯示在text23處。消息payload格式為{"temperature":16}。發(fā)布和接受的消息都是字符串類型,毫無疑問我們要求消息滿足JSON格式規(guī)范(這是基本要求,必須遵守)。圖3-26image21和image22的布局三、任務(wù)實(shí)施(2)APP發(fā)布MQTT消息。如圖3-27所示,需要在image21和image22的單擊事件監(jiān)聽器中調(diào)用消息發(fā)布函數(shù)。代碼如下:圖3-27image21和image22的單擊事件監(jiān)聽//點(diǎn)擊image21,發(fā)布消息:{"LedStatus":1}binding2.image21.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){publishmessageplus(mqtt_pub_topic,"{\"LedStatus\":1}");}});//點(diǎn)擊image22,發(fā)布消息:{"LedStatus":0}binding2.image22.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){publishmessageplus(mqtt_pub_topic,"{\"LedStatus\":0}");}});三、任務(wù)實(shí)施點(diǎn)擊image21,調(diào)用自編的publishmessageplus函數(shù)發(fā)布MQTT消息,payload為{"LedStatus":1};點(diǎn)擊image22,調(diào)用自編的publishmessageplus函數(shù)發(fā)布MQTT消息,payload為{"LedStatus":0}。點(diǎn)擊這兩個(gè)圖像控件,發(fā)布的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服務(wù)器轉(zhuǎn)發(fā)過來的消息)。下面在Handler中完成這兩步。當(dāng)APP的MQTT客戶端client連接MQTT服務(wù)器成功后,調(diào)用subscribe方法訂閱消息。代碼如下:三、任務(wù)實(shí)施接收解析的代碼如下: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;分析當(dāng)APP收到訂閱消息后,是如何提取出溫度值,并在text23文本框中顯示的:已知回傳Handler消息標(biāo)志為3,obj為/1**********/my_FX/post:{"temperature":16};Handler處理時(shí),判斷標(biāo)志是否為3,然后調(diào)用toString()方法將msg.obj轉(zhuǎn)換為字符串,再調(diào)用contains方法判斷是否包含子字符串"temperature";假如以上均滿足,在字符串中進(jìn)行截取操作,起始位置是字符"t"的位置加13,定位到溫度的數(shù)值部分,結(jié)束位置是字符右花括號(hào)(不包括),這樣就提取出了子字符串"16"。最后和前后字符串拼接后,在text23顯示出來"溫度:16℃"。三、任務(wù)實(shí)施3.APP和MQTT.fx通信測(cè)試(1)APP發(fā)送MQTT消息到MQTT.fx。如圖3-28所示,當(dāng)在APP上點(diǎn)擊image21后,可在MQTT.fx客戶端的Subscribe選項(xiàng)卡看到消息內(nèi)容。圖3-28MQTT.fx收到image21的消息點(diǎn)擊image22,MQTT.fx客戶端也可以成功收到APP發(fā)送的MQTT消息,如圖3-29所示。圖3-29MQTT.fx收到image22的消息三、任務(wù)實(shí)施(2)MQTT.fx發(fā)送MQTT消息到APP。如圖3-30所示,當(dāng)MQTT.fx發(fā)布消息時(shí),APP可以收到并解析顯示。還可以在真機(jī)上測(cè)試,效果是一樣的。圖3-30MQTT.fx發(fā)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年地材供貨合同范本:高性能耐磨地材采購(gòu)協(xié)議3篇
- 志愿者服務(wù)口號(hào)宣傳語
- 2024年度大宗貨物運(yùn)輸與供應(yīng)鏈管理服務(wù)合同3篇
- 2025年山東淄博文昌湖省級(jí)旅游度假區(qū)事業(yè)單位招聘教師11人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2024年度冷鏈物流代理合同中貨物滅損及病毒檢驗(yàn)協(xié)議3篇
- 2025年山東濟(jì)寧市衛(wèi)生健康委員會(huì)所屬事業(yè)單位“優(yōu)才”招聘歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)南新舊動(dòng)能轉(zhuǎn)換起步區(qū)管委會(huì)所屬事業(yè)單位招聘14人管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東濟(jì)南市市中區(qū)所屬事業(yè)單位招聘73人歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東泰安新泰市中小學(xué)招聘教師歷年管理單位筆試遴選500模擬題附帶答案詳解
- 2025年山東棗莊市文旅集團(tuán)第一批市場(chǎng)化招聘中層管理人員和業(yè)務(wù)骨干14人管理單位筆試遴選500模擬題附帶答案詳解
- 療愈行業(yè)現(xiàn)狀分析
- 治理和善治引論
- 私募基金業(yè)務(wù)獎(jiǎng)金激勵(lì)制度
- 三年級(jí)上冊(cè)《勞動(dòng)》期末試卷及答案
- 以消費(fèi)者為中心:提升營(yíng)銷效果的技巧
- 2024北京海淀區(qū)初三(上)期末道法試卷及答案
- 顧建民高等教育學(xué)知識(shí)點(diǎn)總結(jié)【嘔心瀝血整理】
- 長(zhǎng)笛演奏風(fēng)格探析課程設(shè)計(jì)
- 曲阜師范大學(xué)教育經(jīng)濟(jì)學(xué)期末復(fù)習(xí)題
- 電影第一出品單位變更協(xié)議模板
- 2023-2024學(xué)年北師大版數(shù)學(xué)九年級(jí)上冊(cè)期末測(cè)試卷
評(píng)論
0/150
提交評(píng)論