mqtt
概述
MQTT(Message Queuing Telemetry Transport,消息隊(duì)列遙測(cè)傳輸協(xié)議),是一種基于發(fā)布/訂閱(publish/subscribe)模式的“輕量級(jí)”通訊協(xié)議,該協(xié)議構(gòu)建于 TCP/IP 協(xié)議上,由 IBM 在1999年發(fā)布。MQTT 最大優(yōu)點(diǎn)在于,可以以極少的代碼和有限的帶寬,為連接遠(yuǎn)程設(shè)備提供實(shí)時(shí)可靠的消息服務(wù)。作為一種低開銷、低帶寬占用的即時(shí)通訊協(xié)議,使其在物聯(lián)網(wǎng)、小型設(shè)備、移動(dòng)應(yīng)用等方面有較廣泛的應(yīng)用。
MQTT 是一個(gè)基于客戶端-服務(wù)器的消息發(fā)布/訂閱傳輸協(xié)議。MQTT 協(xié)議是輕量、簡(jiǎn)單、開放和易于實(shí)現(xiàn)的,這些特點(diǎn)使它適用范圍非常廣泛。在很多情況下,包括受限的環(huán)境中,如:機(jī)器與機(jī)器(M2M)通信和物聯(lián)網(wǎng)(IoT)。其在,通過衛(wèi)星鏈路通信傳感器、偶爾撥號(hào)的醫(yī)療設(shè)備、智能家居、及一些小型化設(shè)備中已廣泛使用。
Paho MQTT 是 Eclipse 實(shí)現(xiàn)的基于 MQTT 協(xié)議的客戶端,本軟件包是在 Eclipse paho-mqtt 源碼包的基礎(chǔ)上設(shè)計(jì)的一套 MQTT 客戶端程序。
該組件支持以下功能:
MQTT Connect
MQTT Subscribe
MQTT Publish
可連接阿里云物聯(lián)網(wǎng)平臺(tái)
版權(quán)信息
Eclipse Distribution License v1.0
目錄結(jié)構(gòu)
├── MQTTClient-C
│ ├── MQTTClient.c
│ ├── MQTTClient.h
│ ├── MQTTLinux.c
│ └── MQTTLinux.h
├── MQTTPacket
│ ├── MQTTConnectClient.c
│ ├── MQTTConnect.h
│ ├── MQTTConnectServer.c
│ ├── MQTTDeserializePublish.c
│ ├── MQTTFormat.c
│ ├── MQTTFormat.h
│ ├── MQTTPacket.c
│ ├── MQTTPacket.h
│ ├── MQTTPublish.h
│ ├── MQTTSerializePublish.c
│ ├── MQTTSubscribeClient.c
│ ├── MQTTSubscribe.h
│ ├── MQTTSubscribeServer.c
│ ├── MQTTUnsubscribeClient.c
│ ├── MQTTUnsubscribe.h
│ ├── MQTTUnsubscribeServer.c
│ └── StackTrace.h
├── example
│ ├── aiot_mqtt_sign.c #連接阿里云物聯(lián)網(wǎng)平臺(tái)需要加簽
│ └── mqtt_example.c # 示例代碼
├── package.yaml # 編譯配置文件
└─── README.md
依賴組件
osal_aos
mbedtls
常用配置
HTTP的常用配置在文件package.yaml內(nèi)
CONFIG_AIOT_SIGN :是否開啟阿里云物聯(lián)網(wǎng)平臺(tái)加簽
CONFIG_AIOT_SIGN: 1
MQTT_PORT : MQTT默認(rèn)端口
#ifndef MQTT_PORT
#define MQTT_PORT 443
#endif
API說明
MQTT初始化
DLLExport void MQTTClientInit(MQTTClient* client, Network* network, unsigned int command_timeout_ms,
unsigned char* sendbuf, size_t sendbuf_size, unsigned char* readbuf, size_t readbuf_size);
args | description |
client | MQTT client上下文 |
network | 網(wǎng)絡(luò)對(duì)象 |
command_timeout_ms | 超時(shí)時(shí)間 |
MQTT連接請(qǐng)求
DLLExport int MQTTConnect(MQTTClient* client, MQTTPacket_connectData* options);
args | description |
client | MQTT client上下文 |
options | MQTT連接選項(xiàng) |
MQTT發(fā)布主題
DLLExport int MQTTPublish(MQTTClient* client, const char* topic, MQTTMessage* message);
args | description |
client | MQTT client上下文 |
topic | MQTT發(fā)布的主題 |
message | MQTT發(fā)布的消息主體 |
MQTT訂閱主題
DLLExport int MQTTSubscribe(MQTTClient* client, const char* topicFilter, enum QoS, messageHandler);
args | description |
client | MQTT client上下文 |
topicFilter | MQTT訂閱的主題 |
messageHandler | MQTT消息處理句柄 |
MQTT取消訂閱主題
DLLExport int MQTTUnsubscribe(MQTTClient* client, const char* topicFilter);
args | description |
client | MQTT client上下文 |
topicFilter | MQTT訂閱的主題 |
MQTT斷開連接請(qǐng)求
DLLExport int MQTTDisconnect(MQTTClient* client);
args | description |
client | MQTT client上下文 |
MQTT等待響應(yīng)
DLLExport int MQTTYield(MQTTClient* client, int time);
args | description |
client | MQTT client上下文 |
time | 等待時(shí)間 |
MQTT是否處于連接狀態(tài)
DLLExport int MQTTIsConnected(MQTTClient* client);
args | description |
client | MQTT client上下文 |
使用示例
組件使用示例相關(guān)的代碼下載、編譯和固件燒錄均依賴AliOS Things配套的開發(fā)工具 alios-studio ,所以首先需要參考《aos-studio使用說明之搭建開發(fā)環(huán)境》,下載安裝 alios-studio 。 待開發(fā)環(huán)境搭建完成后,可以按照以下步驟進(jìn)行示例的測(cè)試。
步驟1 創(chuàng)建或打開工程
打開已有工程
如果用于測(cè)試的案例工程已存在,可參考《aos-studio使用說明之打開工程》打開已有工程。
創(chuàng)建新的工程
組件的示例代碼可以通過編譯鏈接到AliOS Things的任意案例(solution)來運(yùn)行,這里選擇helloworld_demo案例。helloworld_demo案例相關(guān)的源代碼下載可參考《aos-studio使用說明之創(chuàng)建工程》。
步驟2 添加組件
案例下載完成后,需要在helloworld_demo組件的package.yaml中添加對(duì)組件的依賴:
depends:
- netmgr: dev_aos # helloworld_demo中引入netmgr組件,用于WiFi聯(lián)網(wǎng)
- mqtt: dev_aos # helloworld_demo中引入mqtt組件
步驟3 下載組件
在已安裝了 alios-studio 的開發(fā)環(huán)境工具欄中,選擇Terminal -> New Terminal啟動(dòng)終端,并且默認(rèn)工作路徑為當(dāng)前工程的workspace,此時(shí)在終端命令行中輸入:
aos install mqtt
上述命令執(zhí)行成功后,組件源碼則被下載到了./components/mqtt路徑中。
步驟4 添加示例
在mqtt組件的package.yaml中添加example示例代碼:
source_file:
- "src/*.c"
- "example/*.c" # 增加示例代碼
步驟5 編譯固件
在示例代碼已經(jīng)添加至組件的配置文件,并且helloworld_demo已添加了對(duì)該組件的依賴后,就可以編譯helloworld_demo案例來生成固件了,具體編譯方法可參考《aos-studio使用說明之編譯固件》。
步驟6 燒錄固件
helloworld_demo案例的固件生成后,可參考《aos-studio使用說明之燒錄固件》來燒錄固件。
步驟7 打開串口
固件燒錄完成后,可以通過串口查看示例的運(yùn)行結(jié)果,打開串口的具體方法可參考《aos-studio使用說明之查看日志》。
當(dāng)串口終端打開成功后,可在串口中輸入help來查看已添加的測(cè)試命令。
步驟8 測(cè)試示例
CLI命令行輸入初始化netmgr命令:
netmgr_example
CLI命令行輸入聯(lián)網(wǎng)命令(ssid和password換成自己的):
netmgr -t wifi -c ssid password
然后,CLI命令行輸入:
mqtt_example
關(guān)鍵日志
CLI日志:
Network Connect success!
Mqtt Connect success!
Mqtt Subscribe success, topic:xxxx!