怎样进行鸿蒙编程,在鸿蒙系统上使用mqtt编程[通俗易懂] -金沙1005

我们使用的是pahomqtt软件包,这里介绍一下怎么使用mqtt协议编程。关于鸿蒙系统的mqtt移植好的软件包,相关github链接如下:https://gitee.com/qidiyun/harmony_mqtt这里提供一个简单的编程示例:这里我们使用mqttclient编程模型,他支持多任务多线程,非常适合用在鸿蒙系统上。1.网络初始化这里定义一个network结构体,然后指定我们的m…

大家好,我是你的好朋友思创斯。网站金沙1005首页:https://ispacesoft.com

我们使用的是paho mqtt软件包,这里介绍一下怎么使用mqtt协议编程。关于鸿蒙系统的mqtt移植好的软件包,相关github链接如下:

https://gitee.com/qidiyun/harmony_mqtt

这里提供一个简单的编程示例:

这里我们使用mqttclient编程模型,他支持多任务多线程,非常适合用在鸿蒙系统上。

1. 网络初始化

这里定义一个 network 结构体,然后指定我们的mqtt服务器的ip和端口号。

network n;

//初始化结构体

networkinit(&n);

//连接到指定的mqtt服务器ip、端口号

networkconnect(&n, “xxx.xxx.xxx.xxx”, xxxx);

2. 设置mqtt缓存和启动mqtt线程

我们这里使用的是mqtt线程功能。

mqttclientinit(&c, &n, 1000, buf, 100, readbuf, 100);

mqttstarttask(&c);

3. 设置mqtt相关参数

接下来我们设置mqtt的相关参数,包括版本号、客户端id、账户密码等

mqttpacket_connectdata data = mqttpacket_connectdata_initializer;

data.willflag = 0;

//mqtt版本为 v3

data.mqttversion = 3;

//设置客户端id

data.clientid.cstring = opts.clientid;

//设置客户端账户

data.username.cstring = opts.username;

//设置客户端密码

data.password.cstring = opts.password;

data.keepaliveinterval = 10;

data.cleansession = 1;

//连接到mqtt服务器

rc = mqttconnect(&c, &data);

4. 订阅主题和接收消息

订阅主题可以使用如下函数

mqttsubscribe(&c, topic, opts.qos, messagearrived);

它的函数原型如下:

dllexport int mqttsubscribe(mqttclient* client, const char* topicfilter, enum qos, messagehandler);

其中:

mqttclient* c :我们前面定义的mqttclient结构体

const char* topicfilter:订阅的主题

messagehandler messagehandler :接收到主题信息后的回调处理函数。

例如上面我们的回调函数是  messagearrived ,它的原型如下:

void messagearrived(messagedata* md)

{

mqttmessage* message = md->message;

//打印接收到的消息的长度、和消息内容

printf(“%.*s”, (int)message->payloadlen, (char*)message->payload);

}

5. 发送消息

发送消息也比较简单,我们只需要设置好我们的主题和消息内容即可

memset(&pubmsg, ‘\0’, sizeof(pubmsg));

//消息内容为 hello harmonyos !

pubmsg.payload = (void*)”hello harmonyos !”;

//消息长度

pubmsg.payloadlen = strlen((char*)pubmsg.payload);

pubmsg.qos = qos0;

pubmsg.retained = 0;

pubmsg.dup = 0;

//推送消息,主题为 pubtest

mqttpublish(&c, “pubtest”, &pubmsg);

完整源码如下:

#include

#include

#include “ohos_init.h”

#include “cmsis_os2.h”

#include

#include “hi_wifi_api.h”

//#include “wifi_sta.h”

#include “lwip/ip_addr.h”

#include “lwip/netifapi.h”

#include “lwip/sockets.h”

#include “mqttclient.h”

/**

* mqtt uri farmat:

* domain mode

* tcp://iot.eclipse.org:1883

*

* ipv4 mode

* tcp://192.168.10.1:1883

* ssl://192.168.10.1:1884

*

* ipv6 mode

* tcp://[fe80::20c:29ff:fe9a:a07e]:1883

* ssl://[fe80::20c:29ff:fe9a:a07e]:1884

*/

#define mqtt_uri “tcp://106.13.62.194:1883”

struct opts_struct

{

char* clientid;

int nodelimiter;

char* delimiter;

enum qos qos;

char* username;

char* password;

char* host;

int port;

int showtopics;

} opts =

{

(char*)”stdout-subscriber”, 0, (char*)”\n”, qos2, null, null, (char*)”106.13.62.194″, 1883, 1

};

void messagearrived(messagedata* md)

{

mqttmessage* message = md->message;

if (opts.showtopics)

printf(“%.*s\t”, md->topicname->lenstring.len, md->topicname->lenstring.data);

if (opts.nodelimiter)

printf(“%.*s”, (int)message->payloadlen, (char*)message->payload);

else

printf(“%.*s%s”, (int)message->payloadlen, (char*)message->payload, opts.delimiter);

//fflush(stdout);

}

unsigned char buf[100];

unsigned char readbuf[100];

int mqtt_test(void)

{

int rc = 0;

mqttmessage pubmsg;

char* topic = “test”;

if (strchr(topic, ‘#’) || strchr(topic, ‘ ’))

opts.showtopics = 1;

if (opts.showtopics)

printf(“topic is %s\n”, topic);

network n;

mqttclient c;

networkinit(&n);

networkconnect(&n, opts.host, opts.port);

mqttclientinit(&c, &n, 1000, buf, 100, readbuf, 100);

mqttstarttask(&c);

mqttpacket_connectdata data = 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(“connecting to %s %d\n”, opts.host, opts.port);

rc = mqttconnect(&c, &data);

printf(“connected %d\n”, rc);

printf(“subscribing to %s\n”, topic);

rc = mqttsubscribe(&c, topic, opts.qos, messagearrived);

printf(“subscribed %d\n”, rc);

memset(&pubmsg, ‘\0’, sizeof(pubmsg));

pubmsg.payload = (void*)”hello harmonyos !”;

pubmsg.payloadlen = strlen((char*)pubmsg.payload);

pubmsg.qos = qos0;

pubmsg.retained = 0;

pubmsg.dup = 0;

while (1)

{

mqttpublish(&c, “pubtest”, &pubmsg);

sleep(1);

}

printf(“stopping\n”);

mqttdisconnect(&c);

networkdisconnect(&n);

return 0;

}

js555888金沙老品牌的版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由思创斯整理,转载请注明出处:https://ispacesoft.com/4660.html

(0)

相关推荐

  • 手把手教你写出第一个鸿蒙(harmonyos)程序

    运行完第一个app,真的有点鸿蒙(好懵)的感觉??就这??鸿蒙的开源地址:鸿蒙开源地址一、打开金沙1005官网harmonyos,源码编译请下载:源码编译器,开发应用请下载:huaweidevecostudio,开发环境需要配置好jdk、node.js,这个百度自己找!二、安装完成后,需要设置下sdk的安装位置。地址是可以修改成自己的路径,platforms和tools的勾全部打上!!!然后点击确定。三、创建第一个项目步骤如下图:它有支持三种类型的应用:tv设备应用、wearable

  • 零基础学鸿蒙编程-ui控件_text

    什么是texttext是用于展示文本内容的ui控件.常见效果如下:基础样例1.普通文本效果图代码2.设置字号效果图代码

  • 别找了,这可能是全网最全的鸿蒙(harmonyos)刷机指南!

    本文的目的是将鸿蒙2.0刷到润和hi3861、hi3516和hi3518开发板上。目前网上已经有很多关于刷鸿蒙2.0的文章,我整理了一下,并结合自己的经验,在本文中阐述了从配置环境,到编译…

  • 零基础学鸿蒙编程-常用工具_hilog

    什么是hiloghilog是鸿蒙程序用来打印日志的工具,相比于默认的控制台(println)输出,log支持分级别过滤日志,方便按照关键字进行过滤等.基础样例代码finalhiloglabellabel=newhiloglabel(hilog.log_app,0,”[花生皮编程]”);hilog.debug(label,”打印调试信息”);hilog.info(label,”打印一般信息”);hilog.warn(label,”打印警告信息”);hilog.error

  • 零基础学鸿蒙编程-轻量级数据库

    什么是轻量级数据库轻量级数据库是一种以键值对形式保存数据的存储方式.每条数据都需要指定一个唯一键名来进行区分.可以存储布尔型、整型、字符串等基础数据类型.其特点为简单、轻量,适合保存少量简单类型的数据,不适合保存大批量或复杂类型的数据.基础样例1.写入和读取数据java代码publicclassmainabilitysliceextendsabilityslice{privatepreferencespreferences;@overridep

  • 华为编程语言实验室面向qq群人员发布了华为新语言试用报名问卷调查,并表示,“填写完信息后,请您及时查收邮箱信息,由于语言还未正式发布,因此后续会联系您签署保密协议,希望您能理解,再次感谢大家的支持~”其实华为自研编程语言的消息并非是一时兴起的。去年10月,在华为开发者大会2021(together)上,harmonyos3开发者预览版正式发布。同时,华为表示,将发布自研鸿蒙编程语言。华为副总裁、计算产品线总裁邓泰华去年9月在接受采访时表示,华为明年将推出自研的编程语

  • 我的harmonyos实战——鸿蒙系统开发入门学习

    1.为什么要学习鸿蒙开发?开发者的角度:安卓操作系统连接外部设备时,发现,配对,连接,组合,验证每一步都不能少。连接上了之后才能调用控制第三方设备。换一个设备之后,所有的代码需要重写。所有用安卓也可以连接外部设备并进行控制,但是太过于麻烦。而且不具备通用性鸿蒙操作系统就解决了这个痛点,设备与设备之间的连接就不需要我们开发者自己去写了,每一个设备都安装上鸿蒙操作系统之后,鸿蒙系统会通过软总线把这些设备都连接在一起。我们在应用开发的时候,只需要写很少的代码可以调用第三方设备,就好像是使用手机本身的设备一样

  • 零基础学鸿蒙编程-ui控件_timepicker

    什么是timepickertimepicker是一种时间滚轮式选择器.常见效果如下:1.基本用法效果图代码2.设置背景效果图代码

发表回复

您的电子邮箱地址不会被公开。

联系金沙1005

关注“java架构师必看”公众号

回复4,添加站长微信。

附言:ispacesoft.com网而来。

关注微信
网站地图