一文解锁华为云新技能-AIOT开发全流程【设备接入-ESP端侧数据收集[MQTT]-实时数据分析】(步步截图较详细)

在这篇你将会接触到:从物联网工程师从硬件层-通信层到应用层全流程;开发华为云最基本的一些产品介绍和布局,使用将通过虚拟设备与华为云学习设备接入与使用;随后你将会通过一个STM32-ESP8266-MQTT-华为云的实例演示MQTT通讯、不同硬件设备上数据格式的处理转化以及一些最基础的通信知识;最后通过官方提供的IAM账号,挑战实时处理工业的数据流,建立数据通道,掌握好基本的算子的概念并学会运用它处理数据。

文章目录

  • 一文解锁华为云新技能-AIOT开发全流程【设备接入-ESP端侧数据收集[MQTT]-实时数据分析】(步步截图较详细)
    • 华为云创建和IOT区块部分
    • 虚拟设备-设备接入演示
      • 1.创建产品
      • 2.自定义物模型(定义服务-属性/命令)
      • 3.注册设备(注册完成后状态显示未激活)
      • 4.MQTT虚拟生成设备
      • 3.上报/订阅Topic发送json格式数据测试平台设备是否能正常接受到数据
    • 云端下发命令和控制
    • ESP8266-STM32-传感器结合以实现端侧数据收集[MQTT]
    • MQTT简介
      • 发布 - 订阅模式
      • 消息传递的过程可以分为三步:
    • MQTT
    • 请求 - 响应模式
      • STM32+ESP8266+MQTT+华为云
      • 获取端口、域名、WI-FI、ClientId、Username、Password
      • 自定义操作topic
      • ST-Link仿真器、STM32、ESP8266硬件连接
      • 配置、填写和烧录
      • 配置ST-Link仿真器
      • 填写
      • 校验结果
    • 数据格式问题
    • 串口接收的实现
    • ArduinoJson库实现数据解析
    • ArduinoJson库实现数据的打包发送
    • JSON解析库的安装
    • 串口接收的实现
    • JSON库实现数据解析
    • JSON数据的打包发送
    • 实时数据分析
      • 添加IoTDA实时数据源
    • 创建数据管道
    • 处理流程-数据源配置、清洗与输出
      • 数据源配置
      • 数据清洗
      • 数据输出
    • 运行数据管道
    • 模型与资产
    • 数据分析
    • 实例演示-使用IoTA实现电子工厂SMT产线OEE分析实践
      • 总体流程介绍
      • 1、主流程说明:
        • 设备上报数据(也可基于设备模拟器)
        • IoT设备接入服务
        • IoT数据分析服务
        • 3D应用:
      • 2、IoTA内部主要分析流程说明
      • 3、开通IoT数据分析服务。
      • 4、设备管理服务授权配置
      • 5、创建管道作业接入IoTDA数据
      • 6、创建SMT产线和设备资产模型
      • 7、创建SMT产线和设备资产
      • 8、使用资产模型实时计算产线和设备OEE及设备数据异常分析
      • 9、第三方应用实时呈现SMT产线和设备数据分析结果
    • 实例演示
      • 创建管道与IOTDA数据接入
        • 1、创建管道作业,进入IoTA Console,选择左侧导航栏“数据管道”,然后点击右侧“创建数据管道”。
        • 2、进入管道作业编辑页面,系统默认为作业配置了“IoT设备接入数据源“,“产品过滤”,“数据存储输出” 3个算子,如下图所示。
        • 3、添加存储组, 点击某一个存储输出算子,比如印刷机存储输出算子,右侧配置存储组名称中点击下方的”添加“,然后输入存储组名称”SMT-Demo-Storage“,点击右侧图标,保存配置。
        • 4、添加存储,比如印刷机存储输出算子,在”数据存储名称“中点击添加,输入存储名称”Printing1“点击右侧图标,保存配置。
        • 5、重复步骤3,步骤4,将其它5个设备输出算子配置好数据存储名称,配置完成点击右上角”保存“,保存成功后可在存储管理页面中查看已创建好的存储组和存储名称。
        • 6、为打印机添加”数据计算算子“,右键点击算子图标,弹出菜单中选择”数据计算“算子,如下图所示:
        • 7、为打印机再添加”数据计算算子“,右键点击算子图标,弹出菜单中选择”数据计算“算子,如下图所示
        • 8、为打印机再添加“数据过滤”算子,右键点击算子图标,弹出菜单中选择”数据计算“算子,如下图所示
        • 9、重复步骤6~步骤8将其它设备分支添同样的算子进行处理,配置后的效果如下图所示
        • 10、为印刷机增加计划工作状态属性, 右键点击IoTDA数据源算子弹出“添加产品过滤”算子图标,
        • 11、增加超时插补算子,右键点击增加“超时插补”算子,算子配置如下:
        • 12、为印刷机增加“数据计算”算子,用于转换时间格式,配置方法与步骤6相同
        • 13、为印刷机增加“数据计算”算子,用于增加增加PlanningWorkStatus属性,算子参数配置如下
        • 14、为印刷机增加数据输出算子,用于将设备计划工作状态数据输出到存储中,算子配置如下图所示
        • 15、重复步骤10~步骤14为其它5种SMT设备分别增加设备计划工作状态属性数据,最终完成后如下图效果:
        • 16、点击右上角保存,并启动作业。
      • 创建SMT产线和设备资产模型
        • 1、创建设备模型:印刷机模型,在IoTA Console中左侧导航栏中选择“资产建模”,“模型”,点击上方“新建”
        • 2、为印刷机增加属性,点击 属性信息下方“快速添加”按钮,可从数据存储中快速导入印刷机属性字段,减少手工操作。
        • 3、为印刷机增加静态类型和分析任务类型的属性,通过界面“手动添加”方式,按照"设备公共性属性列表"的参数进行配置。
        • 4、为印刷机模型增加分析任务,通过界面“添加分析任务”,按照"设备公共分析任务列表"的参数进行配置。
        • 5、重复步骤1~步骤5 创建其它5种设备的模型。
        • 6、创建产线模型
        • 7、添加产线模型的属性信息。
        • 8、添加产线模型的分析任务
        • 9、创建工厂模型
        • 10、至此工厂,产线,设备的模型已创建完成,如下图如示。
      • 创建SMT产线和设备资产模型
        • 1、创建设备模型:印刷机模型,在IoTA Console中左侧导航栏中选择“资产建模”,“模型”,点击上方“新建”
        • 2、为印刷机增加属性,点击 属性信息下方“快速添加”按钮,可从数据存储中快速导入印刷机属性字段,减少手工操作。
        • 3、为印刷机增加静态类型和分析任务类型的属性,通过界面“手动添加”方式,按照"设备公共性属性列表"的参数进行配置。
        • 4、为印刷机模型增加分析任务,通过界面“添加分析任务”,按照"设备公共分析任务列表"的参数进行配置。
        • 5、重复步骤1~步骤5 创建其它5种设备的模型。
        • 6、点击新建,弹出模型对话框,输入模型名称:“ProductLine”,显示名称:“产线”, 点击“确定”。
        • 7、添加产线模型的属性信息。
        • 8、添加产线模型的分析任务
        • 9、创建工厂模型
        • 10、至此工厂,产线,设备的模型已创建完成,如下图如示。
      • 使用资产模型实时计算产线和设备OEE
        • 1、从IoTA导航栏,点击“资产建模型”,再点击“资产”,选择已创建的“SMTFactoryDemo”进入资产界面。
        • 2、选择进入资产监控页面。
        • 3、选择某一设备资产,比如选择“印刷机”设备,可实时查看当前设备上报的所有测量类型属性数据,同时也能查看所有计算任务类型属性的实时结果数据。
        • 4、选择产线资产,比如“SMT产线1”,可以实时查看到当前产线的OEE相关的指标计算结果。
        • 5、查看某个设备资产的历史数据,比如查看印刷机的历史数据,点击选择印刷机资产,点击属性值右边的图标,即可查看当前设备资产的历史数据时序分析图,比如查看资产属性的平均值曲线。
        • 6、通过点击右上角的,可查看资产时序历史原始数据。
      • 第三方应用实时呈现数据分析结果

华为云创建和IOT区块部分

因为华为云中的IOT和各个区块混杂在一起,所以很不容易找到这个IOT,所以在开始之前先来简单地介绍一下华为云的基本的操作页面。

当你登录并注册时,你会进入到华为云的主页,无论什么时候你绕晕了就回到这个主页面

官网链接
https://www.huaweicloud.com

现在你可以看下上面的一行栏目,比较重要的是三个东西:产品、开发者和控制台。开发者点进去是有大量的教程和认证课程等,有时间可以学习一下。第二个是控制台,IOT这块用的较少,在后面的服务器搭建这篇博客中我会详细每步都截图来讲明白。

产品是比较重要的,他在栏目的上方

产品这里你可以找到华为云的所有服务,正式因为这里的服务太多了,所以非常容易绕晕,下图即为产品页面,一共20个服务,这里我们只讲IOT的服务。

这里就是我们要用的IOT服务模块,我们直接从这里开始,智能硬件是华为自家的设备我相信一般很少工业上买到,一般都是西门子等一些工业品牌。

所以我们的重点是物联网云服务,把工业数据接入到华为云并做出数据分析与数据模型建立。

点设备接入IOTDA进入如下页面
然后点击进入管理控制台,正式开始物联网云平台的搭建,这里就是物联网工程师工作的控制台。

虚拟设备-设备接入演示

我先来简单通俗讲一下设备接入的全流程,这个就是设备接入的整个流程,我们要做的事情:
1、先定义一个产品(叫什么名字,用什么通信协议、数据格式是什么等等,虽然理论上选择范围很多,但是工业上用的就那几套)
2、定义一个设备(就是你的端侧设备,这里主要是设定要密钥这些的链接验证方式、设备ID这些)
3、数据规则(我们云平台用什么数据格式发,设备用什么格式,是小数还是整数都要规定好)
4、这些数据存储在那里,既然我们用了华为云,肯定物联网的云优势就在这里,就是存储数据和数据处理这两方面。

你可以在总览这里查看刚才说的每一个部分。

1.创建产品

点红色的那个创建产品,其他随便填,只是一个名称,但是数据格式如果使用我们的虚拟设备的话可以选择JSON格式

点击创建即可
然后你可以点一下这个产品的查看,这里有很多我们要用的信息,数据格式那里是我一开始做错了,是JSON的。这个页面别急着关掉,我们要在这里开始定义物模型,点开下面的红色的创建服务,开始干活。

2.自定义物模型(定义服务-属性/命令)

这里的名字你随便起,这里提供三级的定义。我举个例子,比如说我要监控共享汽车设备状态还有天气的温湿度计的设备,这个设备就叫服务。

那对于第一个车子设备我想要知道他的两个情况:位置,即经纬度和是不是启动的,这个就叫做设备的属性。

所以我们先来创建第一个服务,车子设备,名字你随意起,添加服务如下:

然后你需要点击添加属性来添加两个属性:位置和开车与否

添加属性时候你需要做的一下几个事情,其他的随便填:
1、定义属性是否可读可写
2、设备的取值范围
3、数据类型,浮点数还是整数等等

这里由于是使用虚拟设备来传输,什么数据都行,一般都是可读可写浮点比较多


最后如下图

3.注册设备(注册完成后状态显示未激活)

定义好华为云端的这些要接收和传输的信息以后,现在就可以继续点击设备,选择所有设备,然后右上角有个红色的注册设备,点击开始创建设备。

所属资源空间可以选择默认的,也可以去买一个自己超大盘,其实这个涉及云盘的一些内容就不扩充了。
其他的内容都是随拜填,设备认证选择密钥,密钥是比较流行的认证类型,然后密码自己填。


创建出来如下图

你需要点击查看,里面我们需要的信息ID信息,为接下里做准备,这是我的页面,等会需要在这里提取设备ID。

4.MQTT虚拟生成设备

华为官方推荐的那个生成器需要依赖Java环境,我不推荐使用,这里用我这个,这也可以在下面的链接下载。

https://www.yuque.com/docs/share/48cb3122-a049-4268-83bc-9354776991cf?#

如果没办法下载,你也可以到CSDN上搜MQTT虚拟设备发送什么的,都可以下载的,但是都是VIP或者收费的,所以首选上面的下载链接,也可以私聊我发给你。

为了方便展示,我在设备把页面换成中文了。

解压好是如下图的页面的页面,链接名称写你的设备名称,比如手我定义的是test,然后第二个英文的是写你的设备ID,第三行是你的密钥密码,其他就不用调整了

然后进入如下页面

这个时候你查看自己的华为云设备这一个区块,你可以看到设备显示在线。说明这个时候你就成功了。接下来模拟设备接收与发送。

3.上报/订阅Topic发送json格式数据测试平台设备是否能正常接受到数据

接下来你按照下面的一个输入做出一些尝试,在topic输入下面的上报的代码,然后在下面的数据块总发送json格式的代码块
上报数据TOPIC:oc/devices/deviceid/sys/messages/up订阅消息TOPIC:oc/devices/{device_id}/sys/messages/up 订阅消息TOPIC:oc/devices/devicei​d/sys/messages/up订阅消息TOPIC:oc/devices/{device_id}/sys/messages/down

device_id写上面我提到的设备ID

JSON数据格式:
{
“services”: [
{
“service_id”: “Track”,
“properties”: {
“Longitude”: 113.6320,
“Latitude”: 34.7685
}
},
{
“service_id”: “Sensor”,
“properties”: {
“Temperature”: 85.26,
“Humidity”: 35.8
}
}
]
}

代码如下图

当然topic指令并不是仅仅是简单的两句话,你可以打开产品那一栏点击查看,有一些列的代码指令提供参考

然后你在云端可以接收到我们虚拟设备的发送的消息,然后这边已经显示出来了。


你可以点开来查看这个消息,由于一开始我设置成了二进制格式,这里发送的JSON的格式,所以只呈现我发送的数据原码,可以看下官方的数据格式

你可以在运维监控这里看到这些链接的设备

同时你可以在监控运维下的消息跟踪查看所有的消息历史记录

云端下发命令和控制

你也可以选择在设备管理中找到自己的设备,然后查看,你在上面一栏有个命令,你点开选择下图的同步命令下发,看下你的虚拟设备接收情况。

最后随着设备接入的越来越多,回到总览这里查看所有设备的介入情况

ESP8266-STM32-传感器结合以实现端侧数据收集[MQTT]

前面这部分为了使的演示简单明了,同时也考虑到大部分的小伙伴看这篇博客是没有硬件在手,所以采用了虚拟设备进行云链接,现在我们开始展示硬件的云通信。

在这里主要的通讯模块是ESP8266,因为笔者实在是太菜,对NB-IOT或者4/5G模块或者LoRa的理解还不够深入,所以用这个例子来讲解MQTT的传输。

MQTT简介

MQTT可以为一种网络协议,是通讯的语言,比如说大家熟知的java、python、C/C+都是编程语言。而物联网设备间沟通的语言,就是网络协议。设备间想相互交流,通信双方必须使用同一种“语言”。比如说你和中国人问好说’你好‘、日本人问好要说‘こんにちは’、和英国人问好要说‘hello’.

我以前在郭朝斌“物联网开发实战“中曾经听到是这么解释MQTT的重要性的,这里例子非常生动:

物联网的网络通信特点是物联网设备很大可能工作在不可靠、高延迟的网络环境中。 并且物联网系统中,设备数量多,而且交互非常复杂。比如家里的环境监测,温度、湿度、光照、二氧化碳、甲醛含量……这些都需要不同的设备测量,而且每个房间用到的设备也不同。如果让云平台的服务对每个设备分别做权限控制和数据阈值设置,这会非常麻烦。

因为当数据的“生产者”和“消费者”直接交互时,要是没有中间角色基于共同的目标协调,双方的耦合度会很大,导致系统很难实现。 这时候,需要把家为一个整体来处理,交互逻辑就会变得简单多了。设备经常需要根据实际使用环境做增加、减少等调整。

所以基于上述的这些特点,物联网系统在选择网络通信的协议时,一般采用一种发布-订阅式的结构。

发布 - 订阅模式

发布 - 订阅模式包含三个角色,分别是发布者、经纪人和订阅者,它们的关系如下图所示

消息传递的过程可以分为三步:

1.发布者(设备)负责生产数据。发布者发送某个主题的数据给经纪人,发布者不知道订阅者。
2.订阅经纪人管理的某个或者某几个主题。
3.当经纪人接收到某个主题的数据时,将数据发送给这个主题的所有订阅者。

比如说当使用美团外卖点一分午餐,这时候发布订单给外卖订单中心服务器时,外卖订单中心收到订单之后,再把订单发送给店家

发布 - 订阅模式之所以适合物联网系统因为在物联网场景中,一个传感器数据需要触发多个服务或者终端执行动作。
比如红外传感器,当它检测到有人体靠近时,就需要触发一系列动作:通知摄像头拍照,声光报警器执行报警,推送消息给主人的手机等。
怎么满足这种需求呢?我们最好让摄像头、声光报警器和手机都订阅“人体靠近”这个主题消息。当红外传感器被触发时,它发送人体靠近的消息,然后这些设备就能同时收到这个消息,接着完成系统定义的那些动作。这就是发布 - 订阅模式的工作方式。

MQTT 协议就是发布 - 订阅模式中的大佬,所以MQTT在物联网使用的范围非常广泛。

MQTT

MQTT它有三个主要特点:

1.采用二进制的消息内容编码格式,所以二进制数据、JSON 和图片等负载内容都可以方便传输。(华为云也是仅仅支持JSON和二进制)
2.协议头很紧凑,协议交互也简单,保证了网络传输流量很小。
3.支持 3 种 QoS(Quality of Service,服务质量)级别,便于应用根据不同的场景需求灵活选择。

这三个特点,让 MQTT 协议非常适合计算能力有限、网络带宽低、信号不稳定的远程设备,所以它成为了物联网系统事实上的网络协议标准。

请求 - 响应模式

请求 - 响应模式有两个角色,一个是客户端,另一个是服务器。
客户端是请求数据或者服务的一方。服务器则用来接收客户端的请求,并提供相应的数据或者服务。服务器在收到请求后,会获取数据,对资源数据(比如数据库)进行加工处理,准备好响应,然后返回给客户端。
请求 - 响应模式是无状态的通信方式,每个完整的请求 - 响应都是相互独立的。进一步细分的话,它还可以分为同步和异步两种。你可以看下这张图片。

如果我们使用华为云的话,华为云就是我们的服务器,而我们的设备就是我们的客户端。之所以要采用云的工作方式,就是为了提高我们对数据加工处理的能力。

好,一般来说,ESP8266都是通过WI-FI来通信,但是方式和硬件设备条件有一些不同,有以下两种产品:
第一种是独立的开发版,有独立的处理器与充足的I/O管脚的,像下图

第二种是通讯模块,需要搭配板子使用,期间是信息传递的桥梁,将信息传输的平台,然后把平台传输会设备。烧录器上面那个芯片就是我们的WI-FI模块

接下来我们主要详细讲将STM32和ESP8266模块这种搭配为例子

STM32+ESP8266+MQTT+华为云

这里参考一位大佬的博客,大家感兴趣可以去看下
https://blog.csdn.net/hao1__/article/details/121050775

首先我来说下这里完成的工作:
华为云
1、获取端口、域名、WI-FI、ClientId、Username、Password
2、自定义操作topic
STM32端
1、ST-Link仿真器、STM32、ESP8266硬件连接
2、配置、填写和写入topic

最后云端获取温湿度数据以及控制继电器开关

获取端口、域名、WI-FI、ClientId、Username、Password

1、WI-FI
这个只需要准备好你家的WI-FI名字和密码就可以

2、端口-域名
你根据下图的提示,在总览这里找到MQTT华为这端的域名和端口

3、ClientId、Username、Password
这三个需要进入到点击进入生产工具网址,进行三元组信息生产。
生成工具网址:
https://iot-tool.obs-website.cn-north-4.myhuaweicloud.com/
将我们在华为云的ID地址和密钥复制进去,将生成之后生成ClientId、Username、Password复制保存

自定义操作topic

我们上面已经接触过用topic进行数据的传输,这里我们自定义一个topic,跟着下面三张图的讲解就可以完成,但是还是要提醒一下,topic不可以直接用,而是把{ deviceId_ID}需要替换成自己的ID

ST-Link仿真器、STM32、ESP8266硬件连接

这个设备用的是stm32l,需要加装一个ST-Link,同时将ESP8266模块直接装入板子进行配置。一起来看下吧
一、材料准备
准备以下材料

将ESP8266模块插进去

将串口线一端插入到STM32L的USB口,另一端插入到电脑的USB口

连接ST-Link仿真器
用3条杜邦线接入STM32L的 DIO、GND、CLK中

另一头的杜邦线接入仿真器,仿真器USB接口接入电脑。

配置、填写和烧录

代码在QQ讨论群下载
131322621

配置ST-Link仿真器

打开代码,点击配置仿真器

填写

现在需要通讯的的那几个要素(端口、域名、WI-FI、ClientId、Username、Password )依次填入

填入自定义topic,来触发特定的指令,比如说传输温湿度、打开关闭

校验结果

写两个数据上传到华为云

你可以在特定的指令中下达我们特定的topic,然后开关继电器

数据格式问题

这里要强调数据格式问题,一个是JSON格式、一个是二进制数据流格式,在上面接入设备的时候你就会发现一个问题,如果不同格式的发送到华为云平台,虽然不会报错,但是只可以接收到一段完整的代码,而不能提取出其中的数据,所以正确的格式在多设备的数据处理中尤其重要。

这里有篇博客写的非常好,解决了ESP8266和STM32两个设备中的格式转化问题,下面它的链接:
https://blog.csdn.net/qq_44857700/article/details/112388324?utm_source=app&app_version=5.0.1&code=app_1562916241&uLinkId=usr1mkqgl919blen

实现方式
首先以这两个作为例子,剩下的不论是什么设备都是这流程:
1、安装当下环境的JSON解析库
2、串口接收的实现
3、JSON库对数据进行解析
4、JSON数据再处理打包发送

在这里ESP8266按装的Arduino的环境(ArduinoJson库),STM32按装的是Keil5的环境(Jansson库),这和上面那个例子是一样的,都是Keil环境。

串口接收的实现

在ESP8266程序中需要将usartEvent();函数放到loop()函数中。

/*串口数据接收*/
void usartEvent(){comdata = "";while (Serial.available())//时刻读取硬件串口数据{comdata = Serial.readStringUntil('\n');//从串口缓存区读取字符到一个字符串型变量,直至读完或遇到某终止字符。UserData(comdata);//进行JOSN数据解析}while (Serial.read() >= 0){}//清除串口缓存
}

ArduinoJson库实现数据解析

/*数据解析{status:true}*/
void UserData(String content){StaticJsonDocument<200> doc;//申请JSON解析空间DeserializationError error = deserializeJson(doc,content);if (error) {//解析错误Serial.print(F("deserializeJson() failed: "));return;}status=  doc["status"];
}

ArduinoJson库实现数据的打包发送

参照ArduinoJson库的JsonGeneratorExample工程即可得到以下代码,当然也可采用serial.println()函数进行格式化输出。

  StaticJsonDocument<200> doc;doc["sensor"] = "gps";doc["time"] = 1351824120;serializeJsonPretty(doc, Serial);

STM32部分

STM32同ESP8266一样,我会从以下四部分介绍:①JSON解析库的安装②串口接收的实现③JSON库实现数据解析④JSON数据的打包发送

JSON解析库的安装

关于这个库还没有下载的小伙伴可以参照这个博客安装:
【STM32上使用JSON - 羊羊得亿 - 博客园】https://www.cnblogs.com/yangxuli/p/7885225.html

串口接收的实现

STM32的串口中断我才用的是串口空闲中断,空闲中断是接受数据后出现一个byte的高电平(空闲)状态,就会触发空闲中断。
代码实现如下:
需要定义的全局变量:u8 buf1_size = 0;//串口数据接收数量标记 bool data_change = 0;//串口接收完成/变化标志位

#include <stdarg.h>
#include <string.h>
void USART1_printf (char *fmt, ...){ char buffer[USART1_REC_LEN+1];  // 数据长度u8 i = 0; va_list arg_ptr;va_start(arg_ptr, fmt);  vsnprintf(buffer, USART1_REC_LEN+1, fmt, arg_ptr);while ((i < USART1_REC_LEN) && (i < strlen(buffer))){USART_SendData(USART1, (u8) buffer[i++]);while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET); }va_end(arg_ptr);
}void USART1_Init(u32 bound){ //串口1初始化//GPIO端口设置GPIO_InitTypeDef GPIO_InitStructure;USART_InitTypeDef USART_InitStructure;NVIC_InitTypeDef NVIC_InitStructure;   RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE);    //使能USART1,GPIOA时钟//USART1_TX   PA.9GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出GPIO_Init(GPIOA, &GPIO_InitStructure);  //USART1_RX   PA.10GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空输入GPIO_Init(GPIOA, &GPIO_InitStructure); //Usart1 NVIC 配置NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级3NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3;     //子优先级3NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;         //IRQ通道使能NVIC_Init(&NVIC_InitStructure);    //根据指定的参数初始化VIC寄存器 //USART 初始化设置USART_InitStructure.USART_BaudRate = bound;//一般设置为9600;USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字长为8位数据格式USART_InitStructure.USART_StopBits = USART_StopBits_1;//一个停止位USART_InitStructure.USART_Parity = USART_Parity_No;//无奇偶校验位USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//无硬件数据流控制USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收发模式USART_Init(USART1, &USART_InitStructure); //初始化串口USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//开启ENABLE/关闭DISABLE串口接收中断USART_ITConfig(USART1, USART_IT_IDLE, ENABLE);//开启串口空闲中断USART_Cmd(USART1, ENABLE);                    //使能串口
}void USART1_IRQHandler(void){ //串口1中断服务程序(固定的函数名不能修改)    u8 clear = clear;USART_ClearFlag(USART1,USART_FLAG_TC);if(USART_GetITStatus(USART1,USART_IT_RXNE)!=Bit_RESET)//串口中断发生        {if(data_change == 0)//重新接收{memset(USART1_RX_BUF,0,sizeof(USART1_RX_BUF));//清空整个接收数组data_change = 1;//标志位拉高}USART1_RX_BUF[buf1_size++]=USART1->DR;}else if(USART_GetFlagStatus(USART1,USART_FLAG_IDLE)!=Bit_RESET)//空闲中断发生{            buf1_size = 0;data_change = 0;//标志位拉低,下次数据改变进入data_sys = 1;//允许解析clear = USART1->SR;//空闲中断要读这两个寄存器clear = USART1->DR;USART_ClearITPendingBit(USART1,USART_IT_IDLE);//清除空闲中断标志位    }
}

JSON库实现数据解析

JSON库解析需要调用头文件#include <jansson.h>,bool类型变量使用需要#include "stdbool.h"头文件。
并且非常重要的是,在对大量数据进行解析的时候,需要将startup_stm32f10x_md.s33的Stack_Size EQU 0x00000200修改为Stack_Size EQU 0x00000C00,这一步骤是将STM32的堆栈增加,防止在解析的时候出现堆栈不够用的情况。

#include <jansson.h>
bool led_status;
//开关灯JSON函数{"status":true}
//存在问题!!使用本函数解析后串口printf无法使用,建议使用USART1_printf函数实现发送
/**
* @brief  Json解析函数
* @param none
* @return
* - 0 转换成功
* - 1 转换失败
* @details
*/
uint8_t Jansson_Analysis(char *text)
{json_error_t error;json_t *root;root = json_loads((const char*)text, 0, &error); if(json_is_object(root)){status = json_object_get(root, "status");if(json_is_true(status))led_status = 1;else if(json_is_false(status))led_status = 0;}else{USART1_printf("root format error:%d-%s\r\n", error.line, error.text);return 1;}json_decref(root);//释放JSON空间return 0;
}
/*
// string 类型的解析
name = (char *)json_string_value(json_object_get(root, "name"));
// int 类型的解析
age = json_integer_value(json_object_get(root, "age"));
// double 类型的解析
score = json_real_value(json_object_get(root, "score"));
// bool 类型的解析
status = json_object_get(root, "status");
if(json_is_true(status))
else if(json_is_false(status))
*/

JSON数据的打包发送

Jansson包提供了一个json数据打包的函数,但此函数在打包过程中会占用极大的片内空间,因此在这里仅介绍给大家,不推荐大家使用,推荐大家使用的方法还是使用printf函数进行格式化输出。

/**
* @brief  将数据打包为Json格式
* @param [in] status
* @return none
* @details
*/
void jansson_pack(bool state)
{json_t *root;char *out;/* Build the JSON object */root = json_pack("{sb}","status",status);out = json_dumps(root, JSON_ENCODE_ANY);printf("%s",out);json_decref(root);//释放JSON空间free(out);//释放JSON空间
}
/*
s 代表string类型
b 代表bool类型
d 代表int类型
f 代表float、double类型
*/

使用printf格式化输出只需要:

printf("{\"status\":%d}",status);

实时数据分析

关于实时的数据分析,这里一般都没有现成的实时数据流,但是幸运的是华为云官方提供了三个Demo,可以登录在他们的IAM用户使用,将下面的3个账号中的一个依次填入到登录的IAM界面中
账号1
IoTAnalyticsDemo
IoTAnalyticsDemo1
IoTAnalyticsDemo
账号2
IoTAnalyticsDemo
IoTAnalyticsDemo2
IoTAnalyticsDemo
账号3
IoTAnalyticsDemo
IoTAnalyticsDemo3
IoTAnalyticsDemo

你需要退出自己的账号,然后回到原来的页面


上面三个账号随便一个都可以使用,都是官方提供的

还是和第一次的一样,点开产品,点IOT物联网,点IOT数据分析,然后点开始使用开始我们的开发工作。

你会进入到工作台中,

首先先了解一下整个数据分析的结构吧。
首先数据分析主要由以下的步骤组成:

1 、配置数据源
配置与IoT数据分析服务交互的外部数据源。
2、 创建数据管道
通过数据管道进行数据预处理和数据流控制。
3 、配置存储
完成老化策略配置,将数据导入存储。
4 、资产建模
基于业务述求,为物理对象创建出一个实时映射的数字镜像。
5 、数据分析
选择合适的数据分析方式,开启数据探索。
6 、结果导出
将分析结果导出并下载到本地,或转到第三方存储中。

用于做分析的数据源有以下的来源,可以根据实际的工业需求进行选择,这次演示用的IoTDA实时数据源做分析。
IoTDA实时数据源
DIS数据源
DMS(kafka)数据源
离线数据源
API数据源

这里详细说下IoTDA实时数据源,等会要用的呢

添加IoTDA实时数据源

操作步骤
1、访问并登录“IoT数据分析”服务控制台,点击“立即使用”。
2、在左侧导航栏选择“数据源>IoTDA实时数据源”,点击页面中“立即授权”按钮进行确认授权。以便后续IoTA服务与IoTDA服务能够互相访问租户数据。


3、确认授权后,点击“添加数据源”,输入数据源名称、在实例下拉列表中选择1个您名下的IoTDA设备接入服务实例、并在产品栏选择您需要把该IoTDA实例下哪些产品的数据上报到数据分析服务中,然后点击“确定”。

创建数据管道

1、访问并登录“IoT数据分析”服务控制台,点击“立即使用”。
2、在左侧导航栏选择“数据管理”,进入数据管道页面,在“管理列表”点击“创建数据管道”。

3、弹出“创建数据管道”对话框,您可自行填写“作业名称”、“描述”,并选择数据源

使用IoTDA数据源时,系统会自动读取该数据源的相关信息及相关的产品信息,生成作业执行流程,如图所示。

上图所示示例中,所选择的IoTDA数据源包含两种设备:烟感设备与水表,系统自动生成了两个处理分支,分别用于处理这两种设备上报的数据。

这两个分支各自以一个“产品过滤”算子作为起始点,分别过滤出这两种设备的数据,以便于各续处理流程仅处理某一种产品的数据,如图所示。


系统还自动根据这两种设备的产品信息(该产品信息以安全的方式从IoTDA获取),生成了默认的输出配置。

请用户自行选择存储组,并填写存储名称,补齐配置内容即可保存,如图所示。

处理流程-数据源配置、清洗与输出

数据源配置

1、IoTDA数据源
在画布上选中“IoT设备接入数据源”算子,在右侧配置面板处,可修改算子名称、选择数据源、填写事件时间字段路径、时间格式,如图。

2、DIS数据源配置
在画布上选中“DIS数据源”算子,在右侧配置面板处,可修改算子名称、选择数据源、填写事件时间字段路径、时间格式、时区,如图。

数据清洗

目前提供了产品过滤、增改属性类、删除属性类、过滤消息类、增加消息类、规约消息类几个类型的数据清洗算子。增加清洗步骤的操作方式为,在算子节点上点击右键,可以看到”向前”、”向后”两个菜单,如图所示:

接下来,以产品过滤、数据计算、选择属性、数据过滤、超时插补、数据聚合为例,分别介绍一下不同类型的算子配置。各个算子配置的详细说明请参考”算子使用指南”。

1、产品过滤
“产品过滤”仅可添加在“IoT设备接入数据源”算子后,因此,仅在“IoT设备接入数据源”算子上点击右键时,可以看到“产品过滤”算子。
添加好算子节点后,在算子节点上点击鼠标左键,即可打开右侧的算子配置面板,如图:

系统会根据所选择的产品,自动生成该算子的输出内容:

2、数据计算
按照表达式进行数值计算,计算的结果赋值给源属性。
添加好算子节点后,在算子节点上点击鼠标左键,即可打开右侧的算子配置面板,如图:

3、选择属性
在输入数据中选择保留的属性,未选择的属性被删除。当数据字段较多时,用户可使用该功能筛选出业务所关系的字段。
添加好算子节点后,在算子节点上点击鼠标左键,即可打开右侧的算子配置面板,如图:

使用该配置筛选出batteryLevel与batteryVoltage两个字段,因为后续处理流程仅使用这两个字段。

4、数据过滤
根据设置的条件过滤数据,满足条件的数据则输出,不满足条件的数据将被丢弃。
添加好算子节点后,在算子节点上点击鼠标左键,即可打开右侧的算子配置面板,如图:

使用该配置过滤出batteryLevel不等于0且batteryVoltage大于100的数据。
数据过滤算子不会修改数据输出,用户可展开“输出”项检查输出内容。

5、超时插补
提供基于时间的数据插补功能。时间支持延迟等待时长,以及指定固定时间点。插补数据为上一条实际数据,但是事件时间为插补计算出的时间。
添加好算子节点后,在算子节点上点击鼠标左键,即可打开右侧的算子配置面板,如图:

6、数据聚合
数据聚合算子,对数据流中的数据根据窗口周期进行汇聚计算。
添加好算子节点后,在算子节点上点击鼠标左键,即可打开右侧的算子配置面板,如图:

数据输出

将数据输出到IoTA的存储,以便进一步分析(资产建模、实时分析、时序分析、离线分析)使用。
用户可以配置算子名称、选择存储组、填写存储名称,并选择所需要的属性及属性类型等信息,如图所示:

运行数据管道

数据管道编辑完成后,作业状态会变为“就绪“态,如图所示:

“就绪”态的作业即可运行:在“管理列表页”点击作业卡片,进入“作业详情页”,然后点击右上角的红色按钮“启动作业“。

启动作业时,系统会自行判断用户的作业是否需要实时计算资源,若需要实时计算资源,则会弹出如下对话框供用户自行选择:

模型与资产

1、创建资产模型
点击“新建”,如下图1中①所示
输入模型名称、显示名称,点击确定,如下图1中②所示
图1 新增模型

2、添加属性信息
手动添加
点击手动添加,如下图1中①所示
输入名称、显示名称、选择属性类别、数据类型、属性值(指属性的默认值)、范围和单位,点击确定,如下图1中②所示;在单位定义时,系统已预置一系列常用单位,若无合适单位、用户可手动输入自定义单位。

快速添加

IoTA提供了快速批量添加属性的功能,用户可以将在存储管理中定义的物的各种属性快速引入到资产模型中,引用时需要指定存储位置,具体步骤如下:

点击快速添加,如下图2中①所示
选择数据存储,如下图2中②所示
输入范围,勾选要添加的属性,点击确定,如下图2中③所示。

3、添加分析任务
点击添加分析任务,如下图1中①所示
输入名称,选择类型,完成输入参数、表达式的定义,并把分析任务的输出映射到具体所需的属性后点击确定即可,如下图1中②所示;分析任务概念详细介绍请见分析任务定义。

1、创建资产
在资产管理页,点击“新建资产”,如下图1中①所示
输入名称,选择模型,点击确定,如下图1中②所示

数据分析

在进过了上面这么多步骤以后,就可以对数据进行分析了,根据不同的数据源有三种分析:实时分析、实时分析、离线分析:
1、实时分析
这里提供了丰富的IoT实时处理算子以及提供相应的编排开发IDE,适合用来一站式的开发、调测、部署、监控实时作业,可以满足IoT行业各种实时数据分析场景。
2、实时分析
针对IoT数据的显著时序特征,基于物联网资产模型提供海量时序数据的存储和多种时间维度的聚合计算能力,丰富的图表分析方式让数据规律清晰可见。
3、离线分析
通过标准 SQL开发数据分析任务,并轻松处理TB-EB级别海量数据,可在报表统计、设备行为分析等无需实时处理数据的场景使用。

接下里我们就用一个演示来把前面全部过程都贯穿一遍。

实例演示-使用IoTA实现电子工厂SMT产线OEE分析实践

这是官方提供的一个经典案例,通过跑这个案例,你可以基本熟悉实时数据分析的全流程。

总体流程介绍

从设备侧到应用侧端到端数据分析过程

1、主流程说明:

设备上报数据(也可基于设备模拟器)

基于标准物模型,设备定时通过MQTT协议自动上报设备属性数据。

IoT设备接入服务

通过配置设备数据转发规则将设备属性数据和设备消息到IoTA服务。

IoT数据分析服务

基于数据管道接收设备数据,并通过资产建模和计算分析能力,实时计算生成产线和设备OEE相关数据,判断数据是存存在异常信息。

3D应用:

通过调用IoTA的API获取数据,以3D形式展示产线和设备,可查看产线和设备OEE,设备关键指标,告警等故障信息,同时可查到相关历史数据。

2、IoTA内部主要分析流程说明

3、开通IoT数据分析服务。

登录华为云,搜索“IoTA”,在产品主页点击“立即使用”,进入IoTA服务Console页面,此时会自动开通IoTA服务。

4、设备管理服务授权配置

完成IoTDA服务授权配置

5、创建管道作业接入IoTDA数据

分析数据的第一步需要将SMT设备上报的数据接入到IoTA服务,基于IoTDA服务授权配置后,数据即会从IoTDA服务自动转发到IoTA中,通过创建管道作业可将从IoTDA转发的数据接入,用户通过构建管道作业实现对设备数据进行清洗,规整,去重,增加外部业务属性信息等一系列处理,为下一步基于资产模型分析设备属性数据做好准备,本案例中管道作业为计算设备OEE相关指标准备好基础数据。

6、创建SMT产线和设备资产模型

为了构建物联网领域业务对象的数字孪生模型,IoT数据分析服务参考软件工程中面向对象的思想提供了“资产建模”能力,其中核心概念包括资产模型和资产,模型包括属性(类属性)和分析任务(类方法),对物理世界事物构建数字资产模型时,必须先定义好资产模型、然后再创建资产,即要先定义好SMT产线和设备的资产模型,再基于设备模型实例化创建设备资产。

7、创建SMT产线和设备资产

在完成SMT产线和设备模型构建后,用户可通过该模型,实例化创建对应的资产,包括工厂,产线,设备资产,发布资产后,结合前端管道作业输出的设备数据,可实时监控资产的运行状态。
详细操作请参考 创建SMT产线和设备资产。

8、使用资产模型实时计算产线和设备OEE及设备数据异常分析

在完成SMT产线和设备模型及资产构建后,系统自动根据模型结合资产数据计算引擎,根据设备上报的数据对SMT产线和设备OEE进行实时计算,通过Console可对设备状态、设备关键属性、设备数据异常告警等进行实时监控。

9、第三方应用实时呈现SMT产线和设备数据分析结果

IoTA当前提供标准API对外开放数据,包括设备原始数据,资产快照和历史数据,第三方应用通过API实时获取SMT产线的各项分析结果,包括设备OEE,设备状态、设备关键属性、数据异常告警,设备属性历史数据等进行实时呈现。

实例演示

创建管道与IOTDA数据接入

在开始前因为整个流程涉及的算术非常复杂,这里我不会展示具体某个流程的算数或者详细配置,这也不利用我们对整个流程掌握,我尽量将整个流程简化再简化。

1、创建管道作业,进入IoTA Console,选择左侧导航栏“数据管道”,然后点击右侧“创建数据管道”。

这里的数据源倒入部分就没有展示,数据源可以参考上面的流程,只需要两步即可倒入

输入作业名称,描述,选择数据源“IoTDA”类型,点击“确定”进入作业编辑页面。

2、进入管道作业编辑页面,系统默认为作业配置了“IoT设备接入数据源“,“产品过滤”,“数据存储输出” 3个算子,如下图所示。

3、添加存储组, 点击某一个存储输出算子,比如印刷机存储输出算子,右侧配置存储组名称中点击下方的”添加“,然后输入存储组名称”SMT-Demo-Storage“,点击右侧图标,保存配置。

4、添加存储,比如印刷机存储输出算子,在”数据存储名称“中点击添加,输入存储名称”Printing1“点击右侧图标,保存配置。

5、重复步骤3,步骤4,将其它5个设备输出算子配置好数据存储名称,配置完成点击右上角”保存“,保存成功后可在存储管理页面中查看已创建好的存储组和存储名称。

6、为打印机添加”数据计算算子“,右键点击算子图标,弹出菜单中选择”数据计算“算子,如下图所示:

为了整体流程更加简洁明了,这里不对算子进行过多讲解

7、为打印机再添加”数据计算算子“,右键点击算子图标,弹出菜单中选择”数据计算“算子,如下图所示

算子的配置如下图所示:

8、为打印机再添加“数据过滤”算子,右键点击算子图标,弹出菜单中选择”数据计算“算子,如下图所示

9、重复步骤6~步骤8将其它设备分支添同样的算子进行处理,配置后的效果如下图所示

10、为印刷机增加计划工作状态属性, 右键点击IoTDA数据源算子弹出“添加产品过滤”算子图标,


产品过滤算子的参数和上面的印刷机分支相同

11、增加超时插补算子,右键点击增加“超时插补”算子,算子配置如下:

12、为印刷机增加“数据计算”算子,用于转换时间格式,配置方法与步骤6相同
13、为印刷机增加“数据计算”算子,用于增加增加PlanningWorkStatus属性,算子参数配置如下

14、为印刷机增加数据输出算子,用于将设备计划工作状态数据输出到存储中,算子配置如下图所示

15、重复步骤10~步骤14为其它5种SMT设备分别增加设备计划工作状态属性数据,最终完成后如下图效果:

16、点击右上角保存,并启动作业。

启动成功后,约1分钟左右,作业状态为“运行中”表示作业正常运行。

创建SMT产线和设备资产模型

注意:这里我对大量的表格和数据进行了删减,主要是强调开发过程的流程和步骤掌握,因为每个工业的算子和算法都不一样,所以更加关注的对平台的使用

1、创建设备模型:印刷机模型,在IoTA Console中左侧导航栏中选择“资产建模”,“模型”,点击上方“新建”

输入模型名称: Printing, 显示名称: “印刷机”,点击“确定”保存。

2、为印刷机增加属性,点击 属性信息下方“快速添加”按钮,可从数据存储中快速导入印刷机属性字段,减少手工操作。

在数据存储中下拉选择“Printing”存储名称,勾选所有导入的属性,然后点击“确定”保存。

导入后效果如下

3、为印刷机增加静态类型和分析任务类型的属性,通过界面“手动添加”方式,按照"设备公共性属性列表"的参数进行配置。

4、为印刷机模型增加分析任务,通过界面“添加分析任务”,按照"设备公共分析任务列表"的参数进行配置。

5、重复步骤1~步骤5 创建其它5种设备的模型。
6、创建产线模型

点击新建,弹出模型对话框,输入模型名称:“ProductLine”,显示名称:“产线”, 点击“确定”。

7、添加产线模型的属性信息。

在左侧模型导航栏上选择上一步创建的“ProductLine”模型, 在“属性信息”页面点击 “手动添加”,如下图所示:

在对话框中输入属性相关信息,包括名称,显示名称,属性类别,数据类型,单位等信息。然后点击“确定 ”完成添加属性。如下图所示:

完成后效果图

8、添加产线模型的分析任务

选择分析任务页面,点击“添加分析任务”。

弹出对话框中,参考下图和表格输入相关信息,若输入参数较多,通过"添加参数" 逐个增加参数。

9、创建工厂模型

点击新建,弹出模型对话框,输入模型名称:“Factory”,显示名称:“工厂”, 点击“确定”。

10、至此工厂,产线,设备的模型已创建完成,如下图如示。

创建SMT产线和设备资产模型

1、创建设备模型:印刷机模型,在IoTA Console中左侧导航栏中选择“资产建模”,“模型”,点击上方“新建”


输入模型名称: Printing, 显示名称: “印刷机”,点击“确定”保存。

2、为印刷机增加属性,点击 属性信息下方“快速添加”按钮,可从数据存储中快速导入印刷机属性字段,减少手工操作。


在数据存储中下拉选择“Printing”存储名称,勾选所有导入的属性,然后点击“确定”保存。


导入后效果如下

3、为印刷机增加静态类型和分析任务类型的属性,通过界面“手动添加”方式,按照"设备公共性属性列表"的参数进行配置。

4、为印刷机模型增加分析任务,通过界面“添加分析任务”,按照"设备公共分析任务列表"的参数进行配置。

5、重复步骤1~步骤5 创建其它5种设备的模型。

创建产线模型

6、点击新建,弹出模型对话框,输入模型名称:“ProductLine”,显示名称:“产线”, 点击“确定”。

7、添加产线模型的属性信息。

在左侧模型导航栏上选择上一步创建的“ProductLine”模型, 在“属性信息”页面点击 “手动添加”,如下图所示:

在对话框中输入属性相关信息,包括名称,显示名称,属性类别,数据类型,单位等信息。然后点击“确定 ”完成添加属性。如下图所示:

完成添加后的效果如下图所示。

8、添加产线模型的分析任务

选择分析任务页面,点击“添加分析任务”。

完成配置后的效果如下图所示:

9、创建工厂模型

点击新建,弹出模型对话框,输入模型名称:“Factory”,显示名称:“工厂”, 点击“确定”。

10、至此工厂,产线,设备的模型已创建完成,如下图如示。

使用资产模型实时计算产线和设备OEE

1、从IoTA导航栏,点击“资产建模型”,再点击“资产”,选择已创建的“SMTFactoryDemo”进入资产界面。

2、选择进入资产监控页面。

3、选择某一设备资产,比如选择“印刷机”设备,可实时查看当前设备上报的所有测量类型属性数据,同时也能查看所有计算任务类型属性的实时结果数据。

4、选择产线资产,比如“SMT产线1”,可以实时查看到当前产线的OEE相关的指标计算结果。

5、查看某个设备资产的历史数据,比如查看印刷机的历史数据,点击选择印刷机资产,点击属性值右边的图标,即可查看当前设备资产的历史数据时序分析图,比如查看资产属性的平均值曲线。

6、通过点击右上角的,可查看资产时序历史原始数据。

第三方应用实时呈现数据分析结果

1、点击 http://123.60.210.97:8088/ 打开终端贴片产线应用。
2、可点击某个设备查看此设备的关键属性值,及此设备的OEE指标,同时可查看产线或设备的历史数据,如下图所示:

3、查看设备数据异常告警事件,点击设备中的黄色感叹号图标,会显示设备属性的异常数据信息,如下图所示:

一文解锁华为云新技能-AIOT开发全流程【设备接入-ESP端侧数据收集[MQTT]-实时数据分析】(步步截图较详细)相关推荐

  1. 华为云等保解决方案,全流程等保服务,帮助企业守护信息安全

    随着信息技术的发展,网络信息安全的重要性愈发凸显,大到党政机关.金融系统,小到电商.游戏.酒店甚至网民个人,信息安全关系到我们每个人乃至整个国家的切身利益,信息安全保护刻不容缓.保护网络信息安全已经提 ...

  2. 华为云DevCloud让软件开发更加高效智能, DevOps不止于美

    高速的中子撞击U235原子核,使其分裂成两个原子核,释放出巨大能量,同时产生的几个中子再去撞击其它原子核,形成链式反应,使得核裂变会无限的产生巨大的能量."将高速的中子比喻成人类的创新思想, ...

  3. 不想业务被中断?快来解锁华为云RDS for MySQL新特性

    本文分享自华为云社区<不想业务被中断?快来解锁华为云RDS for MySQL新特性>,作者:GaussDB 数据库. 相信很多用户在实际业务中都会碰到用户会话被中断这样的痛点,这时候其应 ...

  4. 解锁华为云AI如何助力无人车飞驰“新姿势”,大赛冠军有话说

    摘要:在2020年第二届华为云人工智能大赛•无人车挑战杯赛道中,"华中科技大学无人车一队"借助华为云一站式AI开发与管理平台ModelArts及HiLens端云协同AI开发应用平台 ...

  5. AI:华为云HiLens Kit试用测评—全栈全场景的人工智能

    AI:华为云HiLens Kit试用测评-全栈全场景的人工智能 导读:博主为CSDN社区的博客专家,目前拥有65000多的粉丝,曾经荣获十多项与人工智能相关的证书,也同时撰写了十多项发明专利和软件著作 ...

  6. ATN开源社区基于华为云ModelArts进行AI开发的实践

    ATN 公有链和智能矩阵 Atmatrix,采用区块链智能合约技术建立分布式账本,构建去中心化的 AI 交易市场,可以交易 AIaaS 的 AI API. AI 数据.AI 算力.AI 训练模型等.在 ...

  7. 华为云发布 GaussDB(DWS) 实时数仓,技术创新释放行业数据价值

    8 月 31 日,在华为云 TechWave 大数据专题日上,华为云发布了 GaussDB(DWS)实时数仓,工商银行.广东移动.清华大学等分享了大数据技术创新及应用实践. 围绕数据全生命周期提供整体 ...

  8. 开发也可以如此简单!华为云发布两款开发工具

    在4月25日的华为开发者大会(Cloud)上,华为云发布了基于华为云CloudIDE的智能化编码工具和云原生调测工具:华为云开发工具和效率首席专家.华为开发工具技术专委会主任王亚伟在主题演讲中介绍了如 ...

  9. 【云驻共创】华为云IoTDA服务下的设备管理流程实操

    文章目录 一.当今社会发展趋势 1.社会背景 2.什么是物联网(IoT) 3.什么是华为云(IoTDA) 二.为什么需要设备发放 1.传统模式-存在问题 2.设备发放模式-问题改进 三.设备接入服务的 ...

最新文章

  1. 计算机图形学曲线生成原理,计算机图形学_曲线及生成.ppt
  2. Istio 1.1 版本发布,性能和可用性提升
  3. python奇数和_请问python如何判断奇偶数?
  4. Java中的注解以及应用 @Deprecated @SupressWarning @Override
  5. 全球与中国立式胶体磨市场发展现状调研及前景需求分析报告2022-2027年版
  6. 【干货】引爆公式,让你的APP成为下一个“爆款”!
  7. 重游HBase核心知识点总结
  8. 减少浏览器兼容性问题
  9. 十进制数怎样转成十六进制数
  10. ue4渲染速度太慢_推介飞向月球纪录片基于Unreal实时渲染引擎的三维流程化制作...
  11. 管理感悟:当领导就要敢于,及时做出决策
  12. 科大讯飞 离线语音识别python_使用python语言调用科大讯飞离线语音合成
  13. 计算机控制技术课程解释与问题答疑
  14. 入行网络工程师一年的心得体会
  15. Java实现随机验证码和验证码图片渲染功能
  16. Scanner的引用、流程控制语句
  17. FTP服务器的搭建,可两个电脑通过局域网进行传输
  18. android的 root权限
  19. PVT(Pyramid Vision Transformer: A Versatile Backbone for Dense Prediction without Convolutions)
  20. 微信小程序如何更换头像

热门文章

  1. HDU5438 Ponds 拓扑+并查集
  2. Sql server 2005日志文件太大,使其减小的方法
  3. 关于颁布总承包服务费标准的通知
  4. 上班那些事儿之工作八小时
  5. 进程的休眠与唤醒(等待队列)
  6. 苹果账号被禁用怎么办?
  7. 《蓝海战略》读书笔记
  8. 奋斗吧,程序员——第五十一章 黑云压城城欲摧,甲光向日金鳞开
  9. Windows平台下快速搭建Emacs
  10. CSS基础:CSS的上下文之BFC