MQTT客户端代码示例

C代码示例

下载TLS认证文件

物接入支持SSL/TLS加密传输方式,保障用户的数据传输安全。用户在执行示例代码前,需先下载TLS认证文件,并在代码中指定认证文件的存放路径。

下载TLS认证文件 ,并将认证文件保存至示例代码路径下。

下载并执行示例代码

下载MQTT-c压缩包 ,解压MQTT-c,目录结构如下:

MQTT-c
    ├── include
    ├── lib
    ├── src
        ├── ConnectorSync.c
        ├── PublisherSync.c
        ├── SubscriberSync.c
    ├── Makefile
    ├── root_cert.pem

打开src/PublisherSync.c,配置以下参数:

参数名称 解释
PRIVATE_FILE 输入认证文件所在目录
USER 创建物接入设备后返回的用户名,参见创建物接入设备中的步骤3
PWD 创建身份后返回的密钥,参见创建物接入身份
publisher 用来标识设备的ID,用户可自己定义,在同一个实例下,每个实体设备需要有一个唯一的ID,不同实体设备使用同一个client id建立连接会导致其它连接下线。client id只支持英文大小写字母,数字0-9,中划线和下划线,不支持其它字符。

打开src/SubscriberSync.c,配置以下参数:

参数名称 解释
PRIVATE_FILE 输入认证文件所在目录
USER 创建物接入设备后返回的用户名,参见创建物接入设备中的步骤3
PWD 创建身份后返回的密钥,参见创建物接入身份
clientId 用来标识设备的ID,用户可自己定义,在同一个实例下,每个实体设备需要有一个唯一的ID,不同实体设备使用同一个client id建立连接会导致其它连接下线。client id只支持英文大小写字母,数字0-9,中划线和下划线,不支持其它字符。

打开Makefile文件:

编辑`LIB_PATH`和`INCLUDE_PATH`,路径为MQTT -c文件的当前存储位置。

```
LIB_PATH = /home/iot/MQTT-c/lib

INCLUDE_PATH = /home/iot/MQTT-c/include

```
编辑后执行`make all`编译文件,生成“PublisherSync”和“SubscriberSync”文件。

运行“SubscriberSync”文件,参照命令格式Subscriber [host:port] [topic],执行订阅操作:

`./SubscriberSync ssl://yourendpointname.mqtt.iot.gz.baiduce.com:1884 topic`

运行“PublisherSync”文件,参照命令格式publish [host:port] [topic] [payload],执行发布操作:

`./PublisherSync ssl://yourendpointname.mqtt.iot.gz.baiduce.com:1884 topic publishmessage`

返回message,说明发布成功。

说明:

如果提示"libpaho-mqtt3cs.so.1"无法找到,请执行export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/iot/MQTT-c/lib

C#代码示例

前提条件:

  • 下载并安装virtual studio 2012。

  • 下载mqtt-net压缩包,解压mqtt-net,即可使用vs2012运行。如果您需要自建工程,按照以下步骤操作:

  1. 打开vs 2012,新建“项目>控制台应用程序”,选择.NET Framework 4.5版本。

  2. 菜单栏选择“工具>库程序包管理器>程序包管理控制台”,执行Install-Package M2Mqtt命令,自动下载并安装mqtt文件。

    说明:

    如果无法下载mqtt文件,请打开vs2012“工具>选项>包管理器>程序包源”,添加一个本地目录作为程序包源,下载m2mqtt.4.3.0.nupkg文件,复制到刚才添加的本地目录中。当前项目右键选择“管理NuGet程序包”,找到您添加的程序包源,安装m2mqtt程序包即可。

  3. 添加表头,

    using uPLibrary.Networking.M2Mqtt;
    
    using uPLibrary.Networking.M2Mqtt.Messages;
    
  4. 参考sample code的main函数,将创建好的实例参数输入:

参数名称 解释
user 创建物接入设备后返回的用户名,参见创建物接入设备中的步骤3
pwd 创建身份后返回的密钥,参见创建物接入身份
endpoint 实例地址,参见创建物接入实例
port 实例的端口号。端口1883,不支持传输数据加密;端口1884,支持SSL/TLS加密传输。
topic 订阅的主题内容,参见创建物接入策略
clientid 用来标识设备的ID,用户可自己定义,在同一个实例下,每个实体设备需要有一个唯一的ID,不同实体设备使用同一个client id建立连接会导致其它连接下线。client id只支持英文大小写字母,数字0-9,中划线和下划线,不支持其它字符。
string enpoint = "yourendpointname.mqtt.iot.gz.baidubce.com"; 
    int port = 1884;  // 端口默认1884
    string user = "username";  //创建thing,返回username
    string pwd = "password";   //创建principal,返回password
    string clientid = Guid.NewGuid().ToString();  // 获取一个独一无二的id
    string[] topic = new string[] { "yourtopic" };  //输出订阅发布的主题
  1. publish和subscribe代码参考mqtt-net代码示例。

  2. 运行程序,成功订阅和发布消息,如下图所示:

python代码示例

下载TLS认证文件

物接入支持SSL/TLS加密传输方式,保障用户的数据传输安全。用户在执行示例代码前,需先下载TLS认证文件,并在代码中指定认证文件的存放路径。

下载TLS认证文件 ,并将认证文件保存至示例代码路径下。

下载并执行示例代码

说明:

安装Python 2.7以上版本,暂时不支持Python 3.5版本。

下载mqtt-py压缩包,解压mqtt-py,目录结构如下:

mqtt-py
    ├── sub_py2.py                                  //sub订阅代码示例
    ├── pub_py2.py                                  //pub发布代码示例
    ├── paho-mqtt-1.1.tar.gz                        //mqtt client端

以下操作步骤以Windows为例:

  1. 安装Paho MQTT Python Client。打开cmd命令行,输入命令pip install paho-mqtt,自动下载并安装Python Client,如下图所示:

    用户也可以通过github下载Paho MQTT代码进行安装,具体操作如下:

    git clone https://github.com/eclipse/paho.mqtt.python.git
    cd org.eclipse.paho.mqtt.python.git
    python setup.py install
    

    关于Paho Python Client的详细介绍,可查看Paho官方网站

  2. 安装完成后,即可开始订阅消息。打开“sub_py2.py”文件,填写配置参数。

    参数名称 解释
    trust 输入认证文件所在目录
    user 创建物接入设备后返回的用户名,参见创建物接入设备中的步骤3
    pwd 创建身份后返回的密钥,参见创建物接入身份
    endpoint 实例地址,参见创建物接入实例
    port 实例的端口号。端口1883,不支持传输数据加密;端口1884,支持SSL/TLS加密传输。
    topic 订阅的主题内容,参见创建物接入策略
    client_id 用来标识设备的ID,用户可自己定义,在同一个实例下,每个实体设备需要有一个唯一的ID,不同实体设备使用同一个client id建立连接会导致其它连接下线。client id只支持英文大小写字母,数字0-9,中划线和下划线,不支持其它字符。

    代码示例如下:

    import paho.mqtt.client as mqtt
    
    trust = "C:\Users\username\Desktop\iot\mqtt-py/root_cert.pem" #开启TLS时的认证文件目录
    user = "01endpoint/01thing"                            #成功创建thing后返回的username
    pwd = "O7hrHKUYJLqxwajP/5/2fqdZ8KIDZ/aR4/CWrmRt6Gg="   #成功创建principal后返回的password
    endpoint = "01endpoint.mqtt.iot.gz.baidubce.com"       #实例(endpoint)地址
    port = 1884                                            #endpoint端口
    topic = "test iot service"                             #订阅的主题内容
    
    def on_connect(client, userdata, flags, rc):  #连接后返回0为成功
        print("Connected with result code "+str(rc))
        client.subscribe(topic, qos=1) #qos
    
    def on_message(client, userdata, msg):
        print("topic:"+msg.topic+" Message:"+str(msg.payload))
    
    client = mqtt.Client(
        client_id="test_mqtt_receiver_1", #用来标识设备的ID,用户可自己定义,在同一个实例下,每个实体设备需要有一个唯一的ID
        clean_session=True,
        userdata=None,
        protocol=mqtt.MQTTv3
    )
    
    client.tls_insecure_set(True) #检查hostname的cert认证
    client.tls_set(trust) #设置认证文件
    client.username_pw_set(user, pwd) #设置用户名,密码
    client.on_connect = on_connect #连接后的操作
    client.on_message = on_message #接受消息的操作
    client.connect(endpoint, port, 60) #连接服务 keepalive=60
    client.loop_forever()
    

    配置相关参数后,执行上例代码,返回0说明已连接IoT Hub服务,并成功订阅主题。

  1. 开始发布消息,打开“pub_py2.py”文件,填写配置参数。

    参数名称 解释
    trust 输入认证文件所在目录
    user 创建物接入设备后返回的用户名,参见创建物接入设备中的步骤3
    pwd 创建身份后返回的密钥,参见创建物接入身份
    endpoint 实例地址,参见创建物接入实例
    port 实例的端口号。端口1883,不支持传输数据加密;端口1884,支持SSL/TLS加密传输。
    topic 订阅的主题内容,参见创建物接入策略
    client_id 用来标识设备的ID,用户可自己定义,在同一个实例下,每个实体设备需要有一个唯一的ID,不同实体设备使用同一个client id建立连接会导致其它连接下线。client id只支持英文大小写字母,数字0-9,中划线和下划线,不支持其它字符。

    代码示例如下:

    import time
    import paho.mqtt.client as mqtt
    import datetime
    
    def on_publish(msg, rc):   #成功发布消息的操作
        if rc == 0:
            print("publish success, msg = " + msg)
    
    def on_connect(client, userdata, flags, rc):  #连接后的操作 0为成功
        print("Connection returned " + str(rc))
    
    client = mqtt.Client(
        client_id="test_mqtt_sender_1", #用来标识设备的ID,用户可自己定义,在同一个实例下,每个实体设备需要有一个唯一的ID
        clean_session=True,
        userdata=None,
        protocol='MQTTv311'
    )
    
    trust = "C:\Users\username\Desktop\iot\mqtt-py/root_cert.pem" #开启TLS时的认证文件目录
    user = "01endpoint/01thing"
    pwd = "O7hrHKUYJLqxwajP/5/2fqdZ8KIDZ/aR4/CWrmRt6Gg="
    endpoint = "01endpoint.mqtt.iot.gz.baidubce.com"
    port = 1884
    topic = "test iot service"
    
    client.tls_insecure_set(True) #检查hostname的cert认证
    client.tls_set(trust) #设置认证文件
    client.username_pw_set(user, pwd) #设置用户名,密码
    client.connect(endpoint, port, 60) #连接服务 keepalive=60
    client.on_connect = on_connect #连接后的操作
    client.loop_start()
    time.sleep(2)
    count = 0
    while count < 5: #发布五条消息
        count = count + 1
        msg = str(datetime.datetime.now())
        rc , mid = client.publish(topic, payload=msg, qos=1) #qos
        on_publish(msg, rc)
        time.sleep(2)
    

    执行上例代码,返回0说明已连接IoT Hub服务,pub文件成功发布主题信息,sub文件成功接收topic,如下图所示:

Java代码示例

Java代码示例请参看使用MQTT Client SDK模拟实体设备