Paho-MQTT C(非嵌入式版)接入示例

本文介绍如何使用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库

  1. 执行以下命令,克隆C语言版本的Paho MQTT库。

    git clone https://github.com/eclipse/paho.mqtt.c.git
    说明

    编写本Demo示例时,使用master分支,commit idf7799da95e347bbc930b201b52a1173ebbad45a7

  2. 使用如下命令编译并安装Paho库。

    mkdir build
    cmake ..
    make -j
    sudo make install
    cd ..
    rm -rf build

接入物联网平台

  1. 单击下载Demo包,解压缩后,其中包含以下文件:

    文件名

    说明

    CMakeLists.txt

    工程的整体配置文件。

    src/samples/MQTTAsync_publish.c

    该文件包含设备与物联网平台连接和通信的逻辑代码。

    src/samples/aiot_mqtt_sign.c

    该文件中的代码用于生成MQTT建连参数。aiot_c_demo.c运行时,会调用该文件中定义的aiotMqttSign()函数,计算出连接参数usernamepasswordclientId

    src/samples/CMakeLists.txt

    Demo的工程配置文件。

  2. src/samples/MQTTAsync_publish.c文件中,将设备信息(ProductKeyDeviceNameDeviceSecret)修改为您的设备信息。

    #define EXAMPLE_PRODUCT_KEY            "产品ProductKey" 
    #define EXAMPLE_DEVICE_NAME            "设备名称DeviceName" 
    #define EXAMPLE_DEVICE_SECRET          "设备密钥DeviceSecret"
  3. 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"
  4. 将步骤1中的文件,按照目录分别覆盖下载C语言Paho MQTT库中的同名文件。

  5. 使用以下命令编译工程。

    mkdir build    //在工程的根目录下执行
    cd build
    cmake ..
    make -j
  6. 编译完成后,在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