版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
7.3鸿蒙设备端开发
本章主要讲述分布式仓库环境监测项目设备端开发过程。通过学习本节将能够了解分布式仓库环境监测项目设备端开发过程。通过本节学习可以熟悉:项目源码工程配置AHT20温湿度模块编程TCP服务器端模块编程设备端主程序编程项目源码工程配置AHT20温湿度模块编程TCP服务器端模块编程设备端主程序编程项目源码工程配置(1/5)
源码工程的app目录下创建IoTWareHouse文件夹,用于存放当前项目的所有源文件及文件夹。接着,将第5章中的IoTWiFi、IoTUdp、IoTRelay、IoTAdcSensor、IoTHumanSensor等功能模块的整个源码目录复制到IoTWareHouse目录下。然后,在该目录下分别创建IoTAht20目录、IoTTcpServer目录、以及IoTMain目录。项目源码工程配置(2/5)
先将项目实现Wi-Fi的连接与支持UDP广播查询设备的功能,修改app目录下的BUILD.gn文件,改成编译IoTWareHouse项目:import("//build/lite/config/component/lite_component.gni")
lite_component("app"){
features=[#
"IoTFactory:app",
"IoTWareHouse:app"
]}项目源码工程配置(3/5)然后修改IoTWareHouse目录下BUILD.gn文件内容,将各个功能模块编入程序:import("//build/lite/config/component/lite_component.gni")lite_component("app"){features=["IoTMain:IoTMain","IoTAdcSensor:IoTAdcSensor","IoTWiFi:IoTWiFi","IoTHumanSensor:IoTHumanSensor","IoTUdp:IoTUdp","IoTRelay:IoTRelay",]}项目源码工程配置(4/5)在IoTMain模块目录下创建IoTMain.c源文件,并在源文件中通过调用IoTWiFi与IoTUdp功能模块实现支持UDP广播查询设备的功能。IoTMain.c关键代码:voidudpRcvCallback(char*data,intlen,char*ip,intport){//当接收到"scanningDev"时回复"iamDev"}voidIoTMainInit(){
IoTWiFiConnect(WIFI_SSID,WIFI_PASSWD);//WiFi连接
//等待连接成功,并输出IP地址
//设置UDP接收回调函数
IoTUdpRcvFunc(udpRcvCallback);}APP_FEATURE_INIT(IoTMainInit);项目源码工程配置(5/5)在IoTMain目录下创建BUILD.gn编译配置文件,并在BUILD.gn文件增加引用功能模块头文件所在路径:static_library("IoTMain"){sources=["IoTMain.c"]include_dirs=["../IoTAdcSensor","../IoTWiFi","../IoTUdp","../IoTHumanSensor","../IoTRelay",...项目源码工程配置AHT20温湿度模块编程TCP服务器端模块编程设备端主程序编程AHT20温湿度模块编程(1/8)AHT20本质上就是一个I2C设备,但在I2C的电路中,每个设备都会有一个设备地址。参考AHT20产品手册,我们可以确定AHT20的设备地址为0x38。在AHT20产品手册中具体介绍了AHT20的驱动步骤过程如下1.
上电后要等待40ms,读取温湿度值之前,首先要看状态字的校准使能位Bit[3]是否为1(通过发送0x71可以获取一个字节的状态字),如果不为1,要发送0xBE命令(初始化),此命令参数有两个字节数据,第一个字节为0x08,第二个字节为0x00,然后等待10ms。2.
直接发送0xAC命令(触发测量),此命令参数有两个字节数据,第一个字节为0x33,第二个字节为0x00。3.
等待80ms待测量完成,如果读取状态字Bit[7]为0,表示测量完成,然后可以连续读取六个字节;否则继续等待。4.
当接收完六个字节后,紧接着下一个字节是校验和数据,用户可以根据需要读出。根据转换公式计算出具体的温湿度值。AHT20温湿度模块编程(2/8)AHT20模块的I2C通信过程的时序:AHT20温湿度模块编程(3/8)转换公式:AHT20温湿度模块编程(4/8)在IoTAht20目录下创建IoTAht20.h头文件,在此头文件声明功能模块的函数:#ifndef__IOT_AHT20_H#define__IOT_AHT20_H
//调用此函数获取湿度与温度数据intIoTAht20GetData(float*humidity,float*temperature);#endifAHT20温湿度模块编程(5/8)创建IoTAht20.c源文件,并在源文件中实现AHT20获取温湿度数据的功能创建IoTAht20.c源文件,并在源文件中实现AHT20获取温湿度数据的功能。关键代码:/*通过发送0x71可以获取一个字节的状态字),状态字的校准使能位Bit[3]是否为1,如果不为1,要发送0xBE命令(初始化),此命令参数有两个字节,第一个字节为0x08,第二个字节为0x00,然后等待10ms。*/intIoTAht20Check();intIoTAht20GetData(float*humidity,float*temperature){/*直接发送0xAC命令(触发测量),此命令参数有两个字节,第一个字节为0x33,第二个字节为0x00。*///等待80ms待测量完成,读取7字节数据//如果读取状态字Bit[7]为0,表示测量完成
//获取AHT20输出的温湿度数据,根据公式转换成真实的温湿度值}AHT20温湿度模块编程(6/8)voidIoTAht20Init()//初始化{//配置IO口由I2C控制器使用//配置上拉
//初始化第0个I2C控制器,I2C传输率400KHzIoTAht20Check();//检查AHT20}SYS_RUN(IoTAht20Init);AHT20温湿度模块编程(7/8)然后创建BUILD.gn编译配置文件,实现AHT20功能模块的编译:static_library("IoTAht20"){sources=["IoTAht20.c",]include_dirs=["./","//utils/native/lite/include","//kernel/liteos_m/kal/cmsis","//base/iot_hardware/peripheral/interfaces/kits",]}AHT20温湿度模块编程(8/8)
完成后,修改IoTWareHouse目录下的BUILD.gn文件,实现将IoTAht20功能模块编进项目中:lite_component("app"){features=[..."IoTAht20:IoTAht20",]}在IoTMain主程序模块下测试AHT20传感器的应用。先修改IoTMain目录下的BUILD.gn文件,增加IoTAht20.h头文件的所在路径
include_dirs=[...
"../IoTAht20",
]项目源码工程配置AHT20温湿度模块编程TCP服务器端模块编程设备端主程序编程TCP服务器端模块编程(1/8)TCP服务器端Socket编程步骤:1.通过socket函数与网络协议栈建立联系,指定IPV4版本的TCP协议。intsd=socket(AF_INET,SOCK_STREAM,0)函数成功得到sd文件描述符,后续操作通过此sd与网络协议栈进行交互操作。2.通过bind函数绑定使用的IP地址对应的网络设备,
与指定使用端口号。intret=bind(sd,(structsockaddr*)&addr,sizeof(addr));绑定失败返回负数,成功返回0。3.通过listen函数向网络协议栈申请客户端等待连接处理的队列大小,即进入监听工作状态。listen(sd,100);//最多可以有100个客户端等待服务器端连接处理4.通过accept函数等待并处理客户端连接。每个客户端连接成功后,得到一个文件描述符。intclientFd=accept(sd,&saddr,&addr_len);5.通过clientFd文件描述符的read/write函数操作与客户端进行一对一的通信。6.网络通信完毕后,通过close函数断开与网络协议栈的联系。close(clientFd);TCP服务器端模块编程(2/8)在IoTTcpServer目录创建IoTTcpServer.h头文件用于声明TCP网络通信的回调函数:#ifndef__IOTTCPServer_H#define__IOTTCPServer_H//声明回调函数的类型typedefvoid(*JTCP_HANDLER)(intclientFd,char*data,intdataLen);//TCP接收处理回调函数的设置,tcpRcvFunc为当接收到客户端的tcp数据时自动调用的回调函数,data为接收缓冲区地址,dataLen为缓冲区数据大小intIoTTcpRcvFunc(JTCP_HANDLERtcpRcvFunc);#endifTCP服务器端模块编程(3/8)创建IoTTcpServer.c源文件中实现TCP服务器端的网络通信具体功能,IoTTcpServer.c源文件关键函数:staticvoid*tcpRcvThread(void*arg);//接收线程函数,处理每个客户端的通信staticvoid*tcpAcceptThread(void*arg);//专门处理客户端的线程函数,并每个连接的客户端创建专门接收数据的线程intIoTTcpRcvFunc(JTCP_HANDLERfunc);//记录接收时需要调用的回调函数的地址staticvoidIoTTcpServerInit(void){//1.模块初始化时,与网络协议栈建立联系,指定使用TCP协议//2.绑定使用10086端口号//3.设置客户端等待连接的队列大小,并进入监听状态//创建处理客户端连接的线程}SYS_RUN(IoTTcpServerInit)TCP服务器端模块编程(4/8)IoTTcpServer模块目录下的BUILD.gn编译配置文件:static_library("IoTTcpServer"){sources=["IoTTcpServer.c",]include_dirs=["./","//utils/native/lite/include","//kernel/liteos_m/kal/cmsis","//base/iot_hardware/peripheral/interfaces/kits","//foundation/communication/wifi_lite/interfaces/wifiservice","//vendor/hisi/hi3861/hi3861/third_party/lwip_sack/include",]}TCP服务器端模块编程(5/8)
然后修改项目IoTWareHouse目录下的BUILD.gn文件,让IoTTcpServer功能模块编译加入项目程序:lite_component("app"){features=[..."IoTTcpServer:IoTTcpServer",]}在IoTMain目录下BUILD.gn增加IoTTcpServer模块的IoTTcpServer.h头文件所在路径include_dirs=[..."../IoTTcpServer",]TCP服务器端模块编程(6/8)修改IoTMain目录下的IoTMain.c源文件。在程序中待Wi-Fi连接成功后,设置TCP通信的回调函数,并在该函数中实现将接收到的数据回传到客户端的功能:#include"IoTTcpServer.h"//TCP通信的回调函数voidtcpRcvCallback(intclientFd,char*data,intlen){//通过文件描述符获取客户端的IP地址及端口号//向客户端回传数据,即将客户端传输的数据转传回去。}voidIoTMainInit(){...//设置TCP接收回调函数IoTTcpRcvFunc(tcpRcvCallback);}TCP服务器端模块编程(7/8)代码编辑完成后,编译并烧录程序。通过Socket调试工具对PC端与设备端的TCP通信进行测试,设备端的终端输出:TCP服务器端模块编程(8/8)Socket调试工具测试页面:项目源码工程配置AHT20温湿度模块编程TCP服务器端模块编程设备端主程序编程设备端主程序编程(1/4)通过调用功能模块的功能,来完成整个项目程序的开发工作。与第5章的项目功能一样,支持App端通过UDP广播查询设备功能,UDP通信协议如下:
手机端发:"scanningDev",设备端回复"iamDev"同时通过TCP通信,支持App端向设备端更新传感器数据及布防功能,通信协议如下:手机端发:"cmdDev:updateSensor",设备端回复"dataDev:温度数据:湿度数据:烟雾数据:人体感应数据"
手机端发:"cmdDev:guardOn",设备端回复"dataDev:guardOn"//设备端进入布防状态,当感应人体活动或烟雾传感器数据异常时则拉响警报手机端发:"cmdDev:guardOff",设备端回复"dataDev:guardOff"//设备端退出布防状
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 某著名企业五局天津项目铝合金模板应用案例分享
- 某著名企业竞争战略与管理提升咨询项目建议书-正略钧策1011
- 《GB-T 40037-2021电子商务产品信息描述 大宗商品》专题研究报告
- 《GB-T 22114-2021牙膏用保湿剂 甘油和聚乙二醇》专题研究报告
- 《GBT 17999.6-2008 SPF鸡 微生物学监测 第6部分:SPF鸡 酶联免疫吸附试验》专题研究报告
- 《FZT 64068-2019拒油防污机织粘合衬》专题研究报告深度
- 道路安全培训内容记录课件
- 道墟街道安全培训教育课件
- 2024胸骨捆扎固定系统注册审查指导原则
- 返乡下乡创业培训课件
- TD/T 1036-2013土地复垦质量控制标准
- 车位包销合同协议模板
- 《FPC材料介绍》课件
- 员工转岗协议书范本
- 四川省遂宁市射洪县九年级2024-2025学年(上)期末化学试卷(含答案)
- 2025-2030中国器官芯片行业市场发展趋势与前景展望战略研究报告
- 医院医疗保险费用审核制度
- 村卫生室医疗质量相关管理制度
- 中小学校园中匹克球推广策略与实践研究
- 2024年世界职业院校技能大赛高职组“体育活动设计与实施组”赛项考试题库(含答案)
- 高中地理选择性必修一(湘教版)期末检测卷02(原卷版)
评论
0/150
提交评论