STM32F407使用ESP8266连接阿里云并上传数据
文章目录
- 前言
- 一、ESP01S介绍
- 1.ESP01S
- 2.MQTT固件烧录
- 3.WIFI连接
- 二、阿里云平台介绍
- 1.创建产品及添加设备
- 2.连接云平台
- 三、数据上报
- 四、命令下发
- 五、完整工程
前言
在实现OTA功能我们必须学会如何连接云平台,本文会仔细介绍使用STM32F407和ESP8266连接阿里云平台,最后实现数据上报和命令下发的功能。
一、ESP01S介绍
1.ESP01S
ESP8266 系列模组是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP8266EX的低功耗UART-WiFi芯片模组,可以方便地进行二次开发,接入云端服务,实现手机3/4G全球随时随地的控制,加速产品原型设计。
模块核心处理器 ESP8266 在较小尺寸封装中集成了业界领先的 Tensilica L106 超低功耗 32 位微型 MCU,带有 16 位精简模式,主频支持 80 MHz 和 160 MHz,支持 RTOS,集成 Wi-Fi MAC/ BB/RF/PA/LNA,板载天线。支持标准的 IEEE802.11 b/g/n 协议,完整的 TCP/IP 协议栈。用户可以使用该模块为现有的设备添加联网功能,也可以构建独立的网络控制器。
ESP8266 是高性能无线 SoC,以最低成本提供最大实用性,为 Wi-Fi 功能嵌入其他系统提供无限可能。
在图中我们可以清楚的看到ESP01S的引脚及各引脚的作用,在ESP01S的背面丝印上也会清晰的将各个引脚表示清楚。
2.MQTT固件烧录
在拿到ESP01S之后我们并不能直接连接阿里云平台,而是需要给它烧录上MQTT的固件之后才能使用。这个模块是由安信可开发的,我们可以到这个公司的官网下载:https://docs.ai-thinker.com/%E5%9B%BA%E4%BB%B6%E6%B1%87%E6%80%BB
在下载好之后可以只用固件烧录工具烧录固件。
有一点需要注意的是我们使用USB转TTL的模块烧录固件时,GPIO2需要接地让模块保持在下载模式
3.WIFI连接
在MQTT固件烧录完成之后我们就可以测试一下模块是否可以用啦,使用USB转TTL模块连接串口助手,设置波特率为115200。
如图发送指令AT,模块会通过串口回复OK。之后我们就可以使用模块连接WIFI啦。
这里我发送了3条指令,如下
ATE0 //关闭回显
AT+CWMODE=1 //设置为STA模式
AT+CWJAP="WIFI名称","密码" //连接密码
按照上面三条顺序发送指令就可以成功连接WIFI啦,注意这里格式一定要严格按照上面的格式。
二、阿里云平台介绍
1.创建产品及添加设备
打开阿里云平台的物联网平台,在这里我们创建新的产品。
只需要设置名称就可以其他的选项保持默认。
在创建产品后我们就需要添加我们的设备到产品里。fang完成添加产品后,就需要给我们的产品添加属性,方便后面的数据上传和命令下发。
按照上图添加四个属性,需要注意的是标识符和变量类型,最后一定要点击发布不然是不会生效的。
打开我们添加的设备就会看到这样四个属性,当然我这个是之前创建的,刚创建的默认值都是0。
2.连接云平台
在创建完产品和添加设备之后就可以试着使用ESP01S连接云平台了,我们依然是使用串口助手先测试一下。需要发送的命令如下:
AT+RESTORE
ATE0
AT+CWMODE=1
AT+CWJAP="TP-LINK_D417","a111222333a." //上面四条在之前有介绍
//配置MQTT参数
AT+MQTTUSERCFG=0,1,"k0afuldYVdz.HOME|securemode=2\,signmethod=hmacsha256\,timestamp=1741101764286|","HOME&k0afuldYVdz","7b006318f27b9f9972d67a013921a091595b6390a662b8989dbbb2adae6f04b1",0,0,""
AT+MQTTCONN=0,"iot-06z00hab1tkn7og.mqtt.iothub.aliyuncs.com",1883,1 //连接阿里云平添
AT+MQTTSUB=0,"/sys/k0afuldYVdz/HOME/thing/event/property/post_reply",1 //订阅信息
其中配置的MQTT参数可在下图位置查看
将配置参数的那条命令换成你自己设备的参数,这一点是非常重要的,不然是连接不上你的设备的。然后是订阅信息的那条命令也是需要更改成你自己的。
在完成这些操作之后我们就可以看一下是什么效果了。
在发送完上面的命令后,可以看到串口助手的输出的数据,基本每一条都是OK,这就表示你已经连接上了云平台,在阿里云上面也已经显示设备在线了。在准备上面的操作后,我们就可以上传数据到我们的云平台啦!发送的命令如下:
AT+MQTTPUB=0,"/sys/k0afuldYVdz/HOME/thing/event/property/post","{\"method\":\"thing.event.property.post\"\,\"params\":{\"temperature\":30\,\"Humidity\":30\,\"PowerSwitch_1\":1\,\"PowerSwitch_2\":1}}",0,0
在发送这条命令之后,串口会收到下图的消息
在云平台我们也可以看到数据已经上传。
三、数据上报
做完上面的一切准备,说明我们已经可以将数据上传到云平台了。接下来我们就可以编写我们的程序,使用STM32F407采集温湿度上传到云平台了。在之前的文章中已经将温湿度模块DHT11介绍的很清楚了,可以跳转参考【基于STM32F4实现温湿度检测(DHT11)】。数据上报的函数如下:
char Esp_PUB(void)
{memset(RECS,0,sizeof(RECS));printf("AT+MQTTPUB=0,\"%s\",\"{\\\"method\\\":\\\"thing.event.property.post\\\"\\,\\\"params\\\":{\\\"%s\\\":%d\\,\\\"%s\\\":%d\\,\\\"%s\\\":%d\\,\\\"%s\\\":%d}}\",0,0\r\n",pubtopic,func1,Temperature,func2,Shidu,func3,Switch1,func4,Switch2);//while(RECS[0]);//等待ESP返回数据delay_ms(200);//延时等待数据接收完成if(strcmp(RECS,"ERROR")==0)return 1;return 0;
}
其实最主要的就是通过串口将我们的指令发送到ESP01S,其中发送到ESP01S的那一条有很多 “” ,通过串口发送指令我们在符号前面需要这个 \ 作为我们的转义符,让ESP01S知道我们发送了什么东西。在这里我是用串口1和ESP01S进行通信,接受中断如下:
void USART1_IRQHandler(void) //串口1中断服务程序
{if(USART_GetITStatus(USART1,USART_IT_RXNE)){RECS[i]=USART_ReceiveData(USART1);i++;if((RECS[i-2]=='\r')|(RECS[i-1]=='\n')) {RECS[i-2]='\0';i = 0;CommandAnalyse(); //分析回传的数据}}
}
其实就是将接受收到的数据保存到数组里面,方便我们分析回传的数据和下发的命令。
四、命令下发
既然可以上传数据到云平台,那就可以从云平台下发数据,下发的数据会传到ESP01S,ESP01S会从串口传到STM32,STM32通过分析接受到的消息来判断下发的是什么命令。具体代码如下:
void CommandAnalyse(void)
{if(strncmp(RECS,"+MQTTSUBRECV:",13)==0){uint8_t i=0;while(RECS[i++] != '\0') {if(strncmp((RECS+i),func3,13)==0){while(RECS[i++] != ':'); Switch1=RECS[i];}if(strncmp((RECS+i),func4,13)==0){while(RECS[i++] != ':');Switch2=RECS[i];}}}
}
上面这个函数就是中断函数在接收完数据后调用的解析命令,主要是用了strcmp()这个函数,这个函数是用来做两个字符串的对比的,在解析到我们想要数据后在做对应的操作。
五、完整工程
工程文件比较多,这里不能全部都很仔细的介绍,关键部分已经在上面详细介绍,有需要的可以通过下面链接下载完整工程:
链接:https://pan.quark.cn/s/2c1ffed03ead
提取码:Ru4t
相关文章:
STM32F407使用ESP8266连接阿里云并上传数据
文章目录 前言一、ESP01S介绍1.ESP01S2.MQTT固件烧录3.WIFI连接 二、阿里云平台介绍1.创建产品及添加设备2.连接云平台 三、数据上报四、命令下发五、完整工程 前言 在实现OTA功能我们必须学会如何连接云平台,本文会仔细介绍使用STM32F407和ESP8266连接阿里云平台&…...
TorchServe部署模型-index_to_name.json
在TorchServe部署模型时,若要将模型输出结果映射到指定标签(如分类任务的类别名称),需通过index_to_name.json文件定义索引与标签的映射关系,并在打包模型时将其作为额外文件包含。以下是完整流程和命令示例࿱…...
每日一题——BMN3 小红炸砖块
“落下”操作只会对y轴有影响,所以注意y轴的变化即可 只要给出的坐标有砖块,就遍历查找他的上面是否有砖块,每一层都是这样,直到到没有砖块的那一层; 注意:定义矩阵时要注意,给出的坐标都是大…...
AWS服务器 磁盘空间升级到100G后,怎么使其生效?
在AWS(Amazon Web Services)上扩展EBS(Elastic Block Store)卷的大小后,服务器操作系统并不会自动识别新增的空间。要使操作系统识别并使用新增的磁盘空间,您需要进行一些额外的步骤。以下是详细的指导和说…...
AWS弹性容器服务(AWS Elastic Container Service,ECS)概述
李升伟 编译 标签:AWS | ECS | 容器 | Docker AWS弹性容器服务(AWS Elastic Container Service,ECS)简介 AWS弹性容器服务(ECS)是一项完全托管的容器编排服务,支持运行、管理和扩展容器化应用…...
【消息队列kafka_中间件】一、快速入门分布式消息队列
在当今大数据和分布式系统盛行的时代,消息队列作为一种关键的中间件技术,发挥着举足轻重的作用。其中,Apache Kafka 以其卓越的性能、高可扩展性和强大的功能,成为众多企业构建分布式应用的首选消息队列解决方案。本篇文章将带你深…...
【Axure元件分享】移动端滑动拨盘地区级联选择器
在移动端产品设计中,地区级联选择器(省/市/区)是用户信息录入场景的核心组件,尤其在电商收货地址、政务信息填报等高频业务中直接影响表单转化率。本文将介绍一款基于Axure的三级动态联动机型地区选择器,通过仿真级联滚…...
宁德时代25年校招演绎数字推理SHL测评题库题型及真题分析
非常感谢您对宁德时代的关注。祝贺您通过宁德时代校园招聘的专业面试环节,现邀请您参与完成以下测评。本轮共两份测评,每份测评对您的最终结果都非常重要,请务必在收到测评后48小时内完成!本测评需要进行远程监考,如果您无法或不愿…...
Python-Django+vue宠物服务管理系统功能说明
❥(^_-) 上千个精美定制模板,各类成品Java、Python、PHP、Android毕设项目,欢迎咨询。 ❥(^_-) 程序开发、技术解答、代码讲解、文档,💖文末获取源码+数据库+文档💖 💖软件下载 | 实战案例 💖文章底部二维码,可以联系获取软件下载链接,及项目演示视频。 本项目…...
洛谷普及B3691 [语言月赛202212] 狠狠地切割(Easy Version)
题目:[语言月赛202212] 狠狠地切割(Easy Version) 题号:B3691 难度:普及一 末尾包含对二分法优化的详细解释 题目分析 最后一句应该是本题的考查关键,关于筛选算法的时间优化, 但从功能理论上,我找到了…...
FPGA_BD Block Design学习(一)
PS端开发流程详细步骤 1.第一步:打开Vivado软件,创建或打开一个工程。 2.第二步:在Block Design中添加arm核心,并将其配置为IP核。 3.第三步:配置arm核心的外设信息,如DDR接口、时钟频率、UART接口等。 …...
Collection vs Collections:核心区别与面试指南
Collection vs Collections:核心区别与面试指南 一、本质区别(核心记忆点) 维度CollectionCollections身份集合框架的根接口操作集合的工具类包位置java.utiljava.util是否可实例化❌ 接口✅ 类(但构造器私有,不可实…...
sqlite3基本语句
创建表 CREATE TABLE student ( id INTEGER PRIMARY KEY, -- 学号,主键 name TEXT NOT NULL, -- 姓名,不能为空 age INTEGER, -- 年龄 gender TEXT -- 性别 ); SQLite常用数据类型 主键 …...
jupyter notebook 显示conda虚拟环境
使用 nb_conda_kernels 安装 nb_conda_kernels:这个包可以自动从你的 Conda 环境中发现并列出内核。 conda activate base # 确保你在 base 环境或任何其他环境中安装 conda install nb_conda_kernels显示jupyternotebook当前所在的位置。...
华为海思IC前端中后端(COTXPU)岗位笔试机考题
近期华为海思即将开始IC设计实现实习岗位机考。小编今天给大家分享下华为海思相关机考题目。 华为海思2025届校招笔试面试经验分享 每年IC秋招笔试其实也是从题库中随机抽出一些题。 华为海思2025届校招笔试面试经验分享华为海思机考主要分三个方向,分别是物理方向…...
HarmonyOS NEXT 实现滑动拼图验证码功能
大家好,我是 V 哥。 在 Gitee 上看到一个用 Java 实现的 HarmonyOS 滑动拼图验证码功能,已经太老了,鸿蒙开发推荐使用 ArkTS 语言,V 哥来改造一下。 以下是基于 ArkTS 的实现方案。由于鸿蒙系统的特性差异,这里提供核…...
【XML基础-1】深入理解XML:介绍、语法规则与实际应用
XML(可扩展标记语言)作为数据表示和交换的标准格式,自1998年问世以来已成为现代计算领域不可或缺的一部分。本文将全面介绍XML的基础概念、详细语法规则以及它在各领域中的实际应用。 1. 什么是XML? XML(eXtensible …...
STM32 HAL库扩大USB CDC的输入缓冲区
STM32 HAL库,使用USB, 扩大输入暂存区的方法 使用STM32的USB通讯CubeMX建立配置Serial Wire时钟配置USB配置时钟频率设置代码编写运行效果总结使用STM32的USB通讯 STM32可以不用使用串口转换直接和USB通讯。这给串口调试提供了极大的方便。编程,我使用了STM32CubeIDE编程。这…...
迭代器模式深度解析与实战案例
一、模式定义 迭代器模式(Iterator Pattern) 是一种行为设计模式,提供一种方法顺序访问聚合对象的元素,无需暴露其底层表示。核心思想是将遍历逻辑从聚合对象中分离,实现 遍历与存储的解耦。 二、核心组件 组件作用…...
Kotlin协程实用模版合集
目录 ✅ Kotlin 协程实用模板合集(适合 Android 项目) 📦 1. 基础挂起函数封装(Repository 层) ⚙️ 2. ViewModel 中使用协程 状态处理 ⏱️ 3. 带超时控制的挂起操作 🤝 4. 并发请求合并࿰…...
基于Flask的Windows事件ID查询系统开发实践
基于Flask的Windows事件ID查询系统开发实践 一、项目背景与功能概述 Windows操作系统的事件日志系统记录了数百种不同的事件ID,每个ID对应特定的系统事件。本文介绍如何构建一个基于Web的事件ID查询系统,主要实现以下功能: 数据可视化展示…...
机器人编程基础---C语言中的运算符
C语言中的运算符 算术运算符关系运算符逻辑运算符位运算符C语言提供了多种运算符来执行不同的操作。 算术运算符 + 加法- 减法* 乘法/ 除法% 取模(求余)++ 自增-- 自减int a = 10, b = 5; int sum = a + b;...
设计模式之迭代器模式:遍历的艺术与实现
引言 迭代器模式(Iterator Pattern)是一种行为型设计模式,它提供了一种顺序访问聚合对象中各个元素的方法,而又不暴露其底层实现。迭代器模式将遍历逻辑与聚合对象解耦,使得我们可以用统一的方式处理不同的集合结构。…...
React七案例中
代码下载 地图找房模块 顶部导航栏 封装NavHeader组件实现城市选择,地图找房页面的复用,在 components 目录中创建组件 NavHeader,把之前城市列表写过的样式复制到 NavHeader.scss 下,在该组件中封装 antd-mobile 组件库中的 N…...
消息中间件篇——RabbitMQ,Kafka
RabbitMQ 如何保证消息不丢失? 生产者确认机制 消息持久化 消费者确认机制 RabbitMQ如何保证消息不丢失? RabbitMQ的重复消费问题如何解决? RabbitMQ中死信交换机(RabbitMQ延迟队列有了解过吗?) 延迟队列…...
HOW - 实现 useClickOutside 或者 useClickAway
场景 在开发过程中经常遇到需要点击除某div范围之外的区域触发回调:比如点击 dialog 外部区域关闭。 手动实现 import { useEffect } from "react"/*** A custom hook to detect clicks outside a specified element.* param ref - A React ref object…...
青少年编程考试 CCF GESP Python七级认证真题 2025年3月
Python 七级 2025 年 03 月 题号 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 答案 B C A B B A A B C A B B A B A 1 单选题(每题 2 分,共 30 分) 第 1 题 下列哪个选项是python中的关键字? A. function B. class C. method D. object…...
兆讯MH2103系列pin to pin替代STM32F103,并且性能超越
MH2103 是一款高性能的 32 位微控制器,由兆讯恒达推出,主要用于替代 STM32F103 系列产品。以下是关于 MH2103 芯片的详细介绍: 技术规格 内核与主频: 采用高性能 32 位 Cortex-M3 内核,最高工作频率可达 216 MHz。支…...
h5使用dsBridge与原生app通信--桥方法
dsBridge是一个轻量级的 JS 和原生 App 的通信桥梁库,使用起来比原生方便不少支持: 1.H5 调用 Native 方法(JS → Native) 2.Native 调用 H5 方法(Native → JS) 3.支持参数传递和异步回调 4.支持 Android、iOS、以…...
package.json配置项积累
peerDependencies 用途:peerDependencies 主要用于声明一个包在其宿主项目中期望安装的依赖版本。它通常用于确保插件或库与特定版本的其他库兼容。 行为: 在 npm v7之前,如果宿主项目未安装 peerDependencies 中列出的依赖,则不…...
Python安装软件包报错 fatal error: Python.h: No such file or directory
Python安装软件包报错 fatal error: Python.h: No such file or directory Failed to import transformers.integrations.integration_utils because of the following error (look up to see its traceback): Failed to import transformers.modeling_utils because of the f…...
数据结构与算法-图论-复习1(单源最短路,全源最短路,最小生成树)
1. 单源最短路 单一边权 BFS 原理:由于边权为单一值,可使用广度优先搜索(BFS)来求解最短路。BFS 会逐层扩展节点,由于边权相同,第一次到达某个节点时的路径长度就是最短路径长度。 用法:适用…...
uniapp:微信小程序,一键获取手机号
<button open-type"getPhoneNumber" getphonenumber"getphonenumber">一键获取</button> <script>export default {methods: {getphonenumber(e){uni.login({provider: weixin,success: (res)> {console.log(res);},});},}} </scr…...
协作焊接机器人
一、核心定义与核心特点 1. 定义 协作焊接机器人是基于协作机器人本体(具备力传感、轻量化、安全停机等特性),集成焊接电源、焊枪、视觉 / 电弧传感器等模块,实现人机共融焊接作业的自动化设备。其核心在于: 安全协作:支持与焊工共同工作,无需物理隔离;柔性适配:快速…...
SpringBoot和微服务学习记录Day2
微服务 微服务将单体应用分割成更小的的独立服务,部署在不同的服务器上。服务间的关联通过暴露的api接口来实现 优点:高内聚低耦合,一个模块有问题不影响整个应用,增加可靠性,更新技术方便 缺点:增加运维…...
【CornerTag组件详解:优雅的角标设计与实现】
CornerTag组件详解:优雅的角标设计与实现 组件完整代码 <template><divclass"corner-tag":style"{background: bgColor,padding: ${paddingY}px 0,fontSize: fontSize px,...customStyle}"><slot /></div> </tem…...
Mybatis-缓存详解
什么是缓存? 存在内存中的临时数据 将用户经常查询的数据放在缓存中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题 经…...
WHAT - React useId vs uuid
目录 uuiduseId适用场景语法示例注意事项 复杂示例示例:动态表单列表 useId解读重点 useId vs uuid一句话总结对比表格示例对比useId 用于表单uuid() 用在 UI 会出问题uuid 的适合场景 总结建议 uuid 在 WHAT - Math.random?伪随机? 中我们…...
Leetcode 跳跃游戏 II (贪心算法)
给定一个长度为 n 的 0 索引整数数组 nums。初始位置为 nums[0]。 每个元素 nums[i] 表示从索引 i 向后跳转的最大长度。换句话说,如果你在 nums[i] 处,你可以跳转到任意 nums[i j] 处: 0 < j < nums[i] i j < n 返回到达 nums[n - 1] 的最…...
银河麒麟V10 Ollama+ShellGPT打造Shell AI助手——筑梦之路
环境说明 1. 操作系统版本: 银河麒麟V10 2. CPU架构:X86 3. Python版本:3.12.9 4. 大模型:mistral:7b-instruct 准备工作 1. 编译安装python 3.12 # 下载python 源码wget https://www.python.org/ftp/python/3.12.9/Python-3.12.9.tg…...
【物联网】GPT延时
文章目录 前言一、GPT实现延时1. 定时器介绍2. I.MX6ull GPT定时器介绍1)GPT定时器工作原理2)GPT的输入捕获3)GPT的输出比较 3. 高精度延时实现1)实现思路 前言 使用 GPT 实现延时控制以及基于 PWM 实现蜂鸣器发声与频率调节这两…...
【套题】大沥2019年真题——第4题
04.数字圈 题目描述 当我们写数字时会发现有些数字有封闭区域,有的数字没有封闭区域。 数字 0 有一个封闭区域,数字 1、2、 3 都没有封闭区域,数字 4 有一个封闭区域,数字 5 没有封闭区域,数字 6 有一个封闭区域&#…...
idea 安装 proxyai 后的使用方法
1. 可以默认使用ProxyAi 安装后使用如下配置可以进行代码提示 配置 使用示例 2. 这里有必要说一下,这里要选择提供服务的ai 选择后才可以使用ProxyAI或者Custom openAI 3. 可以使用custom openAi, 要自行配置 1)配置 code completions 这是header …...
构建实时、融合的湖仓一体数据分析平台:基于 Delta Lake 与 Apache Iceberg
1. 执行摘要 挑战: 传统数据仓库在处理现代数据需求时面临诸多限制,包括高昂的存储和计算成本、处理海量多样化数据的能力不足、以及数据从产生到可供分析的端到端延迟过高。同时,虽然数据湖提供了低成本、灵活的存储,但往往缺乏…...
数据库的MVCC机制详解
MVCC(Multi-Version Concurrency Control,多版本并发控制)是数据库系统中常用的并发控制机制,它允许数据库在同一时间点保存数据的多个版本,从而实现非阻塞的读操作,提高并发性能。 MVCC的核心思想是&…...
未来与自然的交响:蓉城生态诗篇
故事背景 故事发生在中国四川成都,描绘了未来城市中科技与自然共生的奇迹。通过六个极具创意的生态场景,展现人类如何以诗意的方式重构与自然的连接,在竹海保育、文化传承、能源循环等维度编织出震撼心灵的未来图景。 故事内容 当晨雾在竹纤维…...
【愚公系列】《高效使用DeepSeek》062-图书库存管理
🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…...
汽车软件开发常用的建模工具汇总
目录 往期推荐 1.Enterprise Architect(EA) 2.MATLAB/Simulink 3.TargetLink 4.Rational Rhapsody 5.AUTOSAR Builder 6.PREEvision 总结 往期推荐 2025汽车行业新宠:欧企都在用的工具软件ETAS工具链自动化实战指南<一&am…...
六、继承(二)
1 继承与友元 如果一个基类中存在友元关系,那么这个友元关系能不能继承呢? 例: #include <iostream> using namespace std; class Student; class Person { public:friend void Display(const Person& p, const Student& s)…...
flink部署使用(flink-connector-jdbc)连接达梦数据库并写入读取数据
flink介绍 1)Apache Flink 是一个框架和分布式处理引擎,用于对无界和有界数据流进行有状态计算。Flink 被设计在所有常见的集群环境中运行,以内存执行速度和任意规模来执行计算。 2)在实时计算或离线任务中,往往需要…...