IoT-百度天工物接入

MQTT(Message Queuing Telemetry Transport)是一个客户端服务端架构的发布/订阅模式的消息传输协议。它的设计思想是轻巧、开放、简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境比如机器和机器通讯(M2M)以及物联网环境(IoT)。 
支持MQTT底层传输协议的相关设备有:

  • 客户端--使用它连接服务端
  • 服务端--全托管的云服务,帮助建立设备与云端之间安全可靠的双向连接,以支撑海量设备的数据收集、监控、故障预测等各种物联网场景

客户端

使用MQTT的程序或设备(推荐使用MQTT.fx,MQTT.fx是目前主流的MQTT客户端,可以快速验证是否可以与IoT Hub服务交流发布或订阅消息)。

  • 发布应用消息给其他相关的客户端
  • 订阅以请求接受相关的应用消息
  • 取消订阅以移除接受应用消息的请求
  • 从服务端断开连接

服务端

全托管的云服务,帮助建立设备与云端之间安全可靠的双向连接,以支撑海量设备的数据收集、监控、故障预测等各种物联网场景。

  • 接受来自客户端的网络连接
  • 接受客户端发布的应用消息
  • 处理客户端的订阅和取消订阅请求
  • 转发应用消息给符合条件的客户端订阅 
    IoT-百度天工物接入_第1张图片

使用百度天工物接入来测试

第一步,创建实例,百度物接入需要先创建一个实例(endpoint),一个实例表示一个完整的物接入服务。登陆物接入控制台,点击“创建实例”,填写需要创建IoT Hub服务的实例名称。创建好实例后,物接入默认提供三种地址:

  • tcp://*:1883,端口1883,不支持传输数据加密
  • ssl://*:1884,端口1884,支持SSL/TLS加密传输
  • wss://*:8884,端口8884,支持websockets连接方式 
    IoT-百度天工物接入_第2张图片
    第二步,创建策略,输入策略名称,主题,选择策略所支持的权限:发布消息、订阅消息 
    IoT-百度天工物接入_第3张图片
    第三步,创建身份,输入身份名称,然后选择之前配置的策略 
    IoT-百度天工物接入_第4张图片
    第四步,创建设备,输入设备名称,然后选择之前创建的身份及策略,最后创建成功时返回一个设备的登陆密码,这个密码在客户端登陆时需要用到。 
    IoT-百度天工物接入_第5张图片
  • 到这里整个物接入的服务端基本创建完成了,下面我们来看小客户端代码,这里使用python代码,需要注意的是这里的username、password、topic几个配置均来自于前面的服务端配置。
import paho.mqtt.client as mqtt
import sys
import uuid

broker = 'pos.mqtt.iot.gz.baidubce.com'
port = 1883
username = 'pos/ccid-0001'
password = 'AWFjb7rUy1n9MZM2xd77ZGAw0cNbx4N6I5kQHMKxs/ag='
clientid = 'test_mqtt_python_' + str(uuid.uuid4())
topic = 'topic01'

def on_connect(client, userdata, rc):
    print('Connected. Client id is: ' + clientid)
    client.subscribe(topic)
    print('Subscribed to topic: ' + topic)

    client.publish(topic, 'Message from Baidu IoT demo')
    print('MQTT message published.')

def on_message(client, userdata, msg):
    msg = str(msg.payload).encode('utf-8')
    print('MQTT message received: ' + msg)
    if msg == 'exit':
        sys.exit()

client = mqtt.Client(clientid)
client.on_connect = on_connect
client.on_message = on_message
client.username_pw_set(username, password)

print('Connecting to broker: ' + broker)
client.connect(broker, port)

client.loop_forever()

你可能感兴趣的:(Linux,IoT)