版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
2相關(guān)知識34任務(wù)小結(jié)與練習(xí)1任務(wù)實施任務(wù)引入與目標(biāo)物聯(lián)網(wǎng)APP和MQTT.fx客戶端通信一、任務(wù)引入與目標(biāo)任務(wù)目標(biāo)任務(wù)5使用MQTT.fx軟件創(chuàng)建一個MQTT客戶端,讓APP和其進(jìn)行MQTT通信,實現(xiàn)如下功能:(1)APP發(fā)送,MQTT.fx接收,消息topic為“/手機(jī)號/my_APP/set”,代表APP發(fā)布的命令;(2)MQTT.fx發(fā)送,APP接收,消息topic為“/手機(jī)號/my_FX/post”,代表MQTT.fx發(fā)布的消息。APP和MQTT.fx這兩個客戶端需要通過MQTT服務(wù)器進(jìn)行消息轉(zhuǎn)發(fā)。任務(wù)引入任務(wù)4中APP已經(jīng)連接到MQTT服務(wù)器,MQTT服務(wù)器起到了消息代理的作用。如果APP和另一個MQTT客戶端之間能進(jìn)行消息傳遞,感受會更直觀。二、相關(guān)知識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)知識contains()方法contains()方法用于判斷字符串中是否包含指定的字符或子字符串。其語法為:publicbooleancontains(CharSequencechars)。參數(shù):chars———要判斷的字符或字符串。返回值:如果包含指定的字符或字符串,則返回true,否則返回false。課堂討論根據(jù)介紹,indexOf()方法是否可以起到contains()方法同樣的功能,即判斷字符串的包含關(guān)系?三、任務(wù)實施實施設(shè)備安裝了AndroidStudio開發(fā)環(huán)境和MQTT.fx軟件的計算機(jī),部署了MQTT服務(wù)器的云服務(wù)器。1.MQTT.fx配置MQTT.fx可通過點擊齒輪圖標(biāo)或從Extras→EditConnectionProfiles進(jìn)入連接配置。如圖3-23所示,在連接配置中,設(shè)置要訪問的MQTT代理服務(wù)器IP地址和端口號,端口號為1883;設(shè)置獨一無二的客戶端ID,也可以點擊“Generate”自動生成;其他參數(shù)可以默認(rèn),訪問MQTT服務(wù)器的賬號、密碼可以空著。實施過程圖3-23MQTT.fx配置三、任務(wù)實施點擊“Connect”后,在MQTT.fx中創(chuàng)建的MQTT客戶端即可建立與MQTT服務(wù)器的連接。如圖3-24所示,點擊“Publish”選項卡,可以設(shè)置發(fā)布消息的topic,注意這個topic是APP要收到的消息topic。圖3-24MQTT.fx發(fā)布消息圖3-25MQTT.fx訂閱消息如圖3-25所示,點擊“Subscribe”選項卡,可以設(shè)置訂閱消息的topic,點擊Subscribe即可訂閱成功。注意這個topic是APP要發(fā)布的消息topic。三、任務(wù)實施2.APP程序設(shè)計(1)APP的MQTT消息約定。在APP中,布局如圖3-26所示,約定如下:①點擊image21和image22,發(fā)布消息。topic為“/手機(jī)號/my_APP/set”,payload分別為{"LedStatus":1}和{"LedStatus":0};②收到訂閱的消息,topic為“/手機(jī)號/my_FX/post”,提取消息payload的“temperature”字段的值,拼接后顯示在text23處。消息payload格式為{"temperature":16}。發(fā)布和接受的消息都是字符串類型,毫無疑問我們要求消息滿足JSON格式規(guī)范(這是基本要求,必須遵守)。圖3-26image21和image22的布局三、任務(wù)實施(2)APP發(fā)布MQTT消息。如圖3-27所示,需要在image21和image22的單擊事件監(jiān)聽器中調(diào)用消息發(fā)布函數(shù)。代碼如下:圖3-27image21和image22的單擊事件監(jiān)聽//點擊image21,發(fā)布消息:{"LedStatus":1}binding2.image21.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){publishmessageplus(mqtt_pub_topic,"{\"LedStatus\":1}");}});//點擊image22,發(fā)布消息:{"LedStatus":0}binding2.image22.setOnClickListener(newView.OnClickListener(){@OverridepublicvoidonClick(Viewview){publishmessageplus(mqtt_pub_topic,"{\"LedStatus\":0}");}});三、任務(wù)實施點擊image21,調(diào)用自編的publishmessageplus函數(shù)發(fā)布MQTT消息,payload為{"LedStatus":1};點擊image22,調(diào)用自編的publishmessageplus函數(shù)發(fā)布MQTT消息,payload為{"LedStatus":0}。點擊這兩個圖像控件,發(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ù)實施接收解析的代碼如下: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處理時,判斷標(biāo)志是否為3,然后調(diào)用toString()方法將msg.obj轉(zhuǎn)換為字符串,再調(diào)用contains方法判斷是否包含子字符串"temperature";假如以上均滿足,在字符串中進(jìn)行截取操作,起始位置是字符"t"的位置加13,定位到溫度的數(shù)值部分,結(jié)束位置是字符右花括號(不包括),這樣就提取出了子字符串"16"。最后和前后字符串拼接后,在text23顯示出來"溫度:16℃"。三、任務(wù)實施3.APP和MQTT.fx通信測試(1)APP發(fā)送MQTT消息到MQTT.fx。如圖3-28所示,當(dāng)在APP上點擊image21后,可在MQTT.fx客戶端的Subscribe選項卡看到消息內(nèi)容。圖3-28MQTT.fx收到image21的消息點擊image22,MQTT.fx客戶端也可以成功收到APP發(fā)送的MQTT消息,如圖3-29所示。圖3-29MQTT.fx收到image22的消息三、任務(wù)實施(2)MQTT.fx發(fā)送MQTT消息到APP。如圖3-30所示,當(dāng)MQTT.fx發(fā)布消息時,APP可以收到并解析顯示。還可以在真機(jī)上測試,效果是一樣的。圖3-30MQTT.fx發(fā)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度校園食堂承包與托管全面合作協(xié)議書4篇
- 2024版長途貨物配送合同
- 2025年度專業(yè)稅務(wù)代理記賬公司員工保密與競業(yè)禁止協(xié)議4篇
- 耐火線槽行業(yè)行業(yè)發(fā)展趨勢及投資戰(zhàn)略研究分析報告
- 淄博關(guān)于成立鋰電三元正極材料公司可行性報告
- 2025年度個人購房擔(dān)保借款合同房產(chǎn)交易資金監(jiān)管協(xié)議4篇
- 2025年度個人租賃車位合同規(guī)范范本4篇
- 2025年度個人滑翔傘租賃服務(wù)合同4篇
- 2025年度個人股份期權(quán)授予合同樣本4篇
- 2025年度個人家居裝修分期付款合同模板4篇
- (主城一診)重慶市2025年高2025屆高三學(xué)業(yè)質(zhì)量調(diào)研抽測 (第一次)地理試卷(含答案)
- (2024)湖北省公務(wù)員考試《行測》真題及答案解析
- 口算天天練一年級下
- GB/T 12706.1-2020額定電壓1 kV(Um=1.2 kV)到35 kV(Um=40.5 kV)擠包絕緣電力電纜及附件第1部分:額定電壓1 kV(Um=1.2 kV)和3 kV(Um=3.6 kV)電纜
- 自動控制原理全套課件
- 上海科技大學(xué),面試
- 《五年級奧數(shù)總復(fù)習(xí)》精編課件
- TS2011-16 帶式輸送機(jī)封閉棧橋圖集
- 礦區(qū)道路工程施工組織設(shè)計方案
- 多聯(lián)機(jī)的施工方案與技術(shù)措施
- 新型肥料配方設(shè)計與加工PPT課件
評論
0/150
提交評論