點擊藍字 ╳ 關注我們
王維平
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】歡迎添加關注!文章轉載請注明出處。
-
鴻蒙
+關注
關注
57文章
2392瀏覽量
43059 -
OpenHarmony
+關注
關注
25文章
3747瀏覽量
16592
原文標題:OpenHarmony開發之MQTT講解
文章出處:【微信號:gh_e4f28cfa3159,微信公眾號:OpenAtom OpenHarmony】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
OpenHarmony應用開發精品課程重磅來襲
![<b class='flag-5'>OpenHarmony</b>應用<b class='flag-5'>開發</b>精品課程重磅來襲](https://file1.elecfans.com/web2/M00/0B/A2/wKgaomcl7I6ALF_mAABKmm_UzRw351.png)
觸覺智能Purple Pi OH鴻蒙開發板成功適配OpenHarmony5.0 Release,開啟新征程
![觸覺智能Purple Pi OH鴻蒙<b class='flag-5'>開發</b>板成功適配<b class='flag-5'>OpenHarmony</b>5.0 Release,開啟新征程](https://file1.elecfans.com/web2/M00/0B/17/wKgaomcbB5CAT81-AABxUeJzZxU480.png)
MQTT調試助手中文版(物聯網開發必備)
基于ArkTS語言的OpenHarmony APP應用開發:HelloOpenharmony
![基于ArkTS語言的<b class='flag-5'>OpenHarmony</b> APP應用<b class='flag-5'>開發</b>:Hello<b class='flag-5'>Openharmony</b>](https://file.elecfans.com/web2/M00/26/21/pYYBAGG5jjSALfrEAAAwAa9Oig8799.png)
合宙Air780EP模塊——AT指令MQTT接入OneNET開發指南
![合宙Air780EP模塊——AT指令<b class='flag-5'>MQTT</b>接入OneNET<b class='flag-5'>開發</b>指南](https://file1.elecfans.com/web2/M00/04/49/wKgaombDBK2AAonzAAAoF8GMJwg647.png)
MQTT應用看這篇!合宙Air780EP_LuatOS_MQTT應用指南
![<b class='flag-5'>MQTT</b>應用看這篇!合宙Air780EP_LuatOS_<b class='flag-5'>MQTT</b>應用指南](https://file1.elecfans.com/web2/M00/FE/92/wKgaomad_iCAGM1mACObj6OhrXM912.png)
評論