点击蓝字 ╳ 关注我们
王维平
OpenHarmony知识体系工作组
![](https://file1.elecfans.com//web2/M00/97/A9/wKgZomTnPSWAXlINAAHVh-LkUdM842.png)
什么是MQTT
MQTT的基本原理
![](https://file1.elecfans.com//web2/M00/97/A9/wKgZomTnPSWAAnflAASatgpIQA0876.png)
![](https://file1.elecfans.com//web2/M00/97/A9/wKgZomTnPSWAJAXUAARVl0KWeAE966.png)
MQTT客户端开发流程
![](https://file1.elecfans.com//web2/M00/97/A9/wKgZomTnPSWADh9-AAKgnFQPkXI024.png)
//订阅的回调函数
void messageArrived(MessageData *data)
{
printf("Message arrived on topic %.*s: %.*s
", data->topicName->lenstring.len,
data->topicName->lenstring.data, data->message->payloadlen, data->message->payload);
}
//主流程函数
static void MQTTDemoTask(void)
{
WifiConnect("BearPi", "123456789");
printf("Starting ...
");
int rc, count = 0;
MQTTClient client;
NetworkInit(&network);
printf("NetworkConnect ...
");
NetworkConnect(&network, MQTT_SERVERIP, MQTT_SERVERPORT);//本地电脑作为消息代理 此处为电脑IP
printf("MQTTClientInit ...
");
//1-------------创建客户端对象
MQTTClientInit(&client, &network, MQTT_CMD_TIMEOUT_MS, sendBuf, sizeof(sendBuf), readBuf, sizeof(readBuf));
MQTTString clientId = MQTTString_initializer;
clientId.cstring = "bearpi";
MQTTPacket_connectData data = MQTTPacket_connectData_initializer;
data.clientID = clientId;
data.willFlag = 0;
data.MQTTVersion = MQTT_VERSION;
data.keepAliveInterval = MQTT_KEEP_ALIVE_MS;
data.cleansession = 1;
printf("MQTTConnect ...
");
//2-------------连接服务端
rc = MQTTConnect(&client, &data);
if (rc != 0) {
printf("MQTTConnect: %d
", rc);
NetworkDisconnect(&network);
MQTTDisconnect(&client);
osDelay(MQTT_DELAY_2S);
}
printf("MQTTSubscribe ...
");
//3-------------订阅主题substopic
rc = MQTTSubscribe(&client, "substopic", MQTT_QOS, messageArrived);
if (rc != 0) {
printf("MQTTSubscribe: %d
", rc);
osDelay(MQTT_DELAY_2S);
}
while (++count) {
MQTTMessage message;
char payload[30];
message.qos = MQTT_QOS;
message.retained = 0;
message.payload = payload;
(void)sprintf_s(payload, sizeof(payload), "message number %d", count);
message.payloadlen = strlen(payload);
//4------------发布pubtopic主题
if ((rc = MQTTPublish(&client, "pubtopic", &message)) != 0) {
printf("Return code from MQTT publish is %d
", rc);
NetworkDisconnect(&network);
MQTTDisconnect(&client);
}
osDelay(MQTT_DELAY_500_MS);
}
}
MQTT实操验证
![](https://file1.elecfans.com//web2/M00/97/A9/wKgZomTnPSWAIf-gAAAKfuKCrQs195.png)
![](https://file1.elecfans.com//web2/M00/97/A9/wKgZomTnPSaAbH2nAADdll_hLEY168.png)
![](https://file1.elecfans.com//web2/M00/97/A9/wKgZomTnPSaAZ2BGAABMJebMHKk282.png)
![](https://file1.elecfans.com//web2/M00/97/AA/wKgZomTnPSaAOw7hAABnTOnUthM402.png)
![](https://file1.elecfans.com//web2/M00/97/AA/wKgZomTnPSaATN98AAAWw_bILVc279.png)
![](https://file1.elecfans.com//web2/M00/97/AA/wKgZomTnPSaAcRa0AAAFKCVL7OE720.png)
![](https://file1.elecfans.com//web2/M00/97/AA/wKgZomTnPSaAPEPgAABi5avgSoY625.png)
NetworkConnect(&network, 192.168.120.137, 1883);//本地电脑作为消息代理 此处为电脑IP Mosquitto相匹配
printf("Starting ...
");
NetworkInit(&network);
printf("NetworkConnect ...
");
NetworkConnect(&network, MQTT_SERVERIP, MQTT_SERVERPORT);//本地电脑作
printf("MQTTClientInit ...
");
//1-------------创建客户端对象
MQTTClientInit(&client, &network, MQTT_CMD_TIMEOUT_MS, sendBuf, sizeof(sendBuf), readBuf, sizeof(readBuf));
printf("MQTTConnect ...
");
//2-------------连接服务端
rc = MQTTConnect(&client, &data);
printf("MQTTSubscribe ...
");
//3-------------订阅主题substopic
rc = MQTTSubscribe(&client, "substopic", MQTT_QOS, messageArrived);
(void)sprintf_s(payload, sizeof(payload), "message number %d", count);
//4------------循环发布pubtopic主题 内容为message number+connt的计数值
MQTTPublish(&client, "pubtopic", &message)
//订阅的回调函数输出以下内容
printf("Message arrived on topic %.*s: %.*s
", data->topicName->lenstring.len,
data->topicName->lenstring.data,data->message->payloadlen,data->message->payload);
![](https://file1.elecfans.com//web2/M00/97/AA/wKgZomTnPSaAWM6NAAAJnuIO8MI094.png)
![](https://file1.elecfans.com//web2/M00/97/AA/wKgZomTnPSaAfOBbAANN-t7Elx8925.png)
总结
相关链接
小熊派开发板学习路径:
https://growing.openharmony.cn/mainPlay/learnPathMaps?id=19
小熊派开发板MQTT文档:
https://gitee.com/bearpi/bearpi-hm_nano/blob/master/applications/BearPi/BearPi-HM_Nano/sample/D5_iot_mqtt/README.md
Windows + mosquitto搭建MQTT Broker:
https://blog.csdn.net/wallace89/article/details/125617330
OpenHarmony源码获取:
https://gitee.com/openharmony/docs/blob/master/zh-cn/device-dev/get-code/sourcecode-acquire.md
OpenHarmony三方库MQTT:
https://gitee.com/openharmony-tpc/talkweb_mqtt
OpenHarmony知识体系工作组智慧家居开发样例
https://gitee.com/openharmony-sig/knowledge_demo_smart_home
使用MQTT协议连华为IOT平台
https://gitee.com/bearpi/bearpi-hm_nano/blob/master/applications/BearPi/BearPi-HM_Nano/sample/D6_iot_cloud_oc/README.md
原文标题:OpenHarmony开发之MQTT讲解
文章出处:【微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。
-
鸿蒙
+关注
关注
55文章
2106浏览量
42273 -
OpenHarmony
+关注
关注
24文章
3477浏览量
15416
原文标题:OpenHarmony开发之MQTT讲解
文章出处:【微信号:gh_e4f28cfa3159,微信公众号:OpenAtom OpenHarmony】欢迎添加关注!文章转载请注明出处。
发布评论请先 登录
相关推荐
OpenHarmony开发者大会2024:鸿心聚力 智引未来
![<b class='flag-5'>OpenHarmony</b><b class='flag-5'>开发</b>者大会2024:鸿心聚力 智引未来](https://file1.elecfans.com/web2/M00/8F/50/wKgZomTMciWAD54NAABOGP2pQZY452.png)
润开鸿AT32开发平台通过OpenHarmony兼容性测评
![润开鸿AT32<b class='flag-5'>开发</b>平台通过<b class='flag-5'>OpenHarmony</b>兼容性测评](https://file1.elecfans.com//web2/M00/B7/18/wKgaomWC6NWAcLEHAAIy5dzs58s489.jpg)
openharmony开发应用
OpenHarmony之NAPI框架介绍
OpenHarmony开发者论坛正式上线,盖楼赢惊喜好礼~
MQTT是什么 MQTT特点
OpenHarmony创新赛|赋能直播第四期
OpenHarmony创新赛|赋能直播第四期
DevEco Studio中如何设置HarmonyOS/OpenHarmony应用开发
OpenHarmony应用开发之自定义弹窗
![](https://file1.elecfans.com/web2/M00/94/42/wKgZomTkWbCAGWxWAAEy3oE5evU644.jpg)
OpenHarmony应用开发入门与基础课程_第二章-入门 _OpenHarmony应用开发准备
![](https://file1.elecfans.com/web2/M00/94/42/wKgZomTkV7aANzqwAAEzD3XlPUA811.jpg)
OpenHarmony应用开发入门与基础课程_第一章-引言 _OpenHarmony应用开发介绍
OpenHarmony轻量系统书籍推荐《OpenHarmony轻量设备开发理论与实战》
保姆级的OpenHarmony创新赛赋能直播课程来了!
![保姆级的<b class='flag-5'>OpenHarmony</b>创新赛赋能直播课程来了!](https://file1.elecfans.com/web2/M00/8C/D9/wKgaomSznGKAcu3KACMpRsTNSrY248.png)
评论