0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

mqtt協(xié)議怎么用?以MQTT3.1協(xié)議ESP8266連接阿里云物聯(lián)網(wǎng)平臺

嵌入式技術(shù) ? 來源:嵌入式技術(shù) ? 作者:嵌入式技術(shù) ? 2022-05-25 18:32 ? 次閱讀

MQTT(Message Queuing Telemetry Transport,消息隊列遙測傳輸協(xié)議),是一種基于發(fā)布/訂閱(Publish/Subscribe)模式的輕量級通訊協(xié)議,該協(xié)議構(gòu)建于TCP/IP協(xié)議上,由IBM在1999年發(fā)布。MQTT最大的優(yōu)點(diǎn)在于可以以極少的代碼和有限的帶寬,為遠(yuǎn)程設(shè)備提供實時可靠的消息服務(wù)。做為一種低開銷、低帶寬占用的即時通訊協(xié)議,MQTT在物聯(lián)網(wǎng)、小型設(shè)備、移動應(yīng)用等方面有廣泛的應(yīng)用。MQTT屬于應(yīng)用層協(xié)議。最新版本為MQTT v5.0標(biāo)準(zhǔn)。本次連接阿里云物聯(lián)網(wǎng)平臺主要以MQTT標(biāo)準(zhǔn)協(xié)議3.1版本為主。

1.注冊阿里云賬號,登陸云平臺

pYYBAGKN70uAA6kZAAfLwYwUP38961.png

1.1 搜索物聯(lián)網(wǎng)平臺,登錄物聯(lián)網(wǎng)平臺

poYBAGKN8LKAEwgFAAFGkiSP3tA599.png

1.2. 選擇公共實例,創(chuàng)建產(chǎn)品

pYYBAGKN8R2AN9KUAAG5zVn_TPs116.png

設(shè)置產(chǎn)品信息

poYBAGKN8V2AfJI-AAEj6SF8mgs140.png

添加產(chǎn)品

pYYBAGKN9jOAGz7ZAAGQ5mo04co954.pngpoYBAGKN9lOAYYo9AAEYIckILAI932.pngpoYBAGKN9oaARD5YAAIzoF7NHU8786.png

每一個設(shè)備都有自己的三元組,單擊設(shè)備名字,查看設(shè)備三組:設(shè)備三元組很重要,在后面登錄阿里云平臺需要用到。

poYBAGKN95WAALNOAAEg8AnLnNc665.png

添加產(chǎn)品功能

poYBAGKN-WaAG5L0AAFYOZWUiz0167.png

2.連接阿里云

2.1 編寫ESP8266驅(qū)動程序,連接阿里云

//TCP+STA模式,連接服務(wù)器
#define WIFI_NAME     "WBYQ"  //wifi名
#define WIFI_PASSWORD "asdfghjkl23"http://WiFi密碼
#define SERVER_IP      "a1knXG89uwh.iot-as-mqtt.cn-shanghai.aliyuncs.com"http://服務(wù)器ip
#define SERVER_PORT   1883//端口號
while(1)
{
    stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);
	if(stat==0)break;
	Delay_Ms(500);
	printf("stat=%d\r\n",stat);
}
printf("服務(wù)器連接成功\r\n");

服務(wù)器ip和端口號設(shè)置參考阿里云在線文檔

pYYBAGKN-fiARaqwAAHV7NLbvyI681.pngpYYBAGKN-j2AGsozAAInhrtQwFA997.png

服務(wù)器IP格式:

${YourProductKey}.iot-as-mqtt.${YourRegionId}.aliyuncs.com:1883
${YourProductKey}為設(shè)備的ProductKey,上面講到設(shè)備三元組已提到過。
${YourRegionId} 是區(qū)域代碼,我這是屬于華東2,區(qū)域代碼:cn-shanghai
綜上,服務(wù)器ip為 ”a1knXG89uwh.iot-as-mqtt.cn-shanghai.aliyuncs.com”

2.2 MQTT連續(xù)服務(wù)端

MQTT連接阿里云需要三個參數(shù):客戶端id、用戶名、密碼。
這三個參數(shù)填寫可參考阿里云文檔工具。

#define ClientID "STM32|securemode=3,signmethod=hmacsha1|"
#define Username "STM32&a17b5WKUY0S"
#define Password "ebff9579ed3e610228da8c035afc9636954c43bd"http://密文
	while(1)
	{
		MQTT_Init();
		stat=MQTT_Connect(ClientID,Username,Password);
		if(stat==0)break;
		Delay_Ms(500);
		printf("正在連接....\r\n");
	}
	printf("阿里云連接成功\r\n");

2.3 客戶端ID

根據(jù)阿里云文檔介紹,clientId可自定義,一般我們直接使用三元組中的DeviceName代替;timestamp可不填。綜上,mqttClientId: DS18B20|securemode=3,signmethod=hmacsha1|

2.4 用戶名
用戶名中deviceName用三元組中DeviceName代替;productKey用三元組中productKey代替。綜上,mqttUsername: DS18B20&a1knXG89uwh

2.5 密碼
密碼生成我們可以直接使用阿里云提供的密碼生成工具password工具

poYBAGKN-wWAEQLDAANzGqFXegQ300.png

3.訂閱消息和發(fā)布消息

??3.1 訂閱消息
?將硬件采集到的數(shù)據(jù)上傳到云端我們稱之為發(fā)布消息;云端將數(shù)據(jù)下發(fā)給開發(fā)板稱為訂閱。
打開產(chǎn)品,查看產(chǎn)品詳細(xì)信息,可以看到有訂閱和發(fā)布接口。

poYBAGKN-6eAYXScAAEO0uL-ieM966.png
#define SET_TOPIC  "/sys/a1knXG89uwh/DS18B20/thing/service/property/set"http://訂閱
#define POST_TOPIC "/sys/a1knXG89uwh/DS18B20/thing/event/property/post"http://發(fā)布
stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
if(stat)printf("訂閱失敗\r\n");
else printf("訂閱成功\r\n");

4.發(fā)送心跳包

??MQTT屬于長連接,要想實現(xiàn)設(shè)備一直在線,就需要固定時給服務(wù)器發(fā)送心跳包,超過時間未發(fā)送則會被強(qiáng)制下線。

if(time>=5000)
{
    time=0;
    MQTT_SentHeart();//發(fā)送心跳包
}

5.主函數(shù)

while(1)
	{
        stat=Esp8266_STA_TCPclinet_Init((u8 *)WIFI_NAME,(u8 *)WIFI_PASSWORD,(u8 *)SERVER_IP,SERVER_PORT);
		if(stat==0)break;
		Delay_Ms(500);
		printf("stat=%d\r\n",stat);
	}
	printf("服務(wù)器連接成功\r\n");
	while(1)
	{
		MQTT_Init();
		stat=MQTT_Connect(ClientID,Username,Password);
		if(stat==0)break;
		Delay_Ms(500);
		printf("正在連接....\r\n");
	}
	printf("阿里云連接成功\r\n");
	stat=MQTT_SubscribeTopic(SET_TOPIC,0,1);
	if(stat)printf("訂閱失敗\r\n");
	else printf("訂閱成功\r\n");
	while(1)
	{
		if(usart3_flag)
		{
			usart3_cnt=0;
			usart3_flag=0;
		}
		Delay_Ms(1);
		time++;
		cnt++;
		if(time>=5000)
		{
			time=0;
			MQTT_SentHeart();//發(fā)送心跳包
		}
		if(cnt>=1000)
		{
			cnt=0;
			temp=DS18B20_GetTemp()*0.0625;
            sprintf(mqtt_message,"{"method":"thing.event.property.post","id":"0000000001"," params":{"RoomTemp":%.2f},"version":"1.0.0"}",temp);//溫度
			MQTT_PublishData(POST_TOPIC,mqtt_message,0);
		}
	}

總結(jié)

??MQTT 是一個客戶端服務(wù)端架構(gòu)的發(fā)布/訂閱模式的消息傳輸協(xié)議。 它的設(shè)計思想是輕巧、 開放、簡單、 規(guī)范, 因此易于實現(xiàn)。 消耗資源少,在MQTT3.1標(biāo)準(zhǔn)協(xié)議中僅有14個報文。每個報文都分為固定報頭、可變報頭和有效載荷3部分。

在這里插入圖片描述

14個報文如下:

在這里插入圖片描述

??關(guān)于MQTT每個報文詳解查看MQTT3.1協(xié)議。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 單片機(jī)
    +關(guān)注

    關(guān)注

    6023

    文章

    44376

    瀏覽量

    628400
  • 物聯(lián)網(wǎng)
    +關(guān)注

    關(guān)注

    2894

    文章

    43313

    瀏覽量

    366440
  • 阿里云
    +關(guān)注

    關(guān)注

    3

    文章

    922

    瀏覽量

    42780
  • ESP8266
    +關(guān)注

    關(guān)注

    50

    文章

    959

    瀏覽量

    44545
  • MQTT
    +關(guān)注

    關(guān)注

    5

    文章

    629

    瀏覽量

    22286
收藏 人收藏

    評論

    相關(guān)推薦

    基于鴻蒙Hi3861V100 MQTT協(xié)議 對接阿里聯(lián)網(wǎng)平臺

    更新啦?。。。。。。。。?!基于鴻蒙HarmonyOS Hi3861V100 開發(fā)板通過MQTT協(xié)議 對接阿里IOT
    發(fā)表于 01-25 08:31

    STM32+ESP8266+MQTT協(xié)議

    STM32+ESP8266+MQTT協(xié)議上傳平臺(OneNET)
    發(fā)表于 09-08 07:21

    STM32F103板子是如何通過MQTT協(xié)議連接阿里聯(lián)網(wǎng)平臺的呢

    STM32F103板子是如何通過MQTT協(xié)議連接阿里聯(lián)網(wǎng)
    發(fā)表于 10-26 06:27

    esp8266怎樣通過MQTT協(xié)議連接阿里

    STM32F103單片機(jī)應(yīng)用WIFI模塊esp8266通過MQTT協(xié)議連接阿里:復(fù)制這段內(nèi)容后
    發(fā)表于 11-26 08:24

    STM32+ESP8266+MQTT協(xié)議如何連接OneNet聯(lián)網(wǎng)平臺?

    STM32+ESP8266+MQTT協(xié)議如何連接OneNet聯(lián)網(wǎng)平臺
    發(fā)表于 12-02 06:52

    stm32通過esp8266 AT命令連接阿里聯(lián)網(wǎng)

    stm32通過esp8266 AT命令連接阿里聯(lián)網(wǎng)。不引用庫,自己寫
    發(fā)表于 01-21 08:29

    M5311模塊MQTT協(xié)議連接阿里聯(lián)網(wǎng)平臺相關(guān)資料下載

    一、準(zhǔn)備三元組在阿里聯(lián)網(wǎng)平臺新建產(chǎn)品和設(shè)備后,平臺給每一個設(shè)備自動賦予三元組。二、準(zhǔn)備
    發(fā)表于 02-11 07:08

    NodeMCU是怎樣通過MQTT連接阿里聯(lián)網(wǎng)

    NodeMCU 通過MQTT 連接阿里聯(lián)網(wǎng)1.NodeMCU固件的選擇及刷入
    發(fā)表于 02-22 07:47

    stm32通過esp8266 AT命令連接阿里聯(lián)網(wǎng)

    stm32通過esp8266 AT命令連接阿里聯(lián)網(wǎng)。不引用庫,自己寫
    發(fā)表于 03-30 14:01

    Esp8266(NodeMCU)連接阿里服務(wù)器

    Esp8266【NodeMCU】連接阿里服務(wù)器創(chuàng)建阿里產(chǎn)品添加設(shè)備
    發(fā)表于 11-16 10:21 ?18次下載
    <b class='flag-5'>Esp8266</b>(NodeMCU)<b class='flag-5'>連接</b><b class='flag-5'>阿里</b><b class='flag-5'>云</b>服務(wù)器

    NodeMCU 通過MQTT 連接阿里聯(lián)網(wǎng)

    NodeMCU 通過MQTT 連接阿里聯(lián)網(wǎng)1.NodeMCU固件的選擇及刷入
    發(fā)表于 12-28 19:19 ?17次下載
    NodeMCU 通過<b class='flag-5'>MQTT</b> <b class='flag-5'>連接</b><b class='flag-5'>阿里</b><b class='flag-5'>云</b><b class='flag-5'>物</b><b class='flag-5'>聯(lián)網(wǎng)</b>

    ESP8266通過MQTT協(xié)議連接ONENET

    ESP8266通過MQTT協(xié)議連接ONENET一、設(shè)計目標(biāo)二、ONENET平臺搭建三、硬件準(zhǔn)備四、程序燒寫五、ONENET
    發(fā)表于 01-12 19:58 ?53次下載
    <b class='flag-5'>ESP8266</b>通過<b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>連接</b>ONENET

    STM32 + ESP8266 + MQTT協(xié)議連接OneNet

    STM32+ESP8266使用標(biāo)準(zhǔn)MQTT協(xié)議登錄Onenet服務(wù)器,實現(xiàn)數(shù)據(jù)交互。
    的頭像 發(fā)表于 02-28 13:22 ?1.9w次閱讀
    STM32 + <b class='flag-5'>ESP8266</b> + <b class='flag-5'>MQTT</b><b class='flag-5'>協(xié)議</b><b class='flag-5'>連接</b>OneNet

    STM32驅(qū)動ESP8266連接阿里(1)----使用AT指令連接阿里

    購買的ESP8266一般沒帶MQTT固件,所以無法通過MQTT指令與平臺通信,需要燒錄固件。 MQTT
    的頭像 發(fā)表于 07-27 11:47 ?2728次閱讀
    STM32驅(qū)動<b class='flag-5'>ESP8266</b><b class='flag-5'>連接</b><b class='flag-5'>阿里</b><b class='flag-5'>云</b>(1)----使用AT指令<b class='flag-5'>連接</b><b class='flag-5'>阿里</b><b class='flag-5'>云</b>

    STM32、ESP8266MQTT連接阿里聯(lián)網(wǎng)的串口通信異常解析

    STM32、ESP8266MQTT協(xié)議連接阿里
    的頭像 發(fā)表于 04-19 17:19 ?1118次閱讀