版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
6.4鴻蒙APP端開發(fā)本章主要講述工廠物聯(lián)網(wǎng)智能化項目鴻蒙APP端開發(fā)。通過學(xué)習(xí)本節(jié)將能夠了解工廠物聯(lián)網(wǎng)智能化項目鴻蒙APP端開發(fā)。通過本節(jié)學(xué)習(xí)可以熟悉:鴻蒙APP端的UDP編程鴻蒙APP端的主程序編程鴻蒙APP端的UDP編程鴻蒙APP端的主程序編程鴻蒙APP端開發(fā)(1/5)
首先在DevEcoStudio基于EmptyAbility模板創(chuàng)建IoTFactoryApp工程,并將資源圖片文件復(fù)制至工程資源目錄下的media子文件夾中,然后為工程增加網(wǎng)絡(luò)訪問權(quán)限。修改工程configuration目錄下的module.json5配置文件,在第15行插入以下內(nèi)容:
"requestPermissions":[{
"name":"ohos.permission.INTERNET"
}],鴻蒙APP端的UDP編程(2/5)
在工程的pages源碼目錄下創(chuàng)建IoTUdp.ets源文件,在此源文件中將UDP通信功能封裝成IoTUdp類,實現(xiàn)ArrayBuffer轉(zhuǎn)換成字符串的函數(shù)。IoTUdp.ets關(guān)鍵代碼:exportclassIoTUdp{
//1.創(chuàng)建Udp通信對象,與網(wǎng)絡(luò)協(xié)議棧建立聯(lián)系
private
udp:socket.UDPSocket=socket.constructUDPSocketInstance();
constructor(myPort:number,
udpRcvCb:Callback<socket.SocketMessageInfo>){
//2.綁定使用端口號
this.udp.bind(bindAddr,(err:BusinessError)=>{//3.設(shè)置UDP數(shù)據(jù)的接收處理回調(diào)函數(shù)this.udp.on('message',udpRcvCb);//4.設(shè)置支持UDP廣播功能opts.broadcast=true;this.udp.setExtraOptions(opts);鴻蒙APP端的UDP編程(3/5)//5.UDP數(shù)據(jù)發(fā)送功能asyncsendData(s:string,dstIP:string,dstPort:number){letopts:socket.UDPSendOptions={}assocket.UDPSendOptions;opts.data=s;//UDP數(shù)據(jù)opts.address=addr;//目標(biāo)IP與端口號//發(fā)出UDP數(shù)據(jù)this.udp.send(opts,(err:BusinessError)=>{//ArrayBuffer轉(zhuǎn)換成字符串exportfunctionarrayBufToString(buffer:ArrayBuffer):string{returnstr;}鴻蒙APP端的UDP編程(4/5)在Index頁面上進(jìn)行簡單的測試使用UDP通信:privateudp?:IoTUdp;//Udp接收回調(diào)函數(shù)privateudpRcvCallback=async(data:socket.SocketMessageInfo)=>{letstr=arrayBufToString(data.message);console.log("udpreceived:"+str);}aboutToAppear():void{//創(chuàng)建UDP通信對象this.udp=newIoTUdp(0,this.udpRcvCallback);//發(fā)出設(shè)備掃描命令this.udp.sendData("scanningDev",this.devIP,this.devPort);}鴻蒙APP端的UDP編程(5/5)Button("Relay0On").fontSize(30).fontWeight(FontWeight.Bold).onClick(()=>{//向設(shè)備端發(fā)出繼電器0導(dǎo)通的命令this.udp?.sendData("cmdDev:relay0:on",this.devIP,this.devPort);})鴻蒙APP端的UDP編程鴻蒙APP端的主程序編程鴻蒙APP端的主程序編程
主要實現(xiàn):當(dāng)App打開時通過UDP廣播發(fā)出掃描設(shè)備的命令,獲取在線的所有設(shè)備端,并記錄它們的IP地址與端口號。然后在List列表中顯示每個設(shè)備的頁面組件,并在設(shè)備頁面組件上顯示設(shè)備端的傳感器數(shù)據(jù),并提供按鈕控制設(shè)備端繼電器功能。鴻蒙APP端的主程序編程在工程的pages目錄下創(chuàng)建IoTDeviceUI.ets源文件,先在此源文件中設(shè)計煙霧、光敏、人體感應(yīng)等傳感器通用的IoTDeviceSensorUI組件:鴻蒙APP端的主程序編程IoTDeviceSensorUI組件的關(guān)鍵代碼:structIoTDeviceSensorUI{
//屬性成員:記錄傳感器圖像、記錄傳感器名稱
@Propval:string='';//綁定一個狀態(tài)變量,val的值跟隨此狀態(tài)變量變化
build(){
Row({space:10}){
Image(this.imgSrc)
.width(40).height(40)
Text(this.sName).fontSize(18)
Blank().width(60)
Text(this.val).fontSize(18).fontWeight(FontWeight.Bold)
.width(80).fontColor('#ff14665e')
.textAlign(TextAlign.Center)鴻蒙APP端的主程序編程設(shè)計每個設(shè)備端的IoTDeviceUI頁面組件,并在組件中通過獨自的UDP通信對象實現(xiàn)傳感器數(shù)據(jù)的定時更新與繼電器的控制功能。IoTDeviceUI組件關(guān)鍵代碼:exportstructIoTDeviceUI{//屬性成員:
記錄UDP通信對象IP地址
端口號//@State變量:光敏數(shù)據(jù)
人體感應(yīng)數(shù)據(jù)
煙霧數(shù)據(jù)privateudpRcvFunc=async(sInfo:socket.SocketMessageInfo)=>{//UDP接收的回調(diào)函數(shù)lets=arrayBufToString(sInfo.message);//將ArrayBuffer轉(zhuǎn)換成字符串//實現(xiàn)協(xié)議:手機(jī)端發(fā):"cmdDev:updateSensor",設(shè)備端回復(fù)"dataDev:煙霧數(shù)據(jù):光敏數(shù)據(jù):人體感應(yīng)數(shù)據(jù)"}aboutToAppear():void{//當(dāng)頁面組件將要出現(xiàn)時觸發(fā)執(zhí)行的函數(shù)//創(chuàng)建UDP通信對象//創(chuàng)建定時器,每隔3秒向設(shè)備端發(fā)出傳感器數(shù)據(jù)的更新命令}鴻蒙APP端的主程序編程//當(dāng)頁面將要銷毀或隱藏時觸發(fā)執(zhí)行的函數(shù)aboutToDisappear():void{//關(guān)閉UDP通信,停止定時器}build(){Column({space:10}){Text("設(shè)備IP:"+this.sIP+"端口:"+this.port)//分別以三個傳感器組件呈現(xiàn)濕度、溫度與煙霧傳感器的數(shù)據(jù)IoTDeviceSensorUI({imgSrc:$r('app.media.smoke'),sName:'煙霧濃度:',val:this.smoke})IoTDeviceSensorUI({imgSrc:$r('app.media.light'),sName:'光敏亮度:',val:this.light})IoTDeviceSensorUI({imgSrc:$r('app.media.user2'),sName:'人體感應(yīng):',val:this.human})鴻蒙APP端的主程序編程//照明燈器控制、聲光警報器控制Row({space:10}){Image($r('app.media.light2')).width(40).height(40)Text('照明燈控制').fontSize(18)Blank().width(60)Toggle({type:ToggleType.Switch}).size({width:80,height:30}).onChange((isOn:boolean)=>{lets=isOn?"on":"off";s="cmdDev:relay0:"+s;this.udp?.sendData(s,this.sIP,this.port);})}鴻蒙APP端的主程序編程組件設(shè)計完成后,接著在Index頁面上實現(xiàn)程序功能。頁面初始化時發(fā)出掃描設(shè)備命令,并由一個動態(tài)數(shù)組存放回復(fù)的設(shè)備端信息,然后再根據(jù)動態(tài)數(shù)組中記錄的設(shè)備信息創(chuàng)建設(shè)備頁面組件。Index.ets源文件關(guān)鍵代碼://記錄每個設(shè)備端的IP地址與端口號classUdpDevice{publicsIP:string="";//記錄設(shè)備IPpublicport:number=0;//記錄設(shè)備端口號constructor(ip:string,port:number){this.sIP=ip;this.port=port;}}鴻蒙APP端的主程序編程structIndex{//屬性成員:設(shè)備端的UDP廣播地址
設(shè)備端的UDP端口號@StatedevList:Array<UdpDevice>=[];//由動態(tài)數(shù)組記錄所有設(shè)備端的IP地址、端口號信息privateudp?:IoTUdp;//用于掃描設(shè)備的UDP通信對象//UDP接收的回調(diào)函數(shù)privateudpRcvCallback=async(sInfo:socket.SocketMessageInfo)=>{letstr=arrayBufToString(sInfo.message);//當(dāng)設(shè)備端回"iamDev"則表示成功掃描到一個設(shè)備端}aboutToAppear():void{//創(chuàng)建UDP通信對象,并設(shè)置接收處理的回調(diào)函數(shù)//頁面初始化時發(fā)出掃描設(shè)備端的命令}
鴻蒙APP端的主程序編程aboutToDisappear():void{//頁面關(guān)閉時關(guān)閉UDP通信}build(){Column({space:10}){//遍歷記錄設(shè)備端信息的動態(tài)數(shù)組,并創(chuàng)建相應(yīng)的設(shè)備頁面組件List
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年天津大學(xué)福州國際聯(lián)合學(xué)院科研管理與成果轉(zhuǎn)化崗人員招聘備考題庫附答案詳解
- 2026年關(guān)于中國社會科學(xué)雜志社總編室(研究室)公開招聘5人的備考題庫及1套完整答案詳解
- 2025年桂林市臨桂區(qū)公開招聘區(qū)管國有企業(yè)領(lǐng)導(dǎo)人員備考題庫及完整答案詳解一套
- 2026年北京金隅嘉業(yè)房地產(chǎn)開發(fā)有限公司招聘備考題庫完整答案詳解
- 2026年國投生物能源(雞東)有限公司招聘備考題庫及答案詳解一套
- 2026年關(guān)于勐??h機(jī)關(guān)事務(wù)服務(wù)中心的編外崗位工作人員招聘備考題庫及參考答案詳解
- 2026年天津市西青經(jīng)開區(qū)投資促進(jìn)有限公司第二批次公開招聘工作人員備考題庫及一套參考答案詳解
- 2026年山東省商業(yè)集團(tuán)有限公司公開招聘備考題庫及參考答案詳解
- 2025年元江縣鼎元產(chǎn)業(yè)發(fā)展集團(tuán)有限公司公開招聘備考題庫附答案詳解
- 2025年蘭陵縣神山鎮(zhèn)公開選拔“青年干部、青年黨員、青年人才”備考題庫帶答案詳解
- 河南洛陽煉化宏達(dá)實業(yè)有限責(zé)任公司招聘筆試題庫2026
- 倉庫租賃合同協(xié)議書
- 2025年母子公司間投資合同范本
- 2025山西朔州市公安局招聘留置看護(hù)崗位輔警260人筆試考試參考試題及答案解析
- 醫(yī)院安全生產(chǎn)下一步工作計劃
- 實驗室質(zhì)控考核管理
- 2025青海省生態(tài)環(huán)保產(chǎn)業(yè)有限公司招聘11人筆試考試參考題庫及答案解析
- 2026夢工場招商銀行太原分行寒假實習(xí)生招聘考試筆試備考題庫及答案解析
- 銷毀物品協(xié)議書范本
- 2025高一英語上學(xué)期期末復(fù)習(xí)資料
- 辦公室主任年度述職報告
評論
0/150
提交評論