所有文档

          物接入 IoT Hub

          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_PATHINCLUDE_PATH,路径为MQTT -c文件的当前存储位置。

          LIB_PATH = /home/iot/MQTT-c/
          INCLUDE_PATH = /home/iot/MQTT-c/incl

          编辑后执行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程序包即可。

          1. 添加表头,
          using uPLibrary.Networking.M2Mqtt;
          
          using uPLibrary.Networking.M2Mqtt.Messages;
          1. 参考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官方网站

          1. 安装完成后,即可开始订阅消息。打开“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模拟实体设备

          上一篇
          MQTT客户端使用指南
          下一篇
          MQTT-Client-SDK