點擊藍字 ╳ 關注我們
王維平
OpenHarmony知識體系工作組

什么是MQTT
MQTT的基本原理


MQTT客戶端開發流程

//訂閱的回調函數
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實操驗證







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://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應用開發精品課程重磅來襲

觸覺智能Purple Pi OH鴻蒙開發板成功適配OpenHarmony5.0 Release,開啟新征程

MQTT調試助手中文版(物聯網開發必備)
基于ArkTS語言的OpenHarmony APP應用開發:HelloOpenharmony

合宙Air780EP模塊——AT指令MQTT接入OneNET開發指南

MQTT應用看這篇!合宙Air780EP_LuatOS_MQTT應用指南

評論