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/
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运行。如果您需要自建工程,按照以下步骤操作:
- 打开vs 2012,新建“项目>控制台应用程序”,选择.NET Framework 4.5版本。
- 菜单栏选择“工具>库程序包管理器>程序包管理控制台”,执行
Install-Package M2Mqtt
命令,自动下载并安装mqtt文件。
说明: 如果无法下载mqtt文件,请打开vs2012“工具>选项>包管理器>程序包源”,添加一个本地目录作为程序包源,下载m2mqtt.4.3.0.nupkg文件,复制到刚才添加的本地目录中。当前项目右键选择“管理NuGet程序包”,找到您添加的程序包源,安装m2mqtt程序包即可。
- 添加表头,
using uPLibrary.Networking.M2Mqtt;
using uPLibrary.Networking.M2Mqtt.Messages;
- 参考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" }; //输出订阅发布的主题
- publish和subscribe代码参考mqtt-net代码示例。
- 运行程序,成功订阅和发布消息,如下图所示:
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为例:
- 安装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官方网站。
- 安装完成后,即可开始订阅消息。打开“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服务,并成功订阅主题。
- 开始发布消息,打开“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模拟实体设备。