版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.4鸿蒙APP端开发本章主要讲述分布式仓库环境监测项目鸿蒙APP端开发。通过学习本节将能够了解分布式仓库环境监测项目鸿蒙APP端开发。通过本节学习可以熟悉:鸿蒙APP端TCP编程鸿蒙APP端UDP编程鸿蒙APP端主程序编程鸿蒙APP端TCP编程鸿蒙APP端UDP编程鸿蒙APP端主程序编程鸿蒙APP端开发(1/8)
首先在DevEcoStudio基于EmptyAbility模板创建IoTFactoryApp工程,并将资源图片文件复制至工程资源目录下的media子文件夹中,然后为工程增加网络访问权限。修改工程configuration目录下的module.json5配置文件,在第15行插入以下内容:
"requestPermissions":[{
"name":"ohos.permission.INTERNET"
}],鸿蒙APP端TCP编程(2/8)
在工程的pages源码目录下创建socketComponent文件夹,并在该文件夹内创建IoTTcpClient.ets源文件。将TCP客户端通信功能封装为IoTTcpClient类,并实现将ArrayBuffer类型的TCP数据转换成字符串的函数。源文件关键函数代码:exportclassIoTTcpClient{//1.创建TCP通信对象,与网络协议栈建立联系privatetcp:socket.TCPSocket=socket.constructTCPSocketInstance();//当创建对象需传入参数:
服务器IP地址、端口号、接收数据的回调函数、TCP连接的回调函数、TCP断开的回调函数constructor(serverIP:string,serverPort:number,tcpRcvCb:Callback<socket.SocketMessageInfo>,tcpConnectCb:AsyncCallback<void>,tcpCloseCb:Callback<void>){//2.绑定使用端口号this.tcp.bind(addr,(err:BusinessError)=>{//设置当接收到TCP数据时,触发调用的回调函数鸿蒙APP端TCP编程(3/8)//设置当接收到TCP数据时,触发调用的回调函数this.tcp.on('message',tcpRcvCb);//设置当TCP通信断开时,触发调用的回调函数this.tcp.on('close',tcpCloseCb);//3.连接服务器端,并设置当连接成功时触发调用的回调函数this.tcp.connect(connOpts,tcpConnectCb);//4.发送数据asyncsendData(s:string){letopts:socket.TCPSendOptions={data:s};this.tcp.send(opts);}//5.关闭TCP通信close(){this.tcp.close();
鸿蒙APP端TCP编程(4/8)//ArrayBuffer转换成字符串exportfunctionarrayBufToString(buffer:ArrayBuffer):string{letdataView:DataView=newDataView(buffer);letstr="";for(leti=0;i<dataView.byteLength;++i){str+=String.fromCharCode(dataView.getUint8(i));}returnstr;}鸿蒙APP端TCP编程(5/8)在Index页面上进行简单的测试。在Index页面上实现在页面初始化时连接TCP服务器以设置回调函数,点击按钮时发出TCP数据,并在Text组件上显示接收到的数据。关键函数代码:structIndex{@Statemessage:string='HelloWorld';privatetcp?:IoTTcpClient;//接收处理的回调函数privatetcpRcvCb=async(sInfo:socket.SocketMessageInfo)=>{lets=arrayBufToString(sInfo.message);//将ArrayBuffer转成字符串//连接成功后的回调函数privatetcpConnectCb=async()=>{this.tcp?.sendData("hellofromclient");//连接成功后发出数据}
鸿蒙APP端TCP编程(6/8)aboutToAppear():void{//创建TCP通信对象,并指定服务器的IP地址、端口号、接收数据的回调函数、连接的回调函数、连接断开的回调函数this.tcp=newIoTTcpClient("",10086,this.tcpRcvCb,this.tcpConnectCb,this.tcpCloseCb);}build(){Column(){Text(this.message)Button('Send').onClick(()=>{//点击按钮时发出数据this.tcp?.sendData("hellotcpClient");})
鸿蒙APP端TCP编程(7/8)在PC上通过Socket调试工具设立TCPServer,然后进行通信测试。Socket调试工具测试输出:鸿蒙APP端TCP编程(8/8)App端程序测试效果:鸿蒙APP端TCP编程鸿蒙APP端UDP编程鸿蒙APP端主程序编程鸿蒙APP端UDP编程(1/2)
将此第5章IoTUdp.ets源文件复制至项目工程的socketComponent文件夹中,然后修改Index.ets源文件,实现当页面初始化时创建IoTUdp对象与指定UDP接收处理的回调函数,然后发出扫描设备的命令,在接收回调函数中由数组记录回复的设备端IP地址,然后在Index页面中由List组件显示在线设备端的IP地址。Index.ets源文件关键代码:structIndex{
privateboradcastIP:string="55";//设备端的UDP广播地址
privateport:number=10086;//设备端的UDP端口号
@StatedevIPList:Array<string>=[];//由动态数组记录所有设备端的IP地址、端口号信息
privateudp?:IoTUdp;//用于扫描设备的UDP通信对象
//UDP接收的回调函数
private
udpRcvCallback=async(sInfo:socket.SocketMessageInfo)=>{
letstr=
arrayBufToString(sInfo.message);
//当设备端回"iamDev"则表示成功扫描到一个设备端
//在动态数组中记录设备端IP地址鸿蒙APP端UDP编程(2/2)aboutToAppear():void{//创建UDP通信对象,并设置接收处理的回调函数this.udp=newIoTUdp(0,this.udpRcvCallback);//页面初始化时发出扫描设备端的命令this.udp.sendData("scanningDev",this.boradcastIP,this.port);}build(){Column(){List(){ForEach(this.devIPList,(ip:string)=>{ListItem(){Text(ip).fontSize(25)}鸿蒙APP端TCP编程鸿蒙APP端UDP编程鸿蒙APP端主程序编程鸿蒙APP端主程序编程(1/8)
主要实现:当App打开时通过UDP广播发出扫描设备的命令,获取在线的所有设备端,并记录它们的IP地址与端口号。然后,在List列表中展示每个设备端的页面组件。在设备页面组件内部,通过TCP协议与设备端的TCP服务器建立连接,并定期向设备发送传感器数据更新的指令,将接收到的传感器数据实时展示在对应的组件上,同时提供控制按钮以打开或关闭设备端的布防状态。
鸿蒙APP端主程序编程(2/8)
在工程的pages目录下创建customeUIComponent文件夹,并在此文件夹中创建IoTDeviceUI.ets源文件,在此源文件中设计每个传感器通用的IoTDeviceSensorUI组件,组件的关键代码:exportstructIoTDeviceSensorUI{
privateimgSrc:ResourceStr='';//记录传感器图像
privatesName:string='';//记录传感器名称
@Propval:string='';//绑定一个状态变量,val的值跟随此状态变量变化
build(){
Row({space:10}){
Image(this.imgSrc)//图像组件描述
Text(this.sName).fontSize(18)//传感器名称组件描述
//传感器值组件描述
Text(this.val).fontSize(18).fontWeight(FontWeight.Bold)鸿蒙APP端主程序编程(3/8)
接着customUIComponent文件夹中创建操作每个设备端的IoTDeviceUI.ets页面组件源文件。源文件中实现在组件初始化时TCP连接设备端,在组件退出时断开TCP连接,并通过定时器定时向设备端发出传感器数据更新命令,根据设备端返回的传感器数据更新组件与实现布防开关的控制功能。IoTDeviceUI.ets关键代码:exportstructIoTDeviceUI{//属性成员:记录设备端的IP地址
设备端的端口号TCP通信对象//State变量:人体感应数据
烟雾数据
湿度数据
温度数据
记录TCP客户端是否在线//tcp接收的回调函数privatetcpRcvFunc=async(sInfo:socket.SocketMessageInfo)=>{//根据通信协议获取传感器数据并更新State变量值}//TCP连接成功后触发的回调函数privatetcpConnectFunc=async()=>{//创建定时器,每隔3秒向设备端发出传感器数据的更新命令}鸿蒙APP端主程序编程(4/8)/TCP断开连接后触发的回调函数privatetcpCloseFunc=()=>{//关闭定时器}aboutToAppear():void{//当页面组件将要出现时触发执行的函数//创建TCP通信对象this.tcpClient=newIoTTcpClient(this.sIP,this.port,this.tcpRcvFunc,this.tcpConnectFunc,this.tcpCloseFunc);}//当页面将要销毁或隐藏时触发执行的函数aboutToDisappear():void{
关闭TCP通信}鸿蒙APP端主程序编程(5/8)build(){Column({space:10}){...//分别以四个传感器组件呈现湿度、温度、烟雾、人体传感器的数据IoTDeviceSensorUI({imgSrc:$r('app.media.humidity'),sName:'相对湿度:',val:this.humidity})IoTDeviceSensorUI({imgSrc:$r('app.media.temperature'),sName:'相对温度:',val:this.temperature})IoTDeviceSensorUI({imgSrc:$r('app.media.smoke'),sName:'烟雾浓度:',val:this.smoke})IoTDeviceSensorUI({imgSrc:$r('app.media.user2'),sName:'人体感应:',val:this.human})鸿蒙APP端主程序编程(5/8)//照明灯器控制Row({space:10}){Image($r('app.media.alarm')).width(40).height(40)//按钮图像组件描述Text('布防开关').fontSize(18)//按钮文字组件描述Toggle({type:ToggleType.Switch})//按钮开关组件描述.onChange((isOn:boolean)=>{/*手机端发:"cmdDev:guardOn",设备端回复"dataDev:guardOn"
手机端发:"cmdDev:guardOff",设备端回复"dataDev:guardOff"*/
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 黔东南安全员培训课件
- 2026年智能客房控制系统 (RCU)项目评估报告
- 建筑工程虚拟现实应用方案
- 园林风格公共卫生间建设策略研究
- 2026届安徽省黄山市屯溪区屯溪第一中学数学高一上期末综合测试试题含解析
- 2026年成都市双流区怡心第八幼儿园招聘备考题库及一套答案详解
- 2026年宁波广慧传媒科技有限公司招聘备考题库及一套参考答案详解
- 2026年广东省农业科学院作物研究所招聘科研助理人员备考题库完整答案详解
- 2026年NIBS赵诗杰实验室招聘实验技术员科研助理备考题库带答案详解
- 2026年南京数智城科创发展有限公司公开招聘5人备考题库及1套参考答案详解
- 民办学校退费管理制度
- T/CIE 115-2021电子元器件失效机理、模式及影响分析(FMMEA)通用方法和程序
- KubeBlocks把所有数据库运行到K8s上
- 广东省江门市蓬江区2025年七年级上学期语文期末考试试卷及答案
- 苏州市施工图无障碍设计专篇参考样式(试行)2025
- 等腰三角形重难点题型归纳(七大类型)原卷版-2024-2025学年北师大版八年级数学下册重难点题型突破
- 临时用电变压器安装方案
- 社会工作项目调研方案含问卷及访谈提纲
- 2025年包头职业技术学院单招职业技能测试题库完整版
- 全国高校辅导员素质能力大赛试题(谈心谈话、案例分析)
- 《XXXX煤矿隐蔽致灾地质因素普查报告》审查意见
评论
0/150
提交评论