本文介紹如何使用Paho提供的C語言MQTT開源工程(非嵌入式版),將裝置接入阿里雲物聯網平台,並進行訊息收發。
使用前必讀
本文操作步驟以普通使用者權限為例。如果您在操作過程中涉及到管理員權限才能執行的操作,可嘗試使用sudo
命令執行。
前提條件
已在物聯網平台控制台,對應執行個體下,建立產品和裝置,並擷取MQTT接入網域名稱和裝置認證資訊(ProductKey、DeviceName和DeviceSecret)。具體操作,請參見:
準備開發環境
本樣本使用Ubuntu 16.04-LTS作為開發環境。執行以下命令構建開發環境。
sudo apt-get update
sudo apt-get install build-essential git sed cmake
下載C語言Paho MQTT庫
執行以下命令,複製C語言版本的Paho MQTT庫。
git clone https://github.com/eclipse/paho.mqtt.c.git
說明編寫本Demo樣本時,使用master分支,
commit id
為f7799da95e347bbc930b201b52a1173ebbad45a7
。使用如下命令編譯並安裝Paho庫。
mkdir build cmake .. make -j sudo make install cd .. rm -rf build
接入物聯網平台
單擊下載Demo包,解壓縮後,其中包含以下檔案:
檔案名稱
說明
CMakeLists.txt
工程的整體設定檔。
src/samples/MQTTAsync_publish.c
該檔案包含裝置與物聯網平台串連和通訊的邏輯代碼。
src/samples/aiot_mqtt_sign.c
該檔案中的代碼用於產生MQTT建連參數。
aiot_c_demo.c
運行時,會調用該檔案中定義的aiotMqttSign()
函數,計算出串連參數username、password和clientId。src/samples/CMakeLists.txt
Demo的工程設定檔。
在
src/samples/MQTTAsync_publish.c
檔案中,將裝置資訊(ProductKey、DeviceName和DeviceSecret)修改為您的裝置資訊。#define EXAMPLE_PRODUCT_KEY "產品ProductKey" #define EXAMPLE_DEVICE_NAME "裝置名稱DeviceName" #define EXAMPLE_DEVICE_SECRET "裝置密鑰DeviceSecret"
在
src/samples/MQTTAsync_publish.c
檔案中,tcp://iot-0***********l.mqtt.iothub.aliyuncs.com:443
為對應接入網域名稱。說明公用執行個體和企業版執行個體接入網域名稱的格式說明,請參見查看執行個體終端節點資訊。
#define ADDRESS "tcp://iot-0***********l.mqtt.iothub.aliyuncs.com:443"
將步驟1中的檔案,按照目錄分別覆蓋下載C語言Paho MQTT庫中的同名檔案。
使用以下命令編譯工程。
mkdir build //在工程的根目錄下執行 cd build cmake .. make -j
編譯完成後,在
build
目錄下執行以下命令,運行程式。./src/samples/MQTTAsync_publish
運行成功,接入物聯網平台的本地日誌如下所示。
clientid: ty***1&a1****kc|timestamp=2524608000000,_v=paho-c-standard-1.0.0,securemode=3,signmethod=hmacsha256,lan=C| username: ty***1&a1****kc password: 1BB**************************************************3621 Waiting for publication of Hello World! on topic /sys/a1*****kc/ty********1/thing/event/property/post for client Successful connection Message with token value 1 delivery confirmed Successful disconnection