【RT摩拳擦掌】RT云端测试之百度天工物接入构建(设备型)

【RT摩拳擦掌】RT云端测试之百度天工物接入构建(设备型)

  • [一, 文档介绍](#一, 文档介绍)
  • [二, 物接入IOT Hub物影子构建](#二, 物接入IOT Hub物影子构建)
    • [2.1 创建设备型项目](#2.1 创建设备型项目)
    • [2.2 创建物模型](#2.2 创建物模型)
    • [2.3 创建物影子](#2.3 创建物影子)
  • [三, MQTT fx客户端连接云端](#三, MQTT fx客户端连接云端)
    • [3.1 MQTT fx配置](#3.1 MQTT fx配置)
    • [3.2 MQTT fx订阅](#3.2 MQTT fx订阅)
    • [3.3 MQTT fx发布](#3.3 MQTT fx发布)
    • [3.4 发布数据测试结果](#3.4 发布数据测试结果)
  • [四, RT1060-EVK客户端连接云端](#四, RT1060-EVK客户端连接云端)
    • [4.1 代码修改点](#4.1 代码修改点)
    • [4.2 RT1060-EVK开发板测试结果](#4.2 RT1060-EVK开发板测试结果)

一, 文档介绍

随着科技的进一步发展,物联网广泛应用于各行各业,比如工业,农业,环境,交通,物流,安防等基础设施,物联网的使用使我们的生活变得更加丰富多彩并且智能化。而爆发式发展的物联网,首先离不开物联网平台云端,目前市场上的云服务也是种类繁多,比如Amazone的AWS,微软的azure, google clould iot, 国内的阿里云,百度物接入IOT hub, 移动的oneNet等。

百度云作为中国一款流行的云,在物联网这块也推出了针对物接入云的平台。百度天工物接入是一个全托管的云服务,可以建立设备与云端之间的双向通信,同时可以支撑海量设备的数据手机,监控,故障预测等物种物联网场景,百度云物接入支持MQTT协议,使用发布和订阅模式实现机器与云端的数据交互。

本文主要讲如何构建一个百度云设备型,使用物影子方式,实现云端服务器与设备端MQTT fx以及NXP 跨界处理器RT作为另外一个设备端点通过以太网的方式实现数据沟通。本文的云端拓扑结构如下:

二, 物接入IOT Hub物影子构建

首先进入百度智能云物联网物接入IoT Hub:

https://cloud.baidu.com/product/iot.html

点击立即使用

2.1 创建设备型项目

创建项目,选择设备型,输入项目名称。设备型可以使用物影子作为设备在云端的映像,可以直接查看数据的变化情况。创建好后会生成一个endpoint,以及对应的地址:

2.2 创建物模型

物模型主要是建立物影子中所需要的各种属性,比如温度,湿度,其他变量,并且给与值的类型,其实也是构成实际MQTT通信中json格式的表项。

点进刚刚新建的设备型项目,这里可以新建物模型或者物影子:

我们这里建立三个属性:LEDstatus,humid,temp

分别用以表示LED灯的状态,湿度,温度等,便于实现云端与RT开发板的通信与控制。创建之后,会得到如下图中情况:

2.3 创建物影子

同样是在设备型项目里面,可以选择物影子,构建自己的物影子平台,输入名称,并且选择物模型为刚刚新建的包含三个属性的物模型,新建之后可以得到物影子的详情:

同时还会生成该物影子相关的链接,名称以及密钥,我这里的测试平台情况如下:

bash 复制代码
TCP Address: tcp://rndrjc9.mqtt.iot.gz.baidubce.com:1883
SSL Address: ssl://rndrjc9.mqtt.iot.gz.baidubce.com:1884
WSS Address: wss://rndrjc9.mqtt.iot.gz.baidubce.com:443
name: rndrjc9/RT1060BTCDShadow
key: y92ewvgjz23nzhgn

端口1883,不支持传输数据加密

端口1884, 支持SSL/TLS加密传输

端口8884, 支持wesockets方式连接,同样包含SSL加密。

本篇文章作为第一篇简单的百度云物联网文章,先使用无传输数据加密的1883端口。

到目前为止,已经完成了百度云设备型云端物影子的构建,下面可以使用MQTTfx工具去连接测试

三, MQTT fx客户端连接云端

MQTT.fx 是一款基于EclipsePaho,使用Java 语言编写的MQTT 客户端工具,支持通过Topic 订阅和发布消息。可以到如下连接下载:

http://mqttfx.jensd.de/index.php/download

目前最新版本是1.7.1.

3.1 MQTT fx配置

下载安装之后,可以打开,首先需要配置下,点击edit connection:

Profile name:connect的名称,我们这里取名和云端影子一致,便于后面更多云测试的时候识别。

Profile type: MQTT broker

Broker address: 新建设备型项目的时候,产生的链接,这里使用1883无加密传输方式。

Broker port:1883无加密方式

Client ID: 这里同样配置为影子设备的名称RT1060BTCDShadow,注意,这么配置的原因是如果不一致,那么不能直接看到云端影子已经上线,如果配置和影子名字一致,则一旦MQTT FX连接成功,就能够看到云端影子也已经上线。

User credentials, 这里有User name和password,填入刚刚生成影子的时候界面给出的文件中的用户名和密钥。

到次,已经配置好相关选项,可以点击连接,并且刷新物影子网页:

连接前:

连接后:

3.2 MQTT fx订阅

涉及到订阅发布,那么发布订阅的主题是怎样的呢?

这里可以打开自己新建的物影子,选择交互,可以看到页面已经给出对应的主题情况:

所以,我们这里选择订阅的主题为:

bash 复制代码
$baidu/iot/shadow/RT1060BTCDShadow/update/accepted 

发布的主题为:

bash 复制代码
$baidu/iot/shadow/RT1060BTCDShadow/update

点击subscribe,可以发现已经可以订阅。

3.3 MQTT fx发布

Publish这边需要输入发布的主题为:

bash 复制代码
$baidu/iot/shadow/RT1060BTCDShadow/update

当然,还要输入发布的内容,这里要注意下,物影子并不像数据型设备那样,可以实现数据的透传,这里发布的数据需要是满足物影子物模型的json格式,有人可能想,那么我到底应该发什么数据呢?

其实格式可以在物影子的原始数据里面,已经给出了格式:

我们这里可以不写desired,直接给出reported的json数据:

bash 复制代码
{
  "reported" : {
    "LEDstatus" : true,
    "humid" : 88,
    "temp" : 11
   }
}

其实这个json数据也可以通过网页版工具查看:
https://www.bejson.com/jsonviewernew/

输入发布数据,并且点击发布按钮:

3.4 发布数据测试结果

发布之前,清空并查看网页物模型数据:

MQTT fx发布数据,并查看订阅数据以及网页情况:

可以看到,发布的数据以及完全可以显示在物影子以及客户端订阅的地方。说明整个百度云的物影子已经连接成功。

四, RT1060-EVK客户端连接云端

本章主要使用NXP MIMXRT1060-EVK开发板的MQTT例程,通过以太网方式连接百度云物影子,并实现数据的订阅与发布,具体温度采集和led控制,后续会在百度云数据型测试中添加进去,这里给出物影子方式,RT开发板数据的发布与订阅打印,已经查看云端是否能够接受到RT1060板子发出的数据。

代码使用官方SDK_2.8.0_EVK-MIMXRT1060,下载链接为:
https://mcuxpresso.nxp.com/

SDK_2.8.0_EVK-MIMXRT1060\boards\evkmimxrt1060\lwip_examples\lwip_mqtt

4.1 代码修改点

要实现和百度云物影子的链接,需要注意如下几个点:

客户端ID:EXAMPLE_MQTT_CLIENT_ID

服务器主机:

MQTT服务器端口号

用户名:

密码:

订阅主题:

发布主题与数据:

本文使用的是MCUXPresso IDE,导入lwip_mqtt_freertos工程之后,主要修改lwip_mqtt_freertos.c

c 复制代码
#define EXAMPLE_MQTT_CLIENT_ID "RT1060BTCDShadow_evk"//
#define EXAMPLE_MQTT_SERVER_HOST "rndrjc9.mqtt.iot.gz.baidubce.com"
#define EXAMPLE_MQTT_USER "rndrjc9/RT1060BTCDShadow"
#define EXAMPLE_MQTT_PASS "y92ewvgjz23nzhgn"
#define EXAMPLE_MQTT_SERVER_PORT 1883


static const struct mqtt_connect_client_info_t mqtt_client_info = {
    .client_id   = EXAMPLE_MQTT_CLIENT_ID,//(const char *)&client_id[0],
    .client_user = EXAMPLE_MQTT_USER,
    .client_pass = EXAMPLE_MQTT_PASS,
    .keep_alive  = 100,
    .will_topic  = NULL,
    .will_msg    = NULL,
    .will_qos    = 0,
    .will_retain = 0,
#if LWIP_ALTCP && LWIP_ALTCP_TLS
    .tls_config = NULL,
#endif
};

static void mqtt_subscribe_topics(mqtt_client_t *client)
{
    static const char *topics[] = {"$baidu/iot/shadow/RT1060BTCDShadow/update/accepted", "$baidu/iot/shadow/RT1060BTCDShadow/update"};
    int qos[]                   = {0, 1};
    err_t err;
    int i=0;
    mqtt_set_inpub_callback(client, mqtt_incoming_publish_cb, mqtt_incoming_data_cb,
                            LWIP_CONST_CAST(void *, &mqtt_client_info));

   // for (i = 0; i < ARRAY_SIZE(topics); i++)
    {
        err = mqtt_subscribe(client, topics[i], qos[i], mqtt_topic_subscribed_cb, LWIP_CONST_CAST(void *, topics[i]));

        if (err == ERR_OK)
        {
            PRINTF("Subscribing to the topic \"%s\" with QoS %d...\r\n", topics[i], qos[i]);
        }
        else
        {
            PRINTF("Failed to subscribe to the topic \"%s\" with QoS %d: %d.\r\n", topics[i], qos[i], err);
        }
    }
}

static void publish_message(void *ctx)
{
    static const char *topic   = "$baidu/iot/shadow/RT1060BTCDShadow/update";
    static const char *message = "{\"reported\" : {     \"LEDstatus\" : true ,     \"humid\" : 66,     \"temp\" : 32    } }";

    mqtt_publish(mqtt_client, topic, message, strlen(message), 1, 0, mqtt_message_published_cb, (void *)topic);
}

发布内容不能直接给成json格式,需要使用https://www.bejson.com/实现json压缩转义:

{"reported" : { "LEDstatus" : true, "humid" : 88, "temp" : 11 } }

下面就可以编译代码,并且烧录测试了。

4.2 RT1060-EVK开发板测试结果

测试结果如下,可以看到代码一共发布5次,而MQTT fx订阅的也收到了5次,并且网页版物影子数据已经刷成RT1060-EVK 开发板的数据,并且开发板串口也打印出自己订阅的数据,从结果可以发现,RT1060-evk开发板也成功实现了百度云端的物影子数据发布与订阅,下面就可以进一步开发自己嵌入式对接数据的控制情况了。

打印结果如下:

bash 复制代码
Initializing PHY...

************************************************
 MQTT client example
************************************************
Getting IP address from DHCP...

IPv4 Address     : 192.168.43.200
IPv4 Subnet mask : 255.255.255.0
IPv4 Gateway     : 192.168.43.1

Resolving "rndrjc9.mqtt.iot.gz.baidubce.com"...
Connecting to MQTT broker at 183.240.93.18...
MQTT client "RT1060BTCDShadow_evk" connected.
Subscribing to the topic "$baidu/iot/shadow/RT1060BTCDShadow/update/accepted" with QoS 0...
Subscribed to the topic "$baidu/iot/shadow/RT1060BTCDShadow/update/accepted".
Published to the topic "$baidu/iot/shadow/RT1060BTCDShadow/update".
Received 250 bytes from the topic "$baidu/iot/shadow/RT1060BTCDShadow/update/accepted": "{"requestId":"30f56100-68ba-4466-9477-a365535d900c","reported":{"LEDstatus":true,"humid":66,"temp":32},"desired":{},"lastUpdatedTime":{"reported":{"LEDstatus":1595853248732,"humid":1595853248732,"temp":1595853248732},"desired":{}},"profileVersion":2}"
Published to the topic "$baidu/iot/shadow/RT1060BTCDShadow/update".
Received 250 bytes from the topic "$baidu/iot/shadow/RT1060BTCDShadow/update/accepted": "{"requestId":"86e3e1bd-ffad-4576-bc76-bab8f75cfa06","reported":{"LEDstatus":true,"humid":66,"temp":32},"desired":{},"lastUpdatedTime":{"reported":{"LEDstatus":1595853249735,"humid":1595853249735,"temp":1595853249735},"desired":{}},"profileVersion":3}"
Published to the topic "$baidu/iot/shadow/RT1060BTCDShadow/update".
Received 250 bytes from the topic "$baidu/iot/shadow/RT1060BTCDShadow/update/accepted": "{"requestId":"2b37aa8c-7cd4-4dcf-bcfa-a89529314329","reported":{"LEDstatus":true,"humid":66,"temp":32},"desired":{},"lastUpdatedTime":{"reported":{"LEDstatus":1595853250715,"humid":1595853250715,"temp":1595853250715},"desired":{}},"profileVersion":4}"
Published to the topic "$baidu/iot/shadow/RT1060BTCDShadow/update".
Received 250 bytes from the topic "$baidu/iot/shadow/RT1060BTCDShadow/update/accepted": "{"requestId":"ebf596d7-74e3-4799-8d61-35460a0fae18","reported":{"LEDstatus":true,"humid":66,"temp":32},"desired":{},"lastUpdatedTime":{"reported":{"LEDstatus":1595853251966,"humid":1595853251966,"temp":1595853251966},"desired":{}},"profileVersion":5}"
Published to the topic "$baidu/iot/shadow/RT1060BTCDShadow/update".
Received 250 bytes from the topic "$baidu/iot/shadow/RT1060BTCDShadow/update/accepted": "{"requestId":"39164f97-51c8-4ead-9b92-7b8ff5d0c0b6","reported":{"LEDstatus":true,"humid":66,"temp":32},"desired":{},"lastUpdatedTime":{"reported":{"LEDstatus":1595853252721,"humid":1595853252721,"temp":1595853252721},"desired":{}},"profileVersion":6}"
相关推荐
博客园团队10 小时前
被百度降权的经历:没有百度的日子,是百度给的无期徒刑
百度
AI程序猿人14 小时前
聚焦大模型应用落地,2024全球数字经济大会人工智能专题论坛在京举办
人工智能·搜索引擎·百度·自然语言处理·大语言模型·agent·ai大模型
百度智能云17 小时前
百度智能云创新业务部总经理李想:发挥AI企业科技创新优势 助力职业教育人才扬帆远航
人工智能·科技·百度
瞅啥1121 小时前
【ONLYOFFICE8.1】ONLYOFFICE8.1版本桌面编辑器测评
数据库·经验分享·百度·编辑器·电脑
陈思杰系统思考Jason1 天前
系统思考—啤酒游戏
百度·微信·微信公众平台·新浪微博·微信开放平台
LIJIAzlexpo3 天前
2025深圳国际消费电子展览会
百度
高登先生3 天前
南京,协同开展“人工智能+”行动
大数据·人工智能·科技·百度·机器人·自动驾驶
pictoexcel4 天前
为何同一PDF文档用不同软件打印效果不同?
百度·pdf
Dream SYC_UCC5 天前
AI 写作:随着互联网的普及、人工智能的应用,越来越多的问题能很快得到答案。那么,我们的问题是否会越来越少?以上材料引发了你怎样的联想和思考?
百度
北京鹏生科技有限公司5 天前
Cybervadis认证是什么?
大数据·百度