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

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

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

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

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

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订阅

涉及到订阅发布,那么发布订阅的主题是怎样的呢?
这里可以打开自己新建的物影子,选择交互,可以看到页面已经给出对应的主题情况:
在这里插入图片描述

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

$baidu/iot/shadow/RT1060BTCDShadow/update/accepted 

发布的主题为:

$baidu/iot/shadow/RT1060BTCDShadow/update

在这里插入图片描述

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

3.3 MQTT fx发布

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

$baidu/iot/shadow/RT1060BTCDShadow/update

当然,还要输入发布的内容,这里要注意下,物影子并不像数据型设备那样,可以实现数据的透传,这里发布的数据需要是满足物影子物模型的json格式,有人可能想,那么我到底应该发什么数据呢?
其实格式可以在物影子的原始数据里面,已经给出了格式:
在这里插入图片描述

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

{
  "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

#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开发板也成功实现了百度云端的物影子数据发布与订阅,下面就可以进一步开发自己嵌入式对接数据的控制情况了。
在这里插入图片描述

打印结果如下:

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}"

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/755552.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

SpringBoot学习05-[SpringBoot的嵌入式Servlet容器]

SpringBoot的嵌入式Servlet容器 嵌入式Servlet容器servlet容器-嵌入式servlet容器配置修改通过全局配置文件修改修改添加实现了WebServerFactoryCustomizer接口的bean来进行修改 servlet容器-注册servlet三大组件 嵌入式Servlet容器 SpringBoot包含对嵌入式Tomcat、Jetty、Und…

Nvidia Jetson/RK3588+AI双目立体相机,适合各种割草机器人、扫地机器人、AGV等应用

双目立体视觉是基于视差原理&#xff0c;依据成像设备从不同位置获取的被测物体的图像&#xff0c;匹配对应点的位置偏移&#xff0c;得到视差数据&#xff0c;进而计算物体的空间三维信息。为您带来高图像质量的双目立体相机&#xff0c;具有高分辨率、低功耗、远距离等优点&a…

DIYGW UniApp低代码可视化平台:高效、灵活、安全的应用开发新途径

一、引言 在数字化快速发展的今天&#xff0c;企业对于快速构建多端应用的需求日益增长。然而&#xff0c;传统的应用开发方式往往面临周期长、成本高、技术门槛高等问题。为了解决这些问题&#xff0c;DIYGW UniApp低代码可视化平台应运而生&#xff0c;它以高效率、多端使用…

动态人物抠图换背景 MediaPipe

pip下载 MediaPipe pip install mediapipe -i 手部特征点模型包包含一个手掌检测模型和一个手部特征点检测模型。手掌检测模型在输入图片中定位手部&#xff0c;手部特征点检测模型可识别手掌检测模型定义的被剪裁手掌图片上的特定手部特征点。 由于运行手掌检测模型非常耗时&…

面试突击:HashMap 源码详解

本文已收录于&#xff1a;https://github.com/danmuking/all-in-one&#xff08;持续更新&#xff09; 数据结构 JDK1.8 之前 JDK1.8 之前 HashMap 采用 数组和链表 结合的数据结构。如下图&#xff1a; HashMap 将 key 的 hashCode 经过扰动函数处理过后得到 hash 值&#…

用C/C++写一个客户端和服务器之间进行TCP通信的DEMO

目录 一、Visual Sudio 2022 二、配置 三、说明 四、客户端 五、服务端 六、演示 一、Visual Sudio 2022 Visual Studio 2022是微软公司推出的一款集成开发环境&#xff08;IDE&#xff09;&#xff0c;旨在为开发人员提供全面的工具集&#xff0c;支持从Windows到MacOS…

【算法专题--链表】两数相加 -- 高频面试题(图文详解,小白一看就懂!!)

目录 一、前言 二、题目描述 三、解题方法 ⭐双指针 -- 模拟进位 (使用哨兵位头节点) &#x1f95d; 什么是哨兵位头节点&#xff1f; &#x1f347;思路解析 &#x1f34d;案例图解 四、总结与提炼 五、共勉 一、前言 两数相加 这道题&#xff0c;可以说是--…

Linux Swap

Swap: 页面换出&#xff1a;就是在 Swap 机制下&#xff0c;当内存资源紧张时&#xff0c;内核就会把不经常使用的这些匿名页中的数据写入到 Swap 分区或者 Swap 文件中。从而释放这些数据所占用的内存空间。 页面换入&#xff1a;就是当进程再次访问那些被换出的数据时&…

如何修复Power BI【View usage metrics report】指标报表数据源更新问题?

故事背景 有朋友留言询问&#xff1a;通过我之前写的 想知道Power BI用户访问报告的次数&#xff1f;快来学习&#xff01; 这篇文章&#xff0c;了解了如何查看Power BI用户访问报告的详情。 但是最近由于创建【View usage metrics report】指标报表的小伙伴离职了&#x…

【数据可视化技术】1、如何使用Matplotlib和Seaborn库在Python中绘制热力图

热力图是一种数据可视化技术&#xff0c;可以显示变量之间的相关性。这个代码段是数据分析和可视化的常用方法&#xff0c;特别适合于展示变量之间的相关性&#xff0c;对于数据科学和机器学习项目非常有帮助。 1、 导入必要的库 首先&#xff0c;确保你已经安装了matplotlib…

苏州网站建设好做吗

苏州网站建设是一个非常热门的行业&#xff0c;由于苏州地理位置优越、经济发达、人口众多&#xff0c;所以网站建设市场也非常火爆。但是在苏州网站建设这个行业中&#xff0c;竞争也是非常激烈的&#xff0c;所以想要在这个市场中脱颖而出并不是件容易的事情。 首先&#xff…

break和continue的标签使用

break标签的使用 break label是退出label对应的循环 //BreakDetail.java //2024.06.29 public class BreakDetail{public static void main(String[] args) {label1:for(int j 0; j < 4; j){label2:for(int i 0; i < 10; i){if(i 2){//break; //情况1//break label2…

信息系统项目管理师(项目整合管理)补充

项目管理信息系统&#xff1a;给项目提供了IT软件工具&#xff0c;例如进度计划软件工具、工作授权系统、配置管理系统、信息收集与发布系统&#xff0c;或其他基于IT技术的工具。以及进入其他在线信息系统&#xff08;如知识库&#xff09;的登录界面&#xff0c;支持自动收集…

应用部署方式演变

应用部署方式演变 1.传统部署2.虚拟化部署3.容器化部署 1.传统部署 传统的应用程序部署是将多个应用程序直接部署在操作系统上&#xff0c;一旦其中的某个应用程序出现内存泄漏&#xff0c;那么该程序就会大量吞噬系统内容空间&#xff0c;导致其他应用程序无法正常运行。 2.虚…

docker 学习之路

文章目录 1、官方文档2、常用命令挂载Docker容器内运行的脚本或命令常用 3、介绍4、Dockerfile5、问题6、链接 ​ 1、官方文档 Docker 是一个开源的应用容器引擎&#xff0c;让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中&#xff0c;然后发布到任何流行的 Linux…

人工智能在多模态多组学领域的最新研究进展|顶刊速递·24-06-29

小罗碎碎念 本期推文主题&#xff1a;人工智能在多模态与多组学中的最新研究进展 今天这期推文比较特殊&#xff0c;起来就开始干活&#xff0c;只能跑来会场写了。 小罗观点 今天这期推文覆盖面挺广的&#xff0c;前四篇与肿瘤治疗相关&#xff0c;并且两篇都直接与免疫微环境…

【算法学习】射线法判断点在多边形内外(C#)以及确定内外两点连线与边界的交点

1.前言&#xff1a; 在GIS开发中&#xff0c;经常会遇到确定一个坐标点是否在一块区域的内部这一问题。 如果这个问题不是一个单纯的数学问题&#xff0c;例如&#xff1a;在判断DEM、二维图像像素点、3D点云点等含有自身特征信息的这些点是否在一个区域范围内部的时候&#x…

eclipse基础工程配置( tomcat配置JRE环境)

文章目录 I eclipse1.1 工程配置1.2 编译工程1.3 添加 JRE for the project build pathII tomcat配置JRE环境2.1 Eclipse编辑tomcat运行环境(Mac版本)2.2 Eclipse编辑tomcat运行环境(windows版本)2.3 通过tomcat7W.exe配置运行环境(windows系统)I eclipse 1.1 工程配置 …

C++笔记:实现一个字符串类(构造函数、拷贝构造函数、拷贝赋值函数)

实现一个字符串类String&#xff0c;为其提供可接受C风格字符串的构造函数、析构函数、拷贝构造函数和拷贝赋值函数。 声明依赖文件 其中ostream库用于打印标准输入输出&#xff0c;cstring库为C风格的字符串库 #include <iostream> #include <cstring> 声明命…

Matplotlib绘制并列的条形图:每个类别有多个条形并排显示

《博主简介》 小伙伴们好&#xff0c;我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源&#xff0c;可关注公-仲-hao:【阿旭算法与机器学习】&#xff0c;共同学习交流~ &#x1f44d;感谢小伙伴们点赞、关注&#xff01; 《------往期经典推…