下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
开发示例——MQTT客户端新建名为mqttexpe文件夹,在文件夹下新建名为mqttexpe.c文件和BUILD.gn的文件。1.编写mqttexpe.c代码如下:#include"MQTTClient.h"#defineMQTT_BROKER"broker.emqx.io" //MQTTBroker的地址#defineMQTT_PORT 1883MQTTMessageackmsg;intneedAck=0;structopts_struct{char*clientid; //客户IDintnodelimiter; //有无分隔符标志char*delimiter; //分隔符enumQoSqos; //服务质量char*username; //用户名char*password; //密码char*host; //服务器地址intport; //端口号intshowtopics; //打印订阅的主题}opts={/**客户ID是唯一的,不可重复,重复会把前面连接的挤下线**/(char*)"mqtt_clientid_0",0,(char*)"\n",QOS2,NULL,NULL,(char*)MQTT_BROKER,MQTT_PORT,1};voidmessageArrived(MessageData*md){MQTTMessage*message=md->message;/**打印接收到的信息**/printf("%.*s",(int)message->payloadlen,(char*)message->payload);//根据message->payloadlen指示的宽度打印message->payload的一部分}unsignedcharbuf1[100];unsignedcharreadbuf[100];intMQTT_Test(void){intrc=0;MQTTMessagepubmsg;/**要订阅的主题**/char*topic="MQTT_PC";if(strchr(topic,'#')||strchr(topic,'+'))opts.showtopics=1;if(opts.showtopics)printf("topicis%s\n",topic);Networkmqtt_net;MQTTClientclient;/**网络初始化**/NetworkInit(&mqtt_net);/**网络连接**/rc=NetworkConnect(&mqtt_net,opts.host,opts.port);printf("Connected%d\n",rc);/**设置MQTT缓存**/MQTTClientInit(&client,&mqtt_net,1000,buf1,100,readbuf,100);/**启动MQTT任务**/rc=MQTTStartTask(&client);printf("Connected%d\n",rc);/**设置MQTT相关参数**/MQTTPacket_connectDatadata=MQTTPacket_connectData_initializer;data.willFlag=0;data.MQTTVersion=3;data.clientID.cstring=opts.clientid;data.username.cstring=opts.username;data.password.cstring=opts.password;data.keepAliveInterval=10;data.cleansession=1;printf("Connectingto%s%d\n",opts.host,opts.port);/**连接到MQTT服务器**/rc=MQTTConnect(&client,&data);printf("Connected%d\n",rc);printf("Subscribingto%s\n",topic);/**订阅主题和接收消息**/rc=MQTTSubscribe(&client,topic,opts.qos,messageArrived);printf("Subscribed%d\n",rc);/**设置消息参数**/memset(&ackmsg,'\0',sizeof(ackmsg));ackmsg.payload=(void*)"IamMCU";ackmsg.payloadlen=strlen((char*)ackmsg.payload);ackmsg.qos=QOS0;ackmsg.retained=0;ackmsg.dup=0;while(1){/**发送数据**/MQTTPublish(&client,"MQTT_MCU",&ackmsg);sleep(2);}printf("Stopping\n");/**断开MQTT的连接**/MQTTDisconnect(&client);/**关闭网络连接**/NetworkDisconnect(&mqtt_net);return0;}staticvoidMQTTTask(void*arg){(void)arg;sleep(12);MQTT_Test();}staticvoidMQTTTaskEntry(void){/**任务属性的结构体**/osThreadAttr_tattr; ="MQTTTask";//任务名称 attr.attr_bits=0U; //任务的属性位 attr.cb_mem=NULL;//任务控制块的内存初始地址,默认为系统自动分配 attr.cb_size=0U;//任务控制块的内存大小 attr.stack_mem=NULL;//任务的内存初始地址,默认为系统自动分配 attr.stack_size=4096; //任务的内存大小attr.priority=11; //任务的优先级 /**创建任务**/ if(osThreadNew((osThreadFunc_t)MQTTTask,NULL,&attr)==NULL){ printf("[MQTTTaskEntry]FaliedtocreateMQTTTask!\n"); }}/**让系统运行指定的函数**/SYS_RUN(MQTTTaskEntry);2.编写BUILD.gn如果按照11.2.1节完成了PahoMQTT库移植的所有步骤,则BUILD.gn代码如下:#将预编译的PahoMQTT静态库libpahomqtt_static.a复制到输出目录config_file=["//third_party/libs/libpahomqtt_static.a"]copy("config"){sources=config_fileoutputs=["//out/hispark_pegasus/wifiiot_hispark_pegasus/libs/{{source_file_part}}"]}#编译mqttexpe静态库static_library("mqttexpe"){sources=["mqttexpe.c",]#编译选项,禁用特定编译器警告,#以兼容PahoMQTT库代码规范(该库可能存在警告)cflags=["-Wno-unused-variable"]cflags+=["-Wno-unused-but-set-variable"]#头文件依赖路径include_dirs=["//utils/native/lite/include","//kernel/liteos_m/kal/cmsis","//device/hisilicon/hispark_pegasus/sdk_liteos/include","//foundation/communication/wifi_lite/interfaces/wifiservice","//third_party/cJSON","//third_party/lwip/src/include/lwip","//third_party/lwip/src/include/lwip/apps","//third_party/musl/porting/liteos_m/kernel/include/netinet","//third_party/pahomqtt/MQTTClient-C/src","//third_party/pahomqtt/MQTTClient-C/src/liteOS","//third_party/pahomqtt/MQTTPacket/src",]deps=[":config"]}如果按照11.2.1节完成了PahoMQTT库移植的前4步,省略了第5、6步,则BUILD.gn中不需要预先复制PahoMQTT静态库文件到out目录,其代码和其他案例差不多,具体如下:static_library("mqttexpe"){sources=["mqttexpe.c",]include_dirs=["//utils/native/lite/include","//kernel/liteos_m/kal/cmsis","//device/hisilicon/hispark_pegasus/sdk_liteos/include","//foundation/communication/wifi_lite/interfaces/wifiservice","//third_party/cJSON","//third_party/lwip/src/include/lwip","//third_party/lwip/src/include/lwip/apps","//third_party/musl/porting/liteos_m/kernel/include/netinet","//third_party/pahomqtt/MQTTClient-C/src","//third_party/pahomqtt/MQTTClient-C/sr
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 本地化战略合作伙伴责任合同
- 青岛大学德语试题与答案
- 水利安全讲话汇编讲解
- 中级注册安全工程师全真模拟测试带答案2025
- 工厂可视化6S知识测试试题及答案
- 电缆沟防火涂料涂刷施工方案
- 幼师职业规划演讲模板
- 便携式储能设备阳极材料生产项目可行性研究报告
- 石刻保护专项施工方案
- 排污许可信息公开管理规范
- (2026年)抗抑郁药与麻醉课件
- 压力管道设计和校核人员考核测试试题库(综合版)
- 肥料装卸制度及流程规范
- 2026年上海市教师职称考试(德育二)综合能力测试题及答案解析
- 智能产品介绍课件
- 2026年上海师范大学天华学院单招(计算机)考试备考题库必考题
- 2025-2026学年人教版二年级体育与健康全一册教案设计
- 死囚漫步五步陷阱课件
- 天津大学物理化学第五章化学平衡教案
- 人工智能算力中心设计与建设方案
- 海水制盐课件
评论
0/150
提交评论