第14篇ESP32 idf wifi联网_WiFi STA 模式(连接到WIFI)LCD ST7920液晶屏显示

第1篇:Arduino与ESP32开发板的安装方法

第2篇:ESP32 helloword第一个程序示范点亮板载LED

第3篇:vscode搭建esp32 arduino开发环境

第4篇:vscode+platformio搭建esp32 arduino开发环境

​​​​​​第5篇:doit_esp32_devkit_v1使用pmw呼吸灯实验

第6篇:ESP32连接无源喇叭播放音乐《涛声依旧》

第7篇:ESP32连接按钮点亮LED无源喇叭播放声音

​​​​​​第8篇:ESP32连接超声波HC-SR04测距点亮LED无源喇叭播放声音

第9篇:ESP32超声波HC-SR04Arduino类库编写

第10篇:ESP32外部中断功能的使用

第11篇:ESP32vscode_platformio_idf框架helloworld点亮LED

第12篇:ESP32模拟SPI驱动12864LCD_ST7920显示屏

第13篇:ESP32 idf wifi联网使用SNTP同步网络时间LCD ST7920液晶屏显示

第14篇ESP32 idf wifi联网LCD ST7920液晶屏显示

一、ESP32 WIFI介绍
Wi-Fi 库支持配置及监控 ESP32 Wi-Fi 连网功能。

支持配置:

基站模式(即 STA 模式或 Wi-Fi 客户端模式),此时 ESP32 连接到接入点 (AP)。

AP 模式(即 Soft-AP 模式或接入点模式),此时基站连接到 ESP32。

AP-STA 共存模式(ESP32 既是接入点,同时又作为基站连接到另外一个接入点)。

上述模式的各种安全模式(WPA、WPA2 及 WEP 等)。

扫描接入点(包括主动扫描及被动扫描)。

使用混杂模式监控 IEEE802.11 Wi-Fi 数据包。
二、WiFi 的启动(STA)
1. WiFi STA 模式(连接到其他设备的热点WIFI)
(1) 步骤及API简介
① 初始化nvs_flash
② 初始化esp_netif
③ 创建事件循环event_loop —— event_loop是esp32库的一种事件处理模式,中文曰“事件循环”
④ 初始化、配置WiFi并启动
⑤ 事件处理(使用第③步创建的事件循环)

(2)各个函数介绍 

1.初始化nvs_flash

#include <nvs_flash.h>/*** @brief 用于初始化nvs*/
void init_nvs() {/*尝试初始化一次nvs_flash*/esp_err_t err = nvs_flash_init();if(err == ESP_ERR_NVS_NO_FREE_PAGES || err == ESP_ERR_NVS_NEW_VERSION_FOUND){/*第一次初始化失败, 检查错误, 处理错误, 重新初始化*/nvs_flash_erase();err = nvs_flash_init();}ESP_ERROR_CHECK(err);
}

2 .初始化event_loop

#include "esp_event.h"esp_event_loop_create_default();esp_event_handler_instance_register(WIFI_EVENT, ESP_EVENT_ANY_ID,想要用于处理事件的函数, NULL, &wifi_handler);
esp_event_handler_instance_register(IP_EVENT, IP_EVENT_STA_GOT_IP,想要用于处理时间的函数, NULL, &ip_handler));

代码详解:

① esp_event_loop_create_default(); 函数用于创建一个默认的事件循环(同一个esp32程序中可以有多个event_loop,这里使用默认的事件循环)
② esp_event_handler_instance_register() 函数解析见下:
函数名    esp_event_handler_instance_register()
函数原型    esp_err_t esp_event_handler_instance_register(esp_event_base_t event_base, int32_t event_id, esp_event_handler_t event_handler, void *event_handler_arg, esp_event_handler_instance_t *instance)
含义    将事件处理程序的实例注册到默认循环。
返回值    esp_err_t
参数    event_base类型为:esp_event_base_t;表示 事件基,代表事件的大类(如WiFi事件,IP事件等)
event_id类型为:int32_t;表示事件ID,即事件基下的一个具体事件(如WiFi连接丢失,IP成功获取)
event_handler类型为:esp_event_handler_t;表示一个handler函数(模板请见第⑤步)
*event_handler_arg类型为:void;表示需要传递给handler函数的参数
*instance类型为:esp_event_handler_instance_t指针;**[输出]**表示此函数注册的事件实例对象,用于生命周期管理(如删除unrigister这个事件handler)

3.初始化esp_netif

#include "esp_netif.h"esp_netif_t *pEsp_wifi_netif;esp_netif_init();/*创建wifi sta模式的默认netif, 返回一个指针*/
pEsp_wifi_netif = esp_netif_create_default_wifi_sta();/* (不是必须) 这行代码是修改ESP32的主机名, 即WiFi设备名, 连接其他WiFi时显示的名称 */
esp_netif_set_hostname(esp_wifi_netif, "test11");// 不使用汉字

上述代码第 6 行函数esp_netif_create_default_wifi_sta()是必要的,只不过函数返回值可以在不需要的时候忽略(借助这个创建得到的esp_netif对象来修改了主机名为test11,因此保留了这个返回值)

④ 初始化、配置WiFi并启动

#include "driver/wifi.h"
/* 第一步, WiFi初始化 */
/*这个宏 WIFI_INIT_CONFIG_DEFAULT() 可以初始化一 			个wifi_init_config(wifi初始化配置)结构体为默认值
*/
wifi_init_config_t wifi_init_config = WIFI_INIT_CONFIG_DEFAULT();
esp_wifi_init(&wifi_init_config);/* 第二步, WiFi配置 */
wifi_config_t wifi_config = {.sta = {.ssid = "WiFi_SSID",   // wifi名(ssid).password = "password",// wifi密码}
};
esp_wifi_set_config(WIFI_IF_STA, &wifi_config);
esp_wifi_set_mode(WIFI_MODE_STA);  // 设置工作模式/* 第三步, 启动WiFi */
esp_wifi_start();

⑤ 事件处理(使用第③步创建的事件循环)

这里这个函数就是第 ③ 步注册的事件循环handler函数。
handler函数模板如下:

void xxx(void *arg, esp_event_base_t eventBase, int32_t eventID, void *eventData) {
/*函数参数一:arg。表示传递给handler函数的参数,在第三步register函数里声明函数参数二,eventBase,表示事件基,详见第三步函数esp_event_handler_instance_register()解析函数参数三:eventID,表示事件ID,详见第三步函数esp_event_handler_instance_register()解析函数参数四,表示传递给这个事件的数据。例如:例如事件基 IP_EVENT 下的 IP_EVENT_STA_GOT_IP 事件会把获取到的IP地址传递过来,下方示范。
*/
}

下面为WiFi事件处理的一个简单的handler函数。
处理的事件:

事件基    事件    含义
WiFi_EVENT    WIFI_EVENT_STA_START    WiFi启动成功
WiFi_EVENT    WIFI_EVENT_STA_DISCONNECTED    WiFi连接断开/连接失败
IP_EVENT    IP_EVENT_STA_GOT_IP    WiFi连接成功并获取到IP地址
下面给出一个示例及其代码:

当WIFI_EVENT_STA_START发生即WiFi启动成功之后,我们就连接WiFi。
当WIFI_EVENT_STA_DISCONNECT发生即WiFi断开连接/连接失败后,我们就尝试重新连接
当 IP_EVENT_STA_GOT_IP发生即WiFi连接成功并获取到IP地址之后,我们就在屏幕上打印出获取到的IP地址
printf("connected, got ip: "IPSTR"\n", IP2STR(&ip->ip_info.ip));
 

完整代码:

#include "driver/gpio.h"
#include <stdio.h>
#include "unistd.h"
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/event_groups.h"
#include <stddef.h>
#include <time.h>#include <string.h>
#include <time.h>
#include <sys/time.h>
#include "esp_system.h"
#include "esp_event.h"
#include "esp_log.h"
#include "esp_attr.h"
#include "esp_sleep.h"
#include "nvs_flash.h"
#include "esp_sntp.h"
#include "esp_wifi.h"
#include "lcd12864st7920idf.h"// 联网相关的宏
//#define EXAMPLE_ESP_WIFI_SSID      "xx"               // 账号
//#define EXAMPLE_ESP_WIFI_PASS      "@xx68"          // 密码
#define EXAMPLE_ESP_WIFI_SSID "xxx"    // WIFI名字
#define EXAMPLE_ESP_WIFI_PASS "xxx" // WIFI密码#define EXAMPLE_ESP_MAXIMUM_RETRY 5 // wifi连接失败以后可以重新连接的次数
#define WIFI_CONNECTED_BIT BIT0     // wifi连接成功标志位
#define WIFI_FAIL_BIT BIT1          // wifi连接失败标志位
#define AR_SIZE(a) sizeof(a) / sizeof(a[0])unsigned char show1[] = {0xB0, 0xA2, 0xCE, 0xE4, 0xBF, 0xC6, 0xBC, 0xBC}; //阿武科技unsigned char show_we_chat1[] = "wechat:";
unsigned char show_nick1[] = "txwtech";
unsigned char show_wifi_connecting[]="wifi_connecting...";
unsigned char show_wifi_reconnect[]="wifi_reconnecting...";
unsigned char show_wifi_connected[]="wifi_connected";// 联网相关的变量
static EventGroupHandle_t s_wifi_event_group; // 事件组,用于对wifi响应结果进行标记
static int s_retry_num = 0;                   // 记录wifi重新连接尝试的次数static const char *TAG = "esp32idf_title_txwtech";/*** @description: 处理wifi连接和ip分配时候事件的回调函数* @return {*}* @note:*/
static void event_handler(void *arg, esp_event_base_t event_base,int32_t event_id, void *event_data)
{// 如果是wifi station开始连接事件,就尝试将station连接到APif (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_START){esp_wifi_connect();}// 如果是wifi station从AP断连事件else if (event_base == WIFI_EVENT && event_id == WIFI_EVENT_STA_DISCONNECTED){// 如果没有达到最高尝试次数,继续尝试if (s_retry_num < EXAMPLE_ESP_MAXIMUM_RETRY){esp_wifi_connect();s_retry_num++;ESP_LOGI(TAG, "retry to connect to the AP ^_^");}// 如果达到了最高尝试次数,就标记连接失败else{xEventGroupSetBits(s_wifi_event_group, WIFI_FAIL_BIT);}ESP_LOGI(TAG, "connect to the AP fail *_*");}else if (event_base == IP_EVENT && event_id == IP_EVENT_STA_GOT_IP){ip_event_got_ip_t *event = (ip_event_got_ip_t *)event_data;ESP_LOGI(TAG, "got ip:" IPSTR, IP2STR(&event->ip_info.ip));s_retry_num = 0;xEventGroupSetBits(s_wifi_event_group, WIFI_CONNECTED_BIT); // 成功获取到了ip,就标记这次wifi连接成功}
}/*** @description: 用于连接wifi的函数* @return {*}* @note: 这里wifi连接选项设置了使用nvs,会把每次配置的参数存储在nvs中。因此请查看分区表中是否对nvs分区进行了设置*/
void wifi_init_sta(void)
{// 00 创建wifi事件组s_wifi_event_group = xEventGroupCreate();/******************** 01 Wi-Fi/LwIP 初始化阶段 ********************/// 01-1 创建LWIP核心任务ESP_ERROR_CHECK(esp_netif_init());// 01-2 创建系统事件任务,并初始化应用程序事件的回调函数ESP_ERROR_CHECK(esp_event_loop_create_default());// 01-3 创建有 TCP/IP 堆栈的默认网络接口实例绑定 stationesp_netif_create_default_wifi_sta();// 01-4 创建wifi驱动程序任务,并初始化wifi驱动程序wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));// 01-5 注册,用于处理wifi连接的过程中的事件esp_event_handler_instance_t instance_any_id; // 用于处理wifi连接时候的事件的句柄esp_event_handler_instance_t instance_got_ip; // 用于处理ip分配时候产生的事件的句柄// 该句柄对wifi连接所有事件都产生响应,连接到event_handler回调函数ESP_ERROR_CHECK(esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&event_handler,NULL,&instance_any_id));// 该句柄仅仅处理IP_EVENT事件组中的从AP中获取ip地址事件,连接到event_handler回调函数ESP_ERROR_CHECK(esp_event_handler_instance_register(IP_EVENT,IP_EVENT_STA_GOT_IP,&event_handler,NULL,&instance_got_ip));/******************** 02 WIFI配置阶段 ********************/wifi_config_t wifi_config = {.sta = {.ssid = EXAMPLE_ESP_WIFI_SSID,.password = EXAMPLE_ESP_WIFI_PASS,/* Setting a password implies station will connect to all security modes including WEP/WPA.* However these modes are deprecated and not advisable to be used. Incase your Access point* doesn't support WPA2, these mode can be enabled by commenting below line */.threshold.authmode = WIFI_AUTH_WPA2_PSK, // 设置快速扫描模式下能接受的最弱的验证模式.sae_pwe_h2e = WPA3_SAE_PWE_BOTH,         // 设置SAE和PWE(wifi协议)的配置},};// 02-2 配置station工作模式ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));// 02-3 配置ESP_ERROR_CHECK(esp_wifi_set_config(WIFI_IF_STA, &wifi_config));/******************** 03 wifi启动阶段 ********************/// 03-1 启动wifi驱动程序ESP_ERROR_CHECK(esp_wifi_start()); // 会触发回调函数ESP_LOGI(TAG, "wifi_init_sta finished.");/* Waiting until either the connection is established (WIFI_CONNECTED_BIT) or connection failed for the maximum* number of re-tries (WIFI_FAIL_BIT). The bits are set by event_handler() (see above) *//******************** 输出wifi连接结果 ********************/EventBits_t bits = xEventGroupWaitBits(s_wifi_event_group,WIFI_CONNECTED_BIT | WIFI_FAIL_BIT,pdFALSE,pdFALSE,portMAX_DELAY);/* xEventGroupWaitBits() returns the bits before the call returned, hence we can test which event actually* happened. */if (bits & WIFI_CONNECTED_BIT){ESP_LOGI(TAG, "connected to ap SSID:%s password:%s",EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);}else if (bits & WIFI_FAIL_BIT){ESP_LOGI(TAG, "Failed to connect to SSID:%s, password:%s",EXAMPLE_ESP_WIFI_SSID, EXAMPLE_ESP_WIFI_PASS);}else{ESP_LOGE(TAG, "UNEXPECTED EVENT");}/* The event will not be processed after unregister */// 05 事件注销ESP_ERROR_CHECK(esp_event_handler_instance_unregister(IP_EVENT, IP_EVENT_STA_GOT_IP, instance_got_ip));ESP_ERROR_CHECK(esp_event_handler_instance_unregister(WIFI_EVENT, ESP_EVENT_ANY_ID, instance_any_id));vEventGroupDelete(s_wifi_event_group);
}void app_main()
{Initialise();DisplayString(0, 0, show_wifi_connecting, AR_SIZE(show_wifi_connecting)); int mLevel = 0;int temp = 0;esp_err_t ret = nvs_flash_init();if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND){ESP_ERROR_CHECK(nvs_flash_erase());ret = nvs_flash_init();}ESP_ERROR_CHECK(ret);//CLEAR();// 连wifiESP_LOGI(TAG, "ESP_WIFI_MODE_STA");wifi_init_sta();CLEAR();DisplayString(1, 0, show_wifi_connected, AR_SIZE(show_wifi_connected)); while (false){time_t timer; // time_t就是long int 类型//  DisplayString(0, 1, show1, AR_SIZE(show1)); //第一行第三格开始// DisplayString(3, 2, show_wifi_connected, AR_SIZE(show_wifi_connected));       //DisplayString(1, 0, show_wifi_connected, AR_SIZE(show_wifi_connected)); usleep(1000 * 1000 * 1);                                    //微秒,1000微秒=1毫秒,1000毫秒=1秒  }
}

LCD液晶屏初始化:

void Initialise()
{IOT_GPIO_VALUE00 = 0;IOT_GPIO_VALUE11 = 1;gpio_set_direction(lcd_rs, GPIO_MODE_OUTPUT); //gpio_set_direction(lcd_sclk, GPIO_MODE_OUTPUT);gpio_set_direction(lcd_sid, GPIO_MODE_OUTPUT); //// digitalWrite(latchPin, LOW);gpio_set_level(lcd_rs, IOT_GPIO_VALUE00);// delayns();delay_ms(10);WriteCommand(0x30); //功能设定控制字WriteCommand(0x0c); //显示开关控制字WriteCommand(0x01); //清除屏幕控制字WriteCommand(0x06); //进入设定点控制字
}

连接方法参考:

第12篇:ESP32模拟SPI驱动12864LCD_ST7920显示屏

工程代码:

待更新。。。

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

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

相关文章

模方新建工程时,显示空三与模型坐标系不一致怎么解决

答:检查空三xml与模型的metadata.xml的坐标系是否一致&#xff0c;metadata文件是否有在data目录外面。 模方是一款针对实景三维模型的冗余碎片、水面残缺、道路不平、标牌破损、纹理拉伸模糊等共性问题研发的实景三维模型修复编辑软件。模方4.0新增单体化建模模块&#xff0c;…

【C语言】每日一题(半月斩)——day2

目录 一.选择题 1、以下程序段的输出结果是( ) 2、若有以下程序&#xff0c;则运行后的输出结果是&#xff08; &#xff09; 3、如下函数的 f(1) 的值为&#xff08; &#xff09; 4、下面3段程序代码的效果一样吗( ) 5、对于下面的说法&#xff0c;正确的是&#xf…

如何让项目准时上线?

项目为什么容易延期&#xff1f; 1、软件研发是一项创造性工作 项目延期是一种普遍现象&#xff0c;管理者最为头疼的一个问题。但是外人并不理解。明明是你们自己做的计划&#xff0c;怎么总会出现这么多问题。说到底&#xff0c;这是由于我们的工作特性决定的。我们做的是一…

Kotlin

函数命名 针对您目前为止学到的 Kotlin 知识&#xff0c;下面给出了一些相关样式指南&#xff1a; 函数名称应采用驼峰式大小写形式&#xff0c;并且应该是动词或动词短语。每个语句都应单独占一行。左花括号应出现在函数开始行的末尾。左花括号前应有一个空格。 变量声明 变…

Laravel5使用box/spout扩展,大文件导出CSV文件

一、背景 早期开发的系统&#xff0c;使用laravel框架&#xff0c;版本V5.4&#xff0c;项目经理导出 3 年的数据&#xff0c;由于数据量较大&#xff0c;浏览器卡死。一次性无法导出&#xff0c;某位程序员告知按月去导出&#xff0c;之后在拼凑&#xff0c;这。。搁谁受的了…

SpingMVC之拦截器使用详解

拦截器概述 SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter&#xff0c;用于对处理器进行预处理和后处理。 过滤器和拦截器区别 过滤器&#xff1a;依赖于servlet容器。在实现上基于函数回调&#xff0c;可以对几乎所有请求进行过滤&#xff0c;但是缺点是一个过…

千兆以太网硬件设计及链路层 MAC 协议格式

以太网系列文章&#xff1a; &#xff08;1&#xff09;千兆以太网硬件设计及链路层 MAC 协议格式 &#xff08;2&#xff09;千兆以太网网络层 ARP 协议的原理与 FPGA 实现 &#xff08;3&#xff09;CRC校验代码原理 文章目录 前言一、以太网 MAC 层接口介绍1.MII 接口2.GMII…

重建大师提交空三后引擎状态是等待,怎么开启?

答&#xff1a;图片中这是在自由网空三阶段&#xff0c;整个AT都是等待中&#xff0c;可以修改任务目录和监控目录看一下&#xff0c;先设置引擎&#xff0c;再提交空三。

备考11月份PMP考试还来得及吗?

2023年共有4次PMP考试&#xff0c;分别是3月、5月、8月、11月&#xff0c;现在仅剩11月还有一次考试&#xff0c;也是今年可参加的最后一次PMP考试。那么&#xff0c;现在备考11月份PMP考试还来得及吗&#xff1f; 答案是肯定的。现在开始备考11月PMP考试&#xff0c;时间是很…

可变参数JAVA

public class Main {public static void main(String[] args) {//方法形参的个数是可以变化的//格式&#xff1a;属性类型...名字System.out.println(getSum(1,2,3,4,5,6,7,8));}//通过键值对对象来遍历&#xff1b;public static int getSum(int a,int...args){//可变参数;int…

IDEA2023.2.1取消空包隐藏,切换包结构(Compact Middle Packages)

解决2023版idea的包结构 取消勾选即可。 取消勾选Compact Middle Packages选项后&#xff0c;再创建包时&#xff0c;即可自动创建树形结构。 仅供学习使用&#xff01;

IP地址,子网掩码,默认网关,DNS讲解

IP地址&#xff1a;用来标识网络中一个个主机&#xff0c;IP有唯一性&#xff0c;即每台机器的IP在全世界是唯一的。 子网掩码&#xff1a;用来判断任意两台计算机的ip地址是否属于同一子网络的根据。最为简单的理解就是两台计算机各自的ip地址与子网掩码进行and运算后&#x…

黑马头条 热点文章实时计算、kafkaStream

热点文章-实时计算 1 今日内容 1.1 定时计算与实时计算 1.2 今日内容 kafkaStream 什么是流式计算kafkaStream概述kafkaStream入门案例Springboot集成kafkaStream 实时计算 用户行为发送消息kafkaStream聚合处理消息更新文章行为数量替换热点文章数据 2 实时流式计算 2…

医学访问学者申请四点规划建议

医学领域一直以来都是人类社会的重要组成部分&#xff0c;而作为一名有志于成为一名医学领域的访问学者&#xff0c;您需要明确自己的目标并做好充分准备。知识人网小编将为您提供四点规划建议&#xff0c;以帮助您成功申请医学访问学者的机会。 第一点&#xff1a;明确研究方向…

OOM分析实战

OOM分析&实战 OOM分析&实战引言&#xff1a;一、JVM内存结构二、JVM OOM错误情况三、实践案例一案例二案例三 四、总结五、分析工具推荐六、参考文献 OOM分析&实战 引言&#xff1a; 在Java开发中&#xff0c;随着应用程序变得越来越复杂&#xff0c;内存管理问题…

PaddleSeg学习3——使用PP-LiteSeg模型对道路进行分割

使用PP-LiteSeg模型对道路进行分割 1 准备环境2 样本3 准备config文件4 模型训练5 模型预测5.1 python预测5.2 C++预测5.3 预测结果展示1 准备环境 参考上一篇:Windows PaddleSeg c++部署 2 样本 车道线分割实战的智能车数据集 #标签 背景:0, 0.05 单实线-黄

Debian11之稳定版本Jenkins安装

系统要求 机器要求 256 MB 内存&#xff0c;建议大于 512 MB 10 GB 的硬盘空间&#xff08;用于 Jenkins 和 Docker 镜像&#xff09;软件要求 Java 8 ( JRE 或者 JDK 都可以) Docker &#xff08;导航到网站顶部的Get Docker链接以访问适合您平台的Docker下载 Maven 用于构…

【循环冗余码检错示例】

接收方怎么看有错没有 余数为0就是无错&#xff01;

使用Jquery实现轮播图

虽然轮播图已经有很多第三方库&#xff0c;但是手动实现一个还是能够对javascript有一个更深的理解。 今天就讲一讲如何使用Jquery实现轮播图 首先html结构如下&#xff1a; <div class"scroll"> // 结合下面的css样式可以知道&#xff1a; 下面是五张轮播图…

低代码框架开发平台厂家:做好产品,实现流程化办公!

在新的发展时代&#xff0c;低代码技术平台拥有诸多优势特点&#xff0c;成为广大企业实现降本、增效办公效率的得力助手。什么样的低代码框架开发平台厂家值得信任与青睐&#xff1f;都有哪些主要产品&#xff1f;为了帮助大家了解这一讯息&#xff0c;一起来了解流辰信息低代…