【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 1883static 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.1Resolving "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.rhkb.cn/news/367196.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

昇思MindSpore学习入门-保存与加载

在训练网络模型的过程中&#xff0c;实际上我们希望保存中间和最后的结果&#xff0c;用于微调&#xff08;fine-tune&#xff09;和后续的模型推理与部署&#xff0c;本章节我们将介绍如何保存与加载模型。 保存和加载模型权重 保存模型使用save_checkpoint接口&#xff0c;…

从hugging face 下模型

支持国内下载hugging face 的东西 下模型权重 model_id 是红色圈复制的 代码 记得设置下载的存储位置 import os from pathlib import Path from huggingface_hub import hf_hub_download from huggingface_hub import snapshot_downloadmodel_id"llava-hf/llava-v1…

格拉姆角场(GAF)将一维序列转化为图像

格拉姆角场&#xff08;Gramian Angular Field, GAF&#xff09;是一种将一维时间序列数据转换为二维图像表示的有效方法。以下是关于格拉姆角场&#xff08;GAF&#xff09;的详细解释&#xff0c;包括其原理、步骤以及优势和应用&#xff1a; 一、原理 格拉姆角场通过将一维…

Mysql和ES使用汇总

一、mysql和ES在业务上的配合使用 一般使用时使用ES 中存储全文检索的关键字与获取的商品详情的id&#xff0c;通过ES查询获取查询商品的列表中展示的数据&#xff0c;通过展示id 操作去获取展示商品的所有信息。mysql根据id去查询数据库数据是很快的&#xff1b; 为什么ES一般…

[Labview] 二维数组写入表格

就一个二维数组写表&#xff0c;CSDN天天让我改进质量 简直是迫害完美主义 天知道Labview有什么思路好写&#xff0c;就一个破连连看(ˉ▽ˉ&#xff1b;)... 随便写点什么碎碎念占字数好了

未公开 GeoServer开源服务器wfs远程命令执行漏洞 已复现(CVE-2024-36401)

0x01 阅读须知 技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成…

Qt自定义信号

1.Teacher类下定义信号signals: Student类下定义槽函数&#xff1a; Teacher.h #pragma once#include <QObject>class Teacher : public QObject {Q_OBJECTpublic:Teacher(QObject *parent);~Teacher(); signals:void Ask(); //老师向学生提问void Ask(QString str);…

WebStorm配置路径别名(jsconfig.json)

项目是 ViteVueTs 新建一个 jsconfig.json文件 {"compilerOptions": {"baseUrl": ".","paths": {"/*": ["./src/*"]}},"exclude": ["node_modules", "dist"] }然后在 vite.confi…

C语言的数据结构:图的基本概念

前言 之前学过了其它的数据结构&#xff0c;如&#xff1a; 集合 \color{#5ecffd}集合 集合 —— 数据元素属于一个集合。 线型结构 \color{#5ecffd}线型结构 线型结构 —— 一个对一个&#xff0c;如线性表、栈、队列&#xff0c;每一个节点和其它节点之间的关系 一个对一个…

燃料电池混合电源的能量管理系统

这个例子显示了燃料电池混合电源的能量管理系统。 这个例子展示了燃料电池混合电源的能量管理系统。 电路描述 本文给出了基于燃料电池的多电动飞机应急动力系统的仿真模型。随着MEA中起落架和飞控系统的电气化程度的提高&#xff0c;常规应急电源系统(冲压式空气涡轮或空气驱…

01:Linux的基本命令

Linux的基本命令 1、常识1.1、Linux的隐藏文件1.2、绝对路径与相对路径 2、基本命令2.1、ls2.2、cd2.3、pwd / mkdir / mv / touch / cp / rm / cat / rmdir2.4、ln2.5、man2.6、apt-get 本教程是使用的是Ubuntu14.04版本。 1、常识 1.1、Linux的隐藏文件 在Linux中&#xf…

【ROS中Cjson文件的作用】

在ROS (Robot Operating System) 中&#xff0c;.json 文件通常用于存储配置信息、数据序列化或者在某些情况下用于网络通信和数据交换。JSON&#xff08;JavaScript Object Notation&#xff09;是一种轻量级的数据交换格式&#xff0c;易于人阅读和编写&#xff0c;同时也易于…

【WebGIS干货分享】Webgis 面试题-浙江中海达

1、Cesium 中有几种拾取坐标的方式&#xff0c;分别介绍 Cesium 是一个用于创建 3D 地球和地理空间应用的 JavaScript 库。在 Cesium 中&#xff0c;你可以使用不同的方式来拾取坐标&#xff0c;以便与地球或地图上的对象进行交 互。以下是 Cesium 中几种常见的拾取坐标的方式…

深入理解C++中的锁

目录 1.基本互斥锁&#xff08;std::mutex&#xff09; 2.递归互斥锁&#xff08;std::recursive_mutex&#xff09; 3.带超时机制的互斥锁&#xff08;std::timed_mutex&#xff09; 4.带超时机制的递归互斥锁&#xff08;std::recursive_timed_mutex&#xff09; 5.共享…

[论文阅读笔记33] Matching Anything by Segmenting Anything (CVPR2024 highlight)

这篇文章借助SAM模型强大的泛化性&#xff0c;在任意域上进行任意的多目标跟踪&#xff0c;而无需任何额外的标注。 其核心思想就是在训练的过程中&#xff0c;利用strong augmentation对一张图片进行变换&#xff0c;然后用SAM分割出其中的对象&#xff0c;因此可以找到一组图…

网络爬虫基础知识

文章目录 网络爬虫基础知识爬虫的定义爬虫的工作流程常用技术和工具爬虫的应用1. 抓取天气信息2. 抓取新闻标题3. 抓取股票价格4. 抓取商品价格5. 抓取博客文章标题 网络爬虫基础知识 爬虫的定义 网络爬虫&#xff08;Web Crawler 或 Spider&#xff09;是一种自动化程序&…

《企业实战分享 · 常用运维中间件》

&#x1f4e2; 大家好&#xff0c;我是 【战神刘玉栋】&#xff0c;有10多年的研发经验&#xff0c;致力于前后端技术栈的知识沉淀和传播。 &#x1f497; &#x1f33b; 近期刚转战 CSDN&#xff0c;会严格把控文章质量&#xff0c;绝不滥竽充数&#xff0c;如需交流&#xff…

HUAWEI MPLS 静态配置和动态LDP配置

MPLS(Multi-Protocol Label Switching&#xff0c;多协议标签交换技术)技术的出现&#xff0c;极大地推动了互联网的发展和应用。例如&#xff1a;利用MPLS技术&#xff0c;可以有效而灵活地部署VPN(Virtual Private Network&#xff0c;虚拟专用网)&#xff0c;TE(Traffic Eng…

a-range-picker 国际化不生效

1、问题&#xff1a;按照官方 添加后是这样的 周和月没有翻译 1-1官方配置如下图 1-2效果&#xff1a; 2、import locale from "ant-design-vue/es/date-picker/locale/zh_CN"; 打印出locale是这样的 这个文件翻译文件中没有相关翻译 3、解决&#xff1a; 简单粗…

【实战场景】记一次UAT jvm故障排查经历

【实战场景】记一次UAT jvm故障排查经历 开篇词&#xff1a;干货篇&#xff1a;1.查看系统资源使用情况2.将十进制进程号转成十六进制3.使用jstack工具监视进程的垃圾回收情况4.输出指定线程的堆内存信息5.观察日志6.本地环境复现 总结篇&#xff1a;我是杰叔叔&#xff0c;一名…