ESP32S3 + IDF 5.2.2 扫描WiFi
ESP32S3 + IDF 5.2.2 扫描WiFi
目录
1 资料
2 通过Wi-Fi库扫描附近的网络
2.1 通过idf命令创建工程
2.2 编写测试用例
2.3 优化测试用例
3 小结
1 资料
ESP-IDF 编程指南 » API 参考 » 连网 API » Wi-Fi 库
2 通过Wi-Fi库扫描附近的网络
2.1 通过idf命令创建工程
idf.py create-project wifi_scan_test
cd wifi_scan_test/
idf.py set-target esp32s3
执行menuconfig命令,配置工程(这里博主使用的是N8R8 版本的ESP32-S3-WROOM-1):
idf.py menuconfig
这里主要需要配置的是Flash和RAM,使其和你的模组、板级匹配。
配置完成后,保存配置,然后执行build:
idf.py save-defconfig
idf.py build
2.2 编写测试用例
完善wifi_scan.h头文件,申明一个wifi_scan()接口,供外部调用。
#ifndef _WIFI_SCAN_H_
#define __WIFI_SCAN_H_#ifdef __cplusplus
extern "C" {
#endifvoid wifi_scan(void);#ifdef __cplusplus
} /* extern "C" */
#endif#endif
在wifi_scan_test.c源文件的app_main()中调用wifi_scan()接口。
在wifi_scan.c源文件中实现wifi_scan()接口。主要需要进行的操作包括:网络接口初始化、配置设备wifi工作在STA模式、启动wifi、扫描附近wifi、获取扫描结果。
网络接口初始化已经在 app_main()中处理了,这里就不用再处理。
/*** @brief 将Wi-Fi初始化为sta并设置扫描方法* @param 无* @retval 无*/
void wifi_scan(void)
{/* 用户初始化STA模式 */esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();assert(sta_netif);/* wifi配置初始化 */wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));memset(ap_info, 0, sizeof(ap_info));/* 设置WIFI为STA模式 */ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));/* 启动WIFI */ESP_ERROR_CHECK(esp_wifi_start());/* 开始扫描附件的WIFI, 并等待扫描结束 */esp_wifi_scan_start(NULL, true);/* 获取扫描结果 */get_wifi_scan_result();return;
}
实现get_wifi_scan_result()接口。这里需要注意esp_wifi_scan_get_ap_num()需要在esp_wifi_scan_get_ap_records()之前调用,否则无法获取到正确的ap_count值。
/*** @brief 获取Wi-Fi扫描结果* @param 无* @retval 无*/
static void get_wifi_scan_result(void)
{number = DEFAULT_SCAN_LIST_SIZE;ap_count = 0;/* 获取上次扫描中找到的AP数量 */ESP_ERROR_CHECK(esp_wifi_scan_get_ap_num(&ap_count));/* 获取上次扫描中找到的AP列表 */ESP_ERROR_CHECK(esp_wifi_scan_get_ap_records(&number, ap_info));/* 打印WIFI扫描结果 */print_wifi_scan_result(ap_count, number);return;
}
实现print_wifi_scan_result()接口。
/*** @brief 身份认证模式* @param authmode :身份验证模式* @retval 无*/
static void print_auth_mode(int authmode)
{switch (authmode) {case WIFI_AUTH_OPEN:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_OPEN");break;case WIFI_AUTH_OWE:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_OWE");break;case WIFI_AUTH_WEP:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WEP");break;case WIFI_AUTH_WPA_PSK:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA_PSK");break;case WIFI_AUTH_WPA2_PSK:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_PSK");break;case WIFI_AUTH_WPA_WPA2_PSK:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA_WPA2_PSK");break;case WIFI_AUTH_WPA2_ENTERPRISE:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_ENTERPRISE");break;case WIFI_AUTH_WPA3_PSK:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA3_PSK");break;case WIFI_AUTH_WPA2_WPA3_PSK:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_WPA2_WPA3_PSK");break;default:ESP_LOGI(TAG, "Authmode \tWIFI_AUTH_UNKNOWN");break;}
}/*** @brief 打印WIFI密码类型* @param pairwise_cipher :密码类型* @param group_cipher :群密码类型* @retval 无*/
static void print_cipher_type(int pairwise_cipher, int group_cipher)
{switch (pairwise_cipher) {case WIFI_CIPHER_TYPE_NONE:ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_NONE");break;case WIFI_CIPHER_TYPE_WEP40:ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_WEP40");break;case WIFI_CIPHER_TYPE_WEP104:ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_WEP104");break;case WIFI_CIPHER_TYPE_TKIP:ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_TKIP");break;case WIFI_CIPHER_TYPE_CCMP:ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_CCMP");break;case WIFI_CIPHER_TYPE_TKIP_CCMP:ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_TKIP_CCMP");break;default:ESP_LOGI(TAG, "Pairwise Cipher \tWIFI_CIPHER_TYPE_UNKNOWN");break;}switch (group_cipher) {case WIFI_CIPHER_TYPE_NONE:ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_NONE");break;case WIFI_CIPHER_TYPE_WEP40:ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_WEP40");break;case WIFI_CIPHER_TYPE_WEP104:ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_WEP104");break;case WIFI_CIPHER_TYPE_TKIP:ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_TKIP");break;case WIFI_CIPHER_TYPE_CCMP:ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_CCMP");break;case WIFI_CIPHER_TYPE_TKIP_CCMP:ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_TKIP_CCMP");break;default:ESP_LOGI(TAG, "Group Cipher \tWIFI_CIPHER_TYPE_UNKNOWN");break;}
}/*** @brief 打印Wi-Fi扫描结果* @param ap_count :实际扫描出的AP数量* @param number :可打印输出的AP信息数量* @retval 无*/
static void print_wifi_scan_result(uint16_t ap_count, uint16_t number)
{/* 打印附件的WIFI信息 */ESP_LOGI(TAG, "wifi scan result, ap_count = %u, number = %u", ap_count, number);for (int i = 0; (i < DEFAULT_SCAN_LIST_SIZE) && (i < ap_count); i++) {ESP_LOGI(TAG, "SSID \t\t%s", ap_info[i].ssid);ESP_LOGI(TAG, "RSSI \t\t%d(level:%d)", ap_info[i].rssi, rssi_to_5_level(ap_info[i].rssi));/* 加密方式 */print_auth_mode(ap_info[i].authmode);/* 密码类型 */if (ap_info[i].authmode != WIFI_AUTH_WEP) {print_cipher_type(ap_info[i].pairwise_cipher, ap_info[i].group_cipher);}ESP_LOGI(TAG, "Channel \t\t%d\n", ap_info[i].primary);}return;
}
2.3 优化测试用例
esp_wifi_scan_start(NULL, true),方式会等到扫描完成后才返回,这样会导致wifi_scan()长时间不返回,更好的处理方式是在这里不等待扫描完成,发起了扫描后就返回调用,在真实的扫描完成事件发生后再去打印扫描结果。这就需要用到IDF的WiFi框架,主要是在默认事件循环中注册相关的事件处理函数 。
/*** @brief Wi-Fi扫描完成事件 处理函数* @param 默认事件处理标准参数列表* @retval 无*/
static void wifi_scan_completed_event_handler(void* arg,esp_event_base_t event_base,int32_t event_id,void* event_data)
{if((event_base == WIFI_EVENT) && (event_id == WIFI_EVENT_SCAN_DONE)) {wifi_event_sta_scan_done_t* scan_done = (wifi_event_sta_scan_done_t*) event_data;ESP_LOGI(TAG, "wifi scan done, status:%lu, number:%u", scan_done->status, scan_done->number);/* 获取wifi扫描结果 */get_wifi_scan_result(); }return;
}/*** @brief 将Wi-Fi初始化为sta并设置扫描方法* @param 无* @retval 无*/
void wifi_scan(void)
{/* 用户初始化STA模式 */esp_netif_t *sta_netif = esp_netif_create_default_wifi_sta();assert(sta_netif);/* wifi配置初始化 */wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();ESP_ERROR_CHECK(esp_wifi_init(&cfg));memset(ap_info, 0, sizeof(ap_info));/* 设置WIFI为STA模式 */ESP_ERROR_CHECK(esp_wifi_set_mode(WIFI_MODE_STA));/* 根据ESP32 Wi-Fi 编程模型, 向 默认事件循环 注册事件处理函数 */esp_event_handler_instance_register(WIFI_EVENT,ESP_EVENT_ANY_ID,&wifi_scan_completed_event_handler,NULL,NULL);/* 启动WIFI */ESP_ERROR_CHECK(esp_wifi_start());/* 开始扫描附件的WIFI, 不等待扫描结束 */esp_wifi_scan_start(NULL, false);/* 扫描结果处理在 wifi_scan_completed_event_handler() 中进行 */return;
}
3 烧录、测试
工程完整代码,可自行下载、测试:
ESP32S3 + IDF5.2.2 wifi扫描 Demo
相关文章:
ESP32S3 + IDF 5.2.2 扫描WiFi
ESP32S3 IDF 5.2.2 扫描WiFi 目录 1 资料 2 通过Wi-Fi库扫描附近的网络 2.1 通过idf命令创建工程 2.2 编写测试用例 2.3 优化测试用例 3 小结 1 资料 在ESP平台基于IDF开发WiFi相关功能,主要就是基于IDF的Wi-Fi库进行二次开发。可供参考的官方资料ÿ…...
鸿蒙开发汇总
写在前面 汇总贴,整理在开发过程中遇到的有趣的、不太好解决的问题,记录一下思考的过程及自己的解决方案。 只做为技术分享,转载请标明出处。 ArkTs-this指向问题 ArkTs-Text组件长度计算不对的问题...
PDF阅读和编辑工具——xodo
本文给大家推荐一款好用的PDF阅读和编辑工具——xodo,一款免费的跨平台PDF阅读、编辑、批注工具。 注意xodo PDF Reader是免费的,xodo PDF Studio是收费的,但是xodo PDF Studio功能多很多。...
QT-------------自定义插件和库
以下是一个使用 Qt 实现图表交互操作的示例,涵盖了自定义图表视图类、不同类型的柱状图和饼图等内容。 实现思路 自定义图表视图类:创建一个从 QChartView 派生的自定义类,用于处理图表的交互操作。主窗口设计初始化:在主窗口中…...
《云原生安全攻防》-- K8s安全配置:CIS安全基准与kube-bench工具
在本节课程中,我们来了解一下K8s集群的安全配置,通过对CIS安全基准和kube-bench工具的介绍,可以快速发现K8s集群中不符合最佳实践的配置项,及时进行修复,从而来提高集群的安全性。 在这个课程中,我们将学习…...
PCA降维算法详细推导
关于一个小小的PCA的推导 文章目录 关于一个小小的PCA的推导1 谱分解 (spectral decomposition)2 奇异矩阵(singular matrix)3 酉相似(unitary similarity)4 酉矩阵5 共轭变换6 酉等价7 矩阵的迹的计算以及PCA算法推导8 幂等矩阵(idempotent matrix)9 Von Neumanns 迹不等式 [w…...
C++ 基础思维导图(一)
目录 1、C基础 IO流 namespace 引用、const inline、函数参数 重载 2、类和对象 类举例 3、 内存管理 new/delete 对象内存分布 内存泄漏 4、继承 继承权限 继承中的构造与析构 菱形继承 1、C基础 IO流 #include <iostream> #include <iomanip> //…...
Excel文件恢复教程:快速找回丢失数据!
Excel文件恢复位置在哪里? Excel是微软开发的电子表格软件,它为处理数据和组织工作提供了便捷。虽然数据丢失的问题在数字时代已经司空见惯,但对于某些用户来说,恢复未保存/删除/丢失的Excel文件可能会很困难,更不用说…...
人脑处理信息的速度与效率:超越计算机的直观判断能力
人脑处理信息的速度与效率:超越计算机的直观判断能力 关键词: #人脑信息处理 Human Brain Information Processing #并行处理 Parallel Processing #视觉信息分析 Visual Information Analysis #决策速度 Decision Speed #计算机与人脑比较 Computer v…...
Spring Boot 中的 classpath详解
Spring Boot 中的 classpath 详解 在开发 Spring Boot 应用时,理解 classpath 的概念对于配置、资源管理以及构建项目非常重要。特别是当我们使用 Maven 打包工具时,项目的资源文件在不同的阶段会被放置到不同的目录。本文将深入探讨 Spring Boot 中的 …...
标准库以及HAL库——按键控制LED灯代码
按键控制LED本质还是控制GPIO,和点亮一个LED灯没什么区别 点亮一个LED灯:是直接控制输出引脚,GPIO初始化推挽输出即可 按键控制LED:是按键输入信号从而控制输出引脚,GPIO初始化推挽输出一个引脚以外还得加一个GPIO上拉输入 但是…...
Spring Cloud (四、服务熔断降级-HyStrix)
spring cloud 概述 分布式系统面临的问题 复杂分布式体系结构中的应用程序有数十个依赖关系,每个依赖关系在某些时候将不可避免地失败。 服务雪崩 多个微服务之间调用的时候,假设微服务A调用微服务B和微服务C,微服务B和微服务C又调用其它的…...
【C语言】如何插入并播放音频文件
在 C 语言中处理音频文件可以是一个有趣且挑战性的任务,尤其是在嵌入式开发或多媒体程序开发中。尽管 C 语言本身并不直接支持音频处理,但可以通过集成第三方库来处理音频文件的解码和播放。本篇博客将介绍如何在 C 语言中插入并播放音频文件,…...
图书项目:整合SSM
步骤: pom文件:导包,写入静态资源导出配置,连接数据库 建包:controller dao/mapper pojo service 配置文件:mybatis-config.xml applicationContext.xml(Spring的配置文件) datab…...
C#OPC(下)
安装 OPC UA SDK 通过 NuGet 包管理器,在 Visual Studio 中右键单击项目名称,选择 “管理 NuGet 程序包”,在搜索框中输入 “OPCFoundation.NetStandard.Opc.Ua”,找到对应的 OPC UA SDK 包后点击 “安装”,将其集成到…...
STLG_01_05_程序设计C语言 - 数据类型概念解析
一、典型例题 下面这些示例,将能够更熟练地运用C语言中的数据类型,加深对数据存储和处理的理解: 示例:确定变量a、b、c和d的数据类型,并说明它们的存储大小和取值范围 short int a -1000; unsigned int b 50000; f…...
使用工厂+策略模式实现去除繁琐的if else
使用工厂策略模式实现去除繁琐的if else 在中间有一个mapstruct的bug,即在修改实体类中的类型时,或者修改属性名字,mapstruct都无法进行转换,会报错,此时需要maven cleanmaven compile即可 前言 在这次的开发中&#…...
Apache MINA 反序列化漏洞CVE-2024-52046
漏洞描述: Apache MINA 是一个功能强大、灵活且高性能的网络应用框架。它通过抽象网络层的复杂性,提供了事件驱动架构和灵活的 Filter 链机制,使得开发者可以更容易地开发各种类型的网络应用。 Apache MINA 框架的 ObjectSerializationDeco…...
SpringSpringBoot常用注解总结
Spring&SpringBoot常用注解总结 1.SpringBootApplication 这个注解是 Spring Boot 项目的基石,创建 SpringBoot 项目之后会默认在主类加上。 SpringBootApplication public class SpringSecurityJwtGuideApplication {public static void main(java.lang.Str…...
设计模式 创建型 原型模式(Prototype Pattern)与 常见技术框架应用 解析
原型模式(Prototype Pattern)是一种创建型设计模式,其核心思想在于通过复制现有的对象(原型)来创建新的对象,而非通过传统的构造函数或类实例化方式。这种方式在需要快速创建大量相似对象时尤为高效&#x…...
cnPuTTY 0.82.0.1—PuTTY Release 0.82中文版本简单说明~~
2024-11-27 官方发布PuTTY 0.82主要包含如下变化: 1.Unicode处理进行了重大重构,以允许使用系统默认配置的字符集/代码页之外的Unicode字符。仅部分实现,其他尚未完成。 2.Unicode版本进行更新:所有字符分析均已更…...
TypeScript 常用类型
文章目录 1. 类型注解2. 原始类型3. 数组类型4. 联合类型5. 类型别名6. 函数类型7. 对象类型8. 接口类型8.1 接口声明8.2 接口继承 9. 元组类型10. 类型断言11. 字面量类型12. 枚举类型12.1 数字枚举12.2 字符串枚举 13. any 类型14. typeof 运算符 1. 类型注解 前言࿱…...
综合能源建模:理论、方法与实践
一、引言 随着全球能源需求的持续增长以及对能源安全、环境保护和可持续性发展的日益关注,综合能源系统(Integrated Energy System,IES)作为一种能够整合多种能源资源、实现能源高效利用和协同优化的解决方案,正逐渐成…...
《摄影艺术创作》慕课期末答案
《摄影艺术创作》慕课期末考试答案 题数 100 人们常说,“百闻不如一见”、“一图胜千言”,这强调的是 的表现力。 A视觉形象 B文字语言 C音响元素 D有声语言 “绘画是加法,摄影是减法”,主要是指无论摄影和绘画,都要…...
MySQL实用SQL示例
创建数据库 CREATE DATABASE zq-cloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;创建表 CREATE TABLE regulatory_firm_category (category_id int NOT NULL AUTO_INCREMENT COMMENT 分类id,自增主键,parent_id int NOT NULL COMMENT 父级id,category_…...
MySQL日志
MySQL日志 文章目录 MySQL日志binlogredoundoredo vs undo binlog binlog日志也就是二进制日志,把对于数据库的写入操作以二进制的形式保存到磁盘中。binlog日志是mysql的逻辑日志,可以理解为记录的是sql日志,由mysql的服务层进行记录&#…...
双目的一些文章学习
文章1 PSMNet https://arxiv.org/pdf/1803.08669PSMNet文章博客PSMNet文章中牵涉到的一些知识,空洞卷积,SPPNet网络,计算视差时用soft argmin代替argmin文章中引入了空洞卷积和SPPNet网络来融合多尺度的信息,又引入3D卷积来增加模…...
国产文本编辑器EverEdit - 批量转码转换行符
1 批量转码&转换行符 1.1 应用场景 如果用户批量在Windows编辑文件,要上传到异构系统,如:Linux,则需要批量转换编码和换行符,此时可以使用EverEdit的批量转码功能。 1.2 使用方法 选择主菜单文档 -> 批量转码…...
NextCloud服务安装与配置教程
NextCloud服务安装与配置教程 什么是 NextCloud: Nextcloud 是一款开源的私有云存储和协作平台,允许用户在自己的服务器上托管数据并管理团队协作。它可以作为一个功能丰富、安全可靠的替代方案,与商业云服务(如 Google Drive、Dropbox)相比提供更多控制和隐私保护。简单来…...
查看 SSD能承载的每秒随机IO次数
查看 SSD能承载的每秒随机IO次数 通常给大家的一个建议就是对于数据库部署的机器,一定要采用SSD固态硬盘,而不要使用机械 硬盘,因为SSD固态硬盘最强大的地方,就是他的随机IO性能非常高。 其次,光是用SSD还不够&#x…...
C# 设计模式(结构型模式):享元模式
C# 设计模式(结构型模式):享元模式 (Flyweight Pattern) 在软件开发中,尤其是在处理大量对象时,我们常常会面临内存和性能上的挑战。当多个对象具有相似的状态时,通常会占用大量的内存资源,从而…...
使用Python,networkx构造有向图及无向图以及图合并等api
使用Python,networkx构造有向图及无向图以及图合并等api 源码图的构造、节点及边的添加等有向图及无向图及多重图 参考 方法名方法作用subgraph(G, nbunch)返回包含nbunch节点的子图union(G, H[, rename])合并G和H图disjoint_union(G, H)合并G和H图cartesian_produc…...
【SOC 芯片设计 DFT 学习专栏 -- 测试向量生成 ATPG (Automatic Test Pattern Generation) 】
文章目录 OverviewATPG 的基本功能ATPG 的工作流程ATPG 应用场景示例示例 1:检测单个信号的 Stuck-at Fault示例 2:针对 Transition Fault 的 ATPG ATPG 工具与常用工具链ATPG 优化与挑战 Overview 本文主要介绍 DFT scan 中的 ATPG 功能。在 DFT (Desi…...
uniapp本地加载腾讯X5浏览器内核插件
概述 TbsX5webviewUTS插件封装腾讯x5webview离线内核加载模块,可以把uniapp的浏览器内核直接替换成Android X5 Webview(腾讯TBS)最新内核,提高交互体验和流畅度。 功能说明 下载SDK插件 1.集成x5内核后哪些页面会由x5内核渲染? 所有plus…...
树莓派之旅-在wsl-x86-64 上进行树莓派的交叉编译
前情提要: 想把自己花里胡哨的终端丢到树莓派上去,可是树莓派算力不够,编译时间过于漫长 交叉编译 定义网上有,懒得复制了,大概就是在本机电脑上编译目标平台的可执行文件 这里的目标平台是树莓派 使用 uname -m …...
JavaScript中Map与Object的区别
在JavaScript中,Map和Object是用于存储键值对数据的两种不同的数据结构(Map是ES6新增的数据结构),它们在构造方式、键的类型以及原型继承等方面存在区别。 一、主要区别 1.构造方式 Map:Map只能通过构造函数new Map…...
基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真
目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于嵌入式无人机UAV通信系统的实时最优资源分配算法matlab仿真。具体参考文献: 考虑使用UAV作为中继辅助节点的设备到设备(D2D)无线信息和…...
计算机网络 (20)高速以太网
一、发展背景 随着计算机技术和网络应用的不断发展,传统的以太网速率已逐渐无法满足日益增长的带宽需求。因此,高速以太网应运而生,它以提高数据传输速率为主要目标,不断推动着以太网技术的发展。 二、技术特点 高速传输ÿ…...
element ui 组件 时间选择器出现转换问题的解决办法
在使用时间选择器添加数据是会出现转换失败问题 vue中代码为: 解决办法: 在el-date-picker中添加 format 和 value-format...
当知识图谱遇上文本智能处理,会擦出怎样的火花?
目前以理解人类语言为入口的认知智能成为了人工智能发展的突破点,而知识图谱则是迈向认知智能的关键要素。达观数据在2018AIIA人工智能开发者大会承办的语言认知智能与知识图谱公开课上,三位来自企业和学术领域的专家分别从不同角度讲述的知识图谱的应用…...
SpringBootWeb案例-1
文章目录 SpringBootWeb案例1. 准备工作1.1 需求&环境搭建1.1.1 需求说明1.1.2 环境搭建 1.2 开发规范 2. 部门管理2.1 查询部门2.1.1 原型和需求2.1.2 接口文档2.1.3 思路分析2.1.4 功能开发2.1.5 功能测试 2.2 前后端联调2.3 删除部门2.3.1 需求2.3.2 接口文档2.3.3 思路…...
在正则表达式中,\1 是用来引用第一个捕获组的内容的。捕获组是用括号 () 包裹的部分
在正则表达式中,\1 是用来引用第一个捕获组的内容的。捕获组是用括号 () 包裹的部分,它们会保存正则表达式匹配到的内容。在替换操作中,\1 就是对第一个捕获组内容的引用,表示你希望将捕获组中的内容放到替换文本中的某个位置。 …...
免费下载 | 2024年具身大模型关键技术与应用报告
这份报告的核心内容涉及具身智能的关键技术与应用,主要包括以下几个方面: 具身智能的定义与重要性: 具身智能是基于物理身体进行感知和行动的智能系统,通过与环境的交互获取信息、理解问题、做出决策并实现行动,产生智…...
[API测试] Karate 之独立运行方式
在 Karate 介绍与快速示例(API测试自动化、模拟、性能测试与UI自动化工具) 这一篇中介绍了如何在Maven项目中,如何结合JUnit 运行 Karate的API测试, 如果是专职的QA人员来测试, 对Java语言或者Maven完全不熟悉的话要怎么来运行 Karate的测试呢? 答案就是使用Karate的独立运…...
WeNet:面向生产的流式和非流式端到端语音识别工具包
这篇文章介绍了WeNet,一个面向生产的开源端到端(E2E)语音识别工具包。WeNet的主要特点和贡献如下: 统一流式和非流式识别:提出了一种名为U2的两阶段框架,能够在单一模型中同时支持流式和非流式语音识别&…...
《我在技术交流群算命》(二):QGraphicsItem怎么写自定义信号啊(QObject多继承顺序问题)
某位群友突然无征兆的抛出以下问题: QGraphicsItem怎么写自定义信号啊 看到这个问题的时候我是比较疑惑的,按鄙人对 Qt 的了解,自定义信号只需: 继承QObject类中加入Q_OBJECT宏声明一个信号并使用 但该群友毕竟也不是一个Qt新手࿰…...
实践深度学习:构建一个简单的图像分类器
引言 深度学习在图像识别领域取得了巨大的成功。本文将指导你如何使用深度学习框架来构建一个简单的图像分类器,我们将以Python和TensorFlow为例,展示从数据准备到模型训练的完整流程。 环境准备 在开始之前,请确保你的环境中安装了以下工…...
实践:事件循环
实践:事件循环 代码示例 console.log(1); setTimeout(() > console.log(2), 0); Promise.resolve(3).then(res > console.log(res)); console.log(4);上述的代码的输出结果是什么 1和4肯定优先输出,因为他们会立即方式堆栈的执行上下文中执行&am…...
基于Python的医院预约挂号与诊断系统
作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码、微信小程序源码 精品专栏:…...
计算机网络基础
文章目录 名词含义1.应用层1.1网络应用原理1.1.1网络应用体系1.1.2进程通信1.1.3可供程序使用的运输服务1.1.4因特网的运输服务1.1.5应用层协议 1.2WEB和HTTP1.2.1HTTP概述1.2.2持续与非持续连接1.2.3报文格式 名词含义 ISP(Internet Service Provider,因特网服务提…...