当前位置: 首页 > news >正文

EPS32基础篇开发

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

开发 EPS32基础篇

  • 前言
  • 一、GPIO输入输出
      • GPIO可设置一下4种状态
      • 代码示例:检测按键,按下时:LED亮,松开时,LED灭
  • 二、PWM输出
      • 示例代码:呼吸灯
  • 三、外部中断
      • 中断触发模式列举:attachInterrupt();函数
      • 代码示例:下降沿检测,计数
  • 四、ADC
      • 代码示例:ADC检测
  • 五、定时器
      • 代码示例:定时器
  • 六、DHT11
      • 代码示例:250ms读取一次温湿度
  • 七、u8g2驱动SSD1306 屏幕


前言


提示:以下是本篇文章正文内容,下面案例可供参考

一、GPIO输入输出

  1. 输入模式 (INPUT):当将 pinMode(pin, INPUT)
    设置为输入模式时,该引脚允许从外部电路读取电平信号(高或低),例如连接到按钮、传感器等。
  2. 输出模式 (OUTPUT):通过 pinMode(pin,
    OUTPUT),你可以控制这个引脚作为通用的输出口,可以驱动LED或其他电子元件。
  3. 模拟输入模式 (ANALOGIN):如果你想要将该引脚作为一个ADC(模拟数字转换器)使用,获取电压值而不是简单的二进制状态,可以使用
    pinMode(pin, ANALOGIN)。

GPIO可设置一下4种状态

// 设置引脚2为输入模式
pinMode(2, INPUT);// 设置引脚3为输出模式
pinMode(3, OUTPUT);// 设置引脚4为输入上拉模式(假设Arduino板支持)
pinMode(4, INPUT_PULLUP);
// 设置引脚4为输入下拉模式(假设Arduino板支持)
pinMode(4, INPUT_PULLDOWN);

代码示例:检测按键,按下时:LED亮,松开时,LED灭

const int buttonPin = 2;  // 定义按键连接的引脚
int ledPin = 13;  // LED灯连接的引脚void setup() {// 初始化串口通信,以便在串口监视器中查看输出Serial.begin(9600);// 设置按键引脚为输入模式pinMode(buttonPin, INPUT_PULLUP);// 设置LED引脚为输出模式pinMode(ledPin, OUTPUT);
}void loop() {// 读取按键状态int buttonState = digitalRead(buttonPin);// 在串口监视器中输出按键状态if (buttonState == HIGH) {Serial.println("Button is NOT pressed");digitalWrite(ledPin, LOW);  // 熄灭LED灯} else {Serial.println("Button is pressed");digitalWrite(ledPin, HIGH);  // 点亮LED灯}// 为了避免串口输出过快,添加一个小延迟delay(100);
}

二、PWM输出

在这里插入图片描述

基本概念和工作原理
PWM(脉宽调制)是一种用于控制电子设备亮度、音量等特性的技术。在Arduino ESP32中,PWM输出功能用于控制LED灯的亮度,或者驱动电机等。它通过在一定时间内改变高电平(通电)和低电平(断电)的时间比例,来控制设备的亮度或工作状态。

  1. 初始化PWM通道
    -------初始化PWM通道包括选择通道和设置相关参数。使用ledcSetup()函数来设置PWM通道的频率和分辨率。例如,要设置LEDC通道0的频率为1000Hz,分辨率为8位,可以调用ledcSetup(0, 1000, 8);。(有两种分辨率设置8位和10位)
  2. 绑定PWM通道到具体引脚
    ------将初始化后的PWM通道绑定到具体的GPIO引脚,需要使用ledcAttachPin()函数。该函数接受两个参数:要绑定的引脚编号和PWM通道编号。例如,要将引脚2绑定到LEDC通道0,可以调用ledcAttachPin(2, 0);。
  3. 设置PWM的占空比
    ------设置PWM的占空比,可以使用ledcWrite()函数。该函数接受两个参数:PWM通道的编号和要设置的占空比数值。例如,要将LEDC通道0的占空比设置为50%,可以调用ledcWrite(0, 128);,因为8位分辨率的PWM信号的占空比取值范围为0到255,所以128代表50%的占空比。

easeInOutQuad函数 是一种非常有用的缓动函数,它可以在多种应用场景中产生平滑、自然的动画效果;

示例代码:呼吸灯

#define LED_PIN 14        // LED连接的引脚
#define LEDC_CHANNEL 0    // PWM通道
#define LEDC_FREQ 1000    // PWM频率
#define LEDC_RESOLUTION 8 // 分辨率// 缓动函数
float easeInOutQuad(float t) {if (t < 0.5) return 2 * t * t;else         return -1 + (4 - 2 * t) * t;
}void setup() {// 初始化PWM通道ledcSetup(LEDC_CHANNEL, LEDC_FREQ, LEDC_RESOLUTION);// 将LED引脚绑定到PWM通道ledcAttachPin(LED_PIN, LEDC_CHANNEL);
}void loop() {// LED亮度渐增for (int i = 0; i <= 255; i++) {float t = i / 255.0;int dutyCycle = easeInOutQuad(t) * 255;ledcWrite(LEDC_CHANNEL, dutyCycle);  // 设置PWM的占空比delay(10);  // 延时10毫秒(根据需要调整)}// LED亮度渐减for (int i = 255; i >= 0; i--) {float t = i / 255.0;int dutyCycle = easeInOutQuad(t) * 255;ledcWrite(LEDC_CHANNEL, dutyCycle);  // 设置PWM的占空比delay(10);  // 延时10毫秒(根据需要调整)}
}

三、外部中断

ESP32的所有GPIO引脚(除了34-39之外)都可以被配置为中断引脚。

中断触发模式列举:attachInterrupt();函数

  1. CHANGE:当外部中断引脚的电平发生变化时触发中断,无论是从低到高还是从高到低。
  2. RISING:当外部中断引脚从低电平变为高电平时触发中断。上升沿
  3. FALLING:当外部中断引脚从高电平变为低电平时触发中断。下降沿
  4. ONLOW:当外部中断引脚处于低电平时触发中断。
  5. ONHIGH:当外部中断引脚处于高电平时触发中断。

代码示例:下降沿检测,计数

// 定义外部中断引脚
#define INTERRUPTION_PIN 14
// 定义用于计数的变量
volatile int count = 0;// 中断服务程序
void IRAM_ATTR handleInterrupt() {// 增加计数count++;
}void setup() {// 初始化串口通信,用于调试Serial.begin(115200);// 配置外部中断引脚为输入模式pinMode(INTERRUPTION_PIN, INPUT_PULLUP);// 确保在attachInterrupt之前,引脚4处于高电平状态digitalWrite(INTERRUPTION_PIN, HIGH);delay(1); // 短暂延时,确保引脚状态稳定// 附加中断服务程序到外部中断引脚attachInterrupt(digitalPinToInterrupt(INTERRUPTION_PIN), handleInterrupt, FALLING);// 输出初始计数Serial.println("Initial count: " + String(count));
}void loop() {// 延时一段时间,然后输出当前计数delay(1000);Serial.println("Current count: " + String(count));
}

四、ADC

使用注意事项:
ESP32的ADC驱动程序API支持ADC1和ADC2。
ADC1有8个通道,连接到GPIO 32-39。
ADC2有10个通道,连接到GPIO 0, 2, 4, 12-15和25-27。但请注意,ADC2与Wi-Fi模块共享资源,因此在使用ADC2时需要注意Wi-Fi状态。
高精度:采用12位分辨率,可以提供较为精确的转换结果。
多通道支持:支持18个模拟输入管脚,满足多种应用场景的需求。
低功耗:部分控制器支持Deep-sleep模式下的低功耗运行。
灵活配置:可配置多种分辨率(如12位、11位、10位、9位)
在这里插入图片描述

代码示例:ADC检测

#include <Arduino.h>const int analogPin = 35; // 定义模拟输入引脚void setup() {Serial.begin(9600); // 初始化串口通信pinMode(analogPin, INPUT); // 设置模拟输入引脚为输入模式analogReadResolution(12); // 设置ADC分辨率为13位analogSetAttenuation(ADC_11db); // 设置ADC衰减倍数为11dB
}void loop() {int sensorValue = analogRead(analogPin); // 读取模拟输入值Serial.println(sensorValue); // 打印读取的ADC值delay(1000); // 延迟1秒
}

五、定时器

在这里插入图片描述

代码示例:定时器


#define LED_PIN 12 // GPIO2,通常内建LED在ESP32上// 创建定时器句柄
hw_timer_t * timer = NULL;// 定义一个标志位用于指示是否要处理定时器事件
volatile bool timerFlag = false;void IRAM_ATTR onTimer() {// 这是定时器中断服务程序 (ISR)timerFlag = true;
}void setup() {Serial.begin(115200);pinMode(LED_PIN, OUTPUT); // 设置LED引脚为输出模式digitalWrite(LED_PIN, LOW); // 初始状态关闭LED// 设置定时器timer = timerBegin(0, 80, true); // 分频因子80意味着定时器计数频率为20MHz/80=250kHztimerAttachInterrupt(timer, &onTimer, true); // 将ISR关联到定时器timerAlarmWrite(timer, 250000, true); // 每250000微秒(即每秒)产生一次中断timerAlarmEnable(timer); // 启用定时器报警
}void loop() {if (timerFlag) {// 处理定时器事件static bool ledState = false;ledState = !ledState; // 反转LED状态digitalWrite(LED_PIN, ledState);Serial.println("Timer triggered!");timerFlag = false; // 重置标志位}
}

六、DHT11

代码示例:250ms读取一次温湿度

#include "DHT.h" // 包含DHT库#define LED_PIN 14         // GPIO12,通常内建LED在ESP32上
#define DHTPIN 4           // DHT11连接到GPIO4
#define DHTTYPE DHT11      // 使用DHT 11// 创建定时器句柄
hw_timer_t * timer = NULL;// 定义一个标志位用于指示是否要处理定时器事件
volatile bool timerFlag = false;// 创建DHT对象
DHT dht(DHTPIN, DHTTYPE);void IRAM_ATTR onTimer() {// 这是定时器中断服务程序 (ISR)timerFlag = true;
}void setup() {Serial.begin(115200);pinMode(LED_PIN, OUTPUT); // 设置LED引脚为输出模式digitalWrite(LED_PIN, LOW); // 初始状态关闭LED// 初始化DHT传感器dht.begin();// 设置定时器timer = timerBegin(0, 80, true); // 分频因子80意味着定时器计数频率为20MHz/80=250kHztimerAttachInterrupt(timer, &onTimer, true); // 将ISR关联到定时器timerAlarmWrite(timer, 250000, true); // 每250000微秒(即每秒)产生一次中断timerAlarmEnable(timer); // 启用定时器报警
}void loop() {if (timerFlag) {// 处理定时器事件static bool ledState = false;ledState = !ledState; // 反转LED状态digitalWrite(LED_PIN, ledState);// 读取温度和湿度float humidity = dht.readHumidity();float temperature = dht.readTemperature();// 检查是否成功读取if (isnan(humidity) || isnan(temperature)) {Serial.println("Failed to read from DHT sensor!");} else {// 打印结果Serial.print("Humidity: ");Serial.print(humidity);Serial.print("%  Temperature: ");Serial.print(temperature);Serial.println("°C");}Serial.println("Timer triggered!");timerFlag = false; // 重置标志位}
}

实验现象
在这里插入图片描述

七、u8g2驱动SSD1306 屏幕

#include <Wire.h>
#include <U8g2lib.h>
#include "DHT.h"// DHT传感器配置
#define DHTPIN 4           // DHT11连接到GPIO4
#define DHTTYPE DHT11      // 使用DHT 11
// 定义OLED的宽度和高度
#define SCREEN_WIDTH 128
#define SCREEN_HEIGHT 64// 定义I2C地址和引脚
#define OLED_SDA_PIN 21
#define OLED_SCL_PIN 22
#define OLED_I2C_ADDRESS 0x3C // SSD1306 I2C 地址,默认为0x3C或0x3D// 创建对象
U8G2_SSD1306_128X64_NONAME_F_SW_I2C u8g2(U8G2_R0, /* clock=*/ OLED_SCL_PIN, /* data=*/ OLED_SDA_PIN, /* reset=*/ U8X8_PIN_NONE);DHT dht(DHTPIN, DHTTYPE);// 创建定时器句柄
hw_timer_t * timer = NULL;
bool timerFlag500ms = false;
void IRAM_ATTR onTimer() {// 这是定时器中断服务程序 (ISR)timerFlag500ms = true;
}
//函数声明
void DISPLAY_Refresh();void setup() {Serial.begin(115200);// 初始化U8g2库u8g2.begin();u8g2.enableUTF8Print(); // 启用UTF-8支持// 初始化DHT传感器dht.begin();// 设置默认字体大小u8g2.setFont(u8g2_font_wqy12_t_gb2312); // 使用支持中文的字体// 设置定时器timer = timerBegin(0, 80, true); // 分频因子80意味着定时器计数频率为20MHz/80=250kHztimerAttachInterrupt(timer, &onTimer, true); // 将ISR关联到定时器timerAlarmWrite(timer, 50000, true); // 每250000微秒(即每秒)产生一次中断timerAlarmEnable(timer); // 启用定时器报警
}void loop() {if(  timerFlag500ms == true){timerFlag500ms = false;DISPLAY_Refresh();}
}
//刷新屏幕显示
void DISPLAY_Refresh()
{// 处理定时器事件// 读取温度和湿度float humidity = dht.readHumidity();float temperature = dht.readTemperature();// 清除屏幕缓冲区u8g2.clearBuffer();// 设置光标位置并打印中文字符u8g2.setCursor(0, 20);u8g2.print("温度:"); // 中文文本u8g2.setCursor(30, 20);u8g2.print( temperature);u8g2.print("℃");u8g2.setCursor(0, 40);u8g2.print("湿度:"); // 中文文本u8g2.setCursor(30, 40);u8g2.print( humidity);u8g2.print("%");// 设置光标位置并打印英文字符u8g2.setCursor(0, 60);u8g2.print("Hello, World!");// 将缓冲区内容发送到显示屏u8g2.sendBuffer();
}

在这里插入图片描述


相关文章:

EPS32基础篇开发

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 开发 EPS32基础篇 前言一、GPIO输入输出GPIO可设置一下4种状态代码示例&#xff1a;检测按键&#xff0c;按下时&#xff1a;LED亮&#xff0c;松开时&#xff0c;LED灭 二、…...

【时时三省】(C语言基础)常见的动态内存错误2

山不在高&#xff0c;有仙则名。水不在深&#xff0c;有龙则灵。 ----CSDN 时时三省 对非动态开辟空间内存使用free释放 示例&#xff1a; 这个arr数组是在栈上的 *p指向的就是arr 对非动态空间也用了free ferr只能在动态开辟空间使用 使用free释放一块动态开辟空间的一部分…...

Harmony OS开发-ArkUI框架速成四

程序员Feri一名12年的程序员,做过开发带过团队创过业,擅长Java相关开发、鸿蒙开发、人工智能等,专注于程序员搞钱那点儿事,希望在搞钱的路上有你相伴&#xff01;君志所向,一往无前&#xff01; 1.图标库 1.1 图标库概述 HarmonyOS 图标库为 HarmonyOS 开发者提供丰富的在线图…...

vulnhub Earth靶机

搭建靶机直接拖进来就行 1.扫描靶机IP arp-scan -l 2.信息收集 nmap -sS -A -T4 192.168.47.132 得到两个DNS; 在443端口处会让我们加https dirb https://earth.local/ dirb https://terratest.earth.local/ #页面下有三行数值 37090b59030f11060b0a1b4e0000000000004312170a…...

ScheduledExecutorService详解

ScheduledExecutorService 是 Java 并发工具包 (java.util.concurrent) 中的一个接口&#xff0c;用于在指定的延迟后执行任务&#xff0c;或者以固定的时间间隔周期性执行任务。它是 ExecutorService 的子接口&#xff0c;提供了更强大的调度功能。 ScheduledExecutorService…...

logback日志文件多环境配置路径

项目中遇到问题&#xff0c;springboot项目 本地jar包部署到现场后&#xff0c;经常遇到现场的日志存放的路径会更改&#xff0c;经过查阅&#xff0c;有两种方式&#xff0c;下面简单说明一下。 一、第一种 启动jar包时 添加参数 --logging.configF:\hgtest\config\logback.x…...

判断一个变量是否为NaN

1. JS代码 NaN&#xff08;不是一个数字&#xff0c;但数据类型为number&#xff09;是执行数学运算没有成功&#xff0c;返回失败的结果。 另外&#xff0c;NaN 不等于 NaN 。 //利用 NaN 是唯一一个不等于自身的特点 function _isNaN(val) {if (val ! val) {return true;}ret…...

Flask 快速入门

1. Flask 简介 1.1 什么是 Flask Flask 是一个用 Python 编写的轻量级 Web 框架&#xff0c;被誉为 微框架。它提供基础功能&#xff0c;如路由、请求处理和模板引擎&#xff0c;但不强迫开发者使用特定库或工具&#xff0c;赋予开发人员高度的自由选择权&#xff0c;以满足不…...

性能测试03|JMeter:断言、关联、web脚本录制

目录 一、断言 1、响应断言 2、json断言 3、持续时间断言 二、关联 1、正则表达式介绍 2、正则表达式提取器 3、Xpath提取器 4、JSON提取器 5、JMeter属性 三、web脚本录制 一、断言 定义&#xff1a;让程序自动判断实际的返回结果是否与预期结果保持一致 自动校验…...

微信小程序调用 WebAssembly 烹饪指南

我们都是在夜里崩溃过的俗人&#xff0c;所幸终会天亮。明天就是新的开始&#xff0c;我们会变得与昨天不同。 一、Rust 导出 wasm 参考 wasm-bindgen 官方指南 https://wasm.rust-lang.net.cn/wasm-bindgen/introduction.html wasm-bindgen&#xff0c;这是一个 Rust 库和 CLI…...

java_配置使用nacos完整示例

参考&#xff1a;49 尚上优选项目-平台管理端-整合ESMQ实现商品上下架-流程分析_哔哩哔哩_bilibili 1. 下载安装nacos https://github.com/alibaba/nacos/releases 2. 解压&#xff0c;运行 PS D:\path/to\nacos-server-2.4.3\nacos\bin> .\startup.cmd -m standalone 3.…...

Go语言性能优化-字符串格式化优化

在 Go 语言中,格式化字符串(例如使用 fmt.Sprintf、fmt.Printf 等函数)确实可能对性能产生影响,尤其是当频繁执行格式化操作时。格式化字符串涉及对格式符的解析和数据类型的转换,这会增加额外的开销。为了减少格式化字符串带来的性能影响,可以采取以下一些优化策略: 1…...

Spring源码分析之事件机制——观察者模式(二)

目录 获取监听器的入口方法 实际检索监听器的核心方法 监听器类型检查方法 监听器的注册过程 监听器的存储结构 过程总结 Spring源码分析之事件机制——观察者模式&#xff08;一&#xff09;-CSDN博客 Spring源码分析之事件机制——观察者模式&#xff08;二&#xff…...

机器学习和深度学习

机器学习&#xff08;Machine Learning&#xff0c;简称 ML&#xff09;和深度学习&#xff08;Deep Learning&#xff0c;简称 DL&#xff09;都是人工智能&#xff08;AI&#xff09;领域的重要技术&#xff0c;它们的目标是使计算机通过数据学习和自主改进&#xff0c;从而完…...

MetaGPT - 多Agent框架

文章目录 一、关于 MetaGPT功能介绍快速开始的演示视频教程 二、安装Pip安装Docker安装 一、关于 MetaGPT MetaGPT 为GPTs分配不同的角色&#xff0c;以形成一个协作实体来完成复杂的任务。 github : https://github.com/geekan/MetaGPTtwitter : https://twitter.com/MetaGP…...

Hyperbolic dynamics

http://www.scholarpedia.org/article/Hyperbolic_dynamics#:~:textAmong%20smooth%20dynamical%20systems%2C%20hyperbolic%20dynamics%20is%20characterized,semilocal%20or%20even%20global%20information%20about%20the%20dynamics. 什么是双曲动力系统&#xff1f; A hy…...

TIM的输入捕获

IC&#xff08;Input Capture&#xff09;输入捕获 输入捕获模式下&#xff0c;当通道输入引脚出现指定电平跳变时&#xff0c;当前CNT的值将被锁存到CCR中 我们使用测周法测频率 void IC_Init(void) {RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);RCC_APB1PeriphCl…...

SCAU期末笔记 - 数据库系统概念往年试卷解析

数据库搞得人一头雾水&#xff0c;题型太多太杂&#xff0c;已经准备摆烂了。就刷刷往年试卷&#xff0c;挂不挂听天由命。 2019年 Question 1 选择题 1. R ∩ S R∩S R∩S等于一下哪个选项&#xff1f; 画个文氏图秒了 所以选A. R ∩ S R − ( R − S ) R∩SR-(R-S) R∩…...

黑马跟学.苍穹外卖.Day01

黑马跟学.苍穹外卖.Day01 苍穹外卖-day01课程内容1. 软件开发整体介绍1.1 软件开发流程1.2 角色分工1.3 软件环境 2. 苍穹外卖项目介绍2.1 项目介绍2.2 产品原型2.3 技术选型 3. 开发环境搭建3.1 前端环境搭建3.2 后端环境搭建3.2.1 熟悉项目结构3.2.2 Git版本控制3.2.3 数据库…...

获取系统启动时间

获取系统启动时间 uptime命令 gbgb:~$ uptime09:29:41 up 2:21, 4 users, load average: 0.00, 0.00, 0.00 gbgb:~$ 这里的up 13 min表示系统已经运行了2个小时13分钟。 date 命令 /proc/uptime gbgb:~$ date -d "$(awk -F. {print $1} /proc/uptime) second ago&…...

Istio 补充 Kubernetes 的不足

1 Istio 补充 Kubernetes 的不足 Kubernetes 强大但无法解决复杂分布式系统中的非功能性需求&#xff0c;如流量路由、协议转换、请求重试和负载均衡。Istio作为Service Mesh&#xff0c;通过独立的代理进程处理这些需求&#xff0c;避免直接修改业务代码。 2. 独立的代理进程…...

以图像识别为例,关于卷积神经网络(CNN)的直观解释

大家读完觉得有意义记得关注和点赞&#xff01;&#xff01;&#xff01; 作者以图像识别为例&#xff0c;用图文而非数学公式的方式解释了卷积神经网络的工作原理&#xff0c; 适合初学者和外行扫盲。 目录 1 卷积神经网络&#xff08;CNN&#xff09; 1.1 应用场景 1.2 起…...

使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用

使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用 目录 使用PyTorch实现基于稀疏编码的生成对抗网络(GAN)在CIFAR-10数据集上的应用1. 引言2. 数据集介绍3. 模型网络结构3.1 网络结构3.2 编码器3.3 生成器3.4 判别器4. 模型优化器与损失函数4.1 优…...

Java重要面试名词整理(十八):Sentinel

文章目录 服务雪崩及其解决方案技术选型: Sentinel or Hystrix 流量治理组件Sentinel**基于SentinelResource注解埋点实现资源保护** Sentinel控制台**限流阈值类型****流控模式****直接****关联** **流控效果**系统规则——系统自适应保护 限流算法**计数器法****滑动时间窗口…...

【微信小程序获取用户手机号

微信小程序获取用户手机号有2种,一种是前端自己解密,一种是获取后发给后端,后端去解密 重点:要在微信公众平台设置里面绑定微信开放平台账号,不然反解不出来用户手机号上代码: <button style"font-size: 16px;" open-type"getPhoneNumber" getphonenumb…...

Profinet转EtherNet/IP网关连接AB PLC的应用案例

某大型制造企业的生产车间同时采用了西门子 S7 - 1500 PLC 作为核心控制系统的一部分&#xff0c;负责主要生产流程的控制与数据处理&#xff1b;而在特定生产环节&#xff0c;由于历史设备遗留或工艺配套需求&#xff0c;存在使用 AB PLC 的情况。这就导致了在整个自动化生产系…...

Maven的依赖管理

1. 依赖管理 依赖管理&#xff0c;可以将有关依赖项的所有信息放在共同的POM中&#xff0c;并对子POM中的工件进行更简单的引用。举个例子&#xff1a; 父POM <project>......<dependencyManagement><dependencies><dependency><groupId>gro…...

验证码识别插件 - captcha-killer

验证码识别插件 - captcha-killer 简介 captcha-killer 是一款用于 Burpsuite 的验证码识别插件。它的主要功能是调用各种验证码识别接口&#xff0c;以便在进行渗透测试时能够自动识别和绕过验证码。这个插件本身并不直接进行验证码的识别&#xff0c;而是通过调用外部的 OC…...

面试题解,Java中的“对象”剖析

一、说一说JVM中对象的内存布局&#xff1f;new一个对象到底占多大内存&#xff1f; 话不多说&#xff0c;看下图&#xff0c;对象的内存布局图 一个对象的内存布局主要由三部分组成&#xff1a;对象头&#xff08;Object Header&#xff09;、实例数据&#xff08;Instance D…...

对计网大题的一些指正(中间介绍一下CDM的原理和应用)

目录 前言&#xff1a; &#xff08;1&#xff09;五层原理体系结构每层功能&#xff1a; 下面是文档的答案&#xff1a; 我在之前的博客里面有介绍过五层原理体系结构&#xff0c; 按理来说&#xff0c;第五层应该是应用层才对&#xff0c;而会话层的功能应该被放到应用层…...

122. 买卖股票的最佳时机 II

https://leetcode.cn/problems/best-time-to-buy-and-sell-stock-ii/description/?envTypestudy-plan-v2&envIdtop-interview-150问题分析&#xff1a; 和买卖股票的最佳时机I这题相比&#xff0c;区别就是可以买多只股票虽然同时只能持有一支&#xff0c;但是我们还是可以…...

qt中如何判断字符串是否为数字,整数,浮点数?

在 Qt 中&#xff0c;可以使用多种方法来判断字符串是否为数字、整数或浮点数。Qt 提供了一些方便的字符串和数值处理函数&#xff0c;可以帮助你实现这些判断。以下是几种常见的方法&#xff1a; 1. 使用 QRegularExpression Qt 提供了 QRegularExpression 类&#xff0c;可…...

《GICv3_Software_Overview_Official_Release_B》学习笔记

1.不同版本的 GIC 架构及其主要功能如下图所示&#xff1a; 2.GICv2m&#xff08;Generic Interrupt Controller Virtualization Model&#xff09;是针对ARM架构的GIC&#xff08;通用中断控制器&#xff09;的一种扩展&#xff0c; GICv2m扩展为虚拟化环境中的中断管理提供了…...

告别Kibana:Elasticsearch 桌面客户端的新变革

告别Kibana&#xff1a;Elasticsearch 桌面客户端的新变革 在大数据处理与分析领域&#xff0c;Elasticsearch 及其相关技术的应用日益广泛。长期以来&#xff0c;Kibana 在数据可视化与查询管理方面占据重要地位&#xff0c;但随着技术的不断发展&#xff0c;用户对于更高效、…...

【蓝桥杯研究生组】第14届Java试题答案整理

试题链接&#xff1a;链接 A题 满足条件的答案有&#xff1a;35813116 public class TianShu {public static void main(String[] args) {int ans 0;// 2000.1.1 - 2000000.1.1// 年份是月份的倍数&#xff0c;也是日的倍数for (int year2000; year<2000000; year) {for …...

链式调用方式重写父类set方法导致fastjson解析的对象属性未赋值

反序列化后发现属性为null 昨天使用fastjson的JSON.parseArray(json, class)反序列化的时候&#xff0c;发现返回的list列表中的对象某个属性为null&#xff0c;但是json字符串里面这个属性是有值的&#xff0c;经过排查发现是因为子类重写了父类的set方法&#xff0c;且返回值…...

[AUTOSAR 基础入门] - AUTOSAR配置工具

返回总目录 前文我们提到了要借助 EasySAR 平台来助力大家更好地融合 AUTOSAR 的理论与实践&#xff0c;让大家能够切实将所学知识转化为实际操作能力。建议大家感兴趣的去注册一下看看。跳转链接&#xff1a;EasySAR EasySAR是昂辉科技基于 AUTOSAR 方法论设计的一款面向汽车…...

鸿蒙开发:实现键值数据库存储

前言 鸿蒙当中数据持久化存储&#xff0c;为我们提供了多种的实现方式&#xff0c;比如用户首选项方式&#xff0c;关系型数据库方式&#xff0c;键值型数据库方式&#xff0c;文件存储方式等等&#xff0c;对于数据量比较的小的&#xff0c;我们直接选择轻量级的用户首选项方式…...

ip属地的信息准确吗?ip归属地不准确怎么办

在数字化时代&#xff0c;IP属地信息成为了我们日常生活中不可或缺的一部分。在各大社交媒体平台上&#xff0c;IP属地信息都扮演着重要的角色。然而&#xff0c;随着技术的不断进步和网络的复杂性增加&#xff0c;IP属地信息的准确性问题也日益凸显。那么&#xff0c;IP属地信…...

CSS——1.优缺点

<!DOCTYPE html> <html><head><meta charset"UTF-8"><title></title><link rel"stylesheet" type"text/css" href"1-02.css"/></head><body><!--css&#xff1a;层叠样式表…...

Android设备使用AOA协议进行主机与配件模式通信

1.使用TYPC-C数据线连接两台华为手机&#xff1a; TYPE-C线&#xff0c;先连接下图右边的ACCESSORY 再连接左边的HOST 此时左边的HOST(白色) 会给右边的ACCESSORY(黑色) 充电 接着打开左连接的HostChart会自动调起授权&#xff0c;然后会启动右边的AccessoryChart USB HOS…...

MySQL中深度分页问题的优化

MySQL中深度分页问题的优化 在MySQL中&#xff0c;使用LIMIT子句进行分页查询时&#xff0c;可能会遇到一个常见的性能问题&#xff1a;当LIMIT子句中的偏移量X很大时&#xff0c;查询速度会显著下降。例如&#xff0c;LIMIT 0,10可能只需要20毫秒&#xff0c;而LIMIT 1000000,…...

5. C语言 常量与宏定义

本章目录: 前言一、什么是常量&#xff1f;1. 整型常量2. 浮点型常量3. 字符常量4. 字符串常量 二、如何定义常量&#xff1f;1. 使用 #define 宏定义2. 使用 const 关键字 三、#define 和 const 的区别四、使用建议1. 使用场景区分2. 避免宏定义的潜在问题 五、特殊用法与小技…...

【mybatis-plus问题集锦系列】mybatis使用xml配置文件实现数据的基础增删改查

简单的数据查询&#xff0c;我们可以在mapper接口里面去实现&#xff0c;但是如果是复杂的查询&#xff0c;我们就可以使用xml配置文件去做&#xff0c; 官网链接xml配置文件 实现效果 实现代码 根据mapper接口的包结构&#xff0c;在resources包里面新建同名同结构的xml文件…...

spring防止重复点击,两种注解实现(AOP)

第一种&#xff1a;EasyLock 简介 为了简化可复用注解&#xff0c;自己实现的注解&#xff0c;代码简单随拿随用 使用方式 1.创建一个注解 Target(ElementType.METHOD) Retention(RetentionPolicy.RUNTIME) Documented public interface EasyLock {long waitTime() default …...

Spring Boot 3 实现 MySQL 主从数据库之间的数据同步

✅ Spring Boot 3 实现 MySQL 主从数据库之间的数据同步 在实际项目中,为了提高 系统的读性能 和 数据的可用性,通常会使用 主从数据库架构。Spring Boot 提供了对 多数据源 的良好支持,可以轻松配置 主从数据库 的数据同步,实现 读写分离。 🎯 方案介绍 我们将通过 Sp…...

WPS-JS宏快速上手

WPS JS宏注意事项 代码后面可以不写分号“ ; ”&#xff1b; 缩进对程序的运行影响不大&#xff0c;但为了易读&#xff08;防止自己以后看不懂&#xff09;&#xff0c;还是乖乖写好&#xff1b; 代码是逐行运行的&#xff0c;意味着下面一行代码错了&#xff0c;前面的代码…...

力扣hot100——堆

215. 数组中的第K个最大元素 快速排序 class Solution { public:int findKthLargest(vector<int>& a, int k) {auto qsort [&](this auto&& qsort, int l, int r) -> void {if (l r) return;int i l - 1, j r 1;int x a[(l r) / 2];/*如果把…...

【小制作】米家模拟手指点击

代码功能解释 这段代码是一个基于Arduino平台的控制程序&#xff0c;主要功能包括&#xff1a; 初始化&#xff1a;设置引脚模式、初始化编码器、舵机和EEPROM。按键检测&#xff1a;处理按钮的单击、双击和长按事件&#xff0c;并根据事件执行相应操作。编码器更新&#xff…...

ubuntu1604 apt镜像源切换

1、如何查看当前源 cat /etc/apt/sources.list less /etc/apt/sources.list 2、apt源修改为阿里镜像&#xff0c;这里ubuntu是1604&#xff1a; deb http://mirrors.aliyun.com/ubuntu/ xenial main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/…...