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

RA4M2开发(3)----读取ISL29035数据,并在OLED上显示,串口打印

概述

HS3003是一种数字式温湿度传感器,可以测量环境中的温度和湿度。读取HS3003的数据需要连接传感器到一个数据采集系统,一般是微处理器或者单片机。以下是一个简单的读取HS3003数据的概述:

  1. 连接电路:将HS3003传感器连接到微处理器或单片机的GPIO引脚。需要注意HS3003的电气特性,比如供电电压和信号电平等。
  2. 发送命令:发送读取温湿度数据的命令到HS3003传感器。具体的命令格式和通信协议需要参考HS3003的数据手册。
  3. 接收数据:等待HS3003传感器回应,并接收传感器发送的数据。HS3003传感器的数据一般是经过数字转换后的二进制数据,需要解析成温湿度值。
  4. 解析数据:将接收到的二进制数据解析成温湿度值。具体的解析算法需要参考HS3003的数据手册,一般涉及到位移、位运算、符号扩展等操作。
  5. 处理数据:对得到的温湿度值进行处理,比如校准、滤波、显示等。
  6. 循环读取:根据需要循环执行步骤2到5,以实现连续读取HS3003传感器的温湿度数据。
    需要注意的是,HS3003传感器的使用和读取数据需要按照数据手册的规范和建议操作,否则可能会导致数据精度降低、传感器损坏等问题。

硬件准备

首先需要准备一个开发板,这里我准备的是芯片型号R7FAM2AD3CFP的开发板:
在这里插入图片描述

样品申请

https://www.wjx.top/vm/wBbmSFp.aspx#

IIC配置

配置RA4M2的I2C接口,使其作为I2C master进行通信。
对于OLED的IIC配置,可以查看往期的博客。
查看HS3003说明书,最小电路图如下所示。
在这里插入图片描述

由于需要读取HS3003数据,需要使用IIC接口,这里使用PMOD2上的接口(P410和P411)。
在这里插入图片描述

点击Stacks->New Stack->Connectivity -> I2C Master(r_sci_i2c)。
在这里插入图片描述

查看说明书可以得知,ISL29035的地址为0x44(1000100)。
在这里插入图片描述

设置IIC的配置。
在这里插入图片描述

R_SCI_I2C_Open()函数原型

在这里插入图片描述

R_SCI_I2C_Open()函数为执行IIC初始化,开启配置如下所示。

        /* Initialize the I2C module */err = R_SCI_I2C_Open(&g_i2c0_ctrl, &g_i2c0_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS == err);

R_SCI_I2C_Write()函数原型

在这里插入图片描述

R_SCI_I2C_Write()函数是向IIC设备中写入数据,写入格式如下所示。

    err = R_SCI_I2C_Write(&g_i2c0_ctrl, &g_i2c_tx_buffer[0], I2C_BUFFER_SIZE_BYTES, false);assert(FSP_SUCCESS == err);

R_SCI_I2C_Read()函数原型

在这里插入图片描述

R_SCI_I2C_Read()函数是向IIC设备中读取数据,读取格式如下所示。

    err = R_SCI_I2C_Write(&g_i2c0_ctrl, &g_i2c_tx_buffer[0], I2C_BUFFER_SIZE_BYTES, false);assert(FSP_SUCCESS == err);

sci_i2c_master_callback()回调函数

对于数据是否发送完毕,可以查看是否获取到I2C_MASTER_EVENT_TX_COMPLETE字段。
在这里插入图片描述

/* Callback function */
i2c_master_event_t i2c_event1 = I2C_MASTER_EVENT_ABORTED;
void sci_i2c_master_callback0(i2c_master_callback_args_t *p_args)
{/* TODO: add your own code here */i2c_event1 = I2C_MASTER_EVENT_ABORTED;if (NULL != p_args){/* capture callback event for validating the i2c transfer event*/i2c_event1 = p_args->event;}
}

HS3003写数据

对于HS3003写数据,手册上的操作方式如下所示。
设备地址+操作地址+数据
在这里插入图片描述

初始化程序如下所示。

void Humiture_HS3003_writeRegister( uint8_t reg_address, uint8_t *buffer, uint8_t len)
{err = R_SCI_I2C_Write(&g_i2c0_ctrl, buffer, len, false);assert(FSP_SUCCESS == err);/* Since there is nothing else to do, block until Callback triggers*///while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms)while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event1) && timeout_ms1>0){R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MICROSECONDS);timeout_ms1--;}if (I2C_MASTER_EVENT_ABORTED == i2c_event1){__BKPT(0);}/* Read data back from the I2C slave */i2c_event1 = I2C_MASTER_EVENT_ABORTED;timeout_ms1           = 100000;}

HS3003读数据

对于读取数据,可以直接在发送地址后,进行读取,当时需要注意再发送完地址后,要有等待时间。
在这里插入图片描述

读取操作函数如下所示,先发送操作地址,在进行读取,这里是一次读取32位。

uint32_t Humiture_HS3003_readRegister32(uint8_t reg_address) {uint32_t value;uint8_t data[4];timeout_ms1           = 100000;/* Read data from I2C slave */err = R_SCI_I2C_Read(&g_i2c0_ctrl, &data, 0x04, false);assert(FSP_SUCCESS == err);while ((I2C_MASTER_EVENT_RX_COMPLETE != i2c_event1) && timeout_ms1){R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MILLISECONDS);timeout_ms1--;}if (I2C_MASTER_EVENT_ABORTED == i2c_event1){__BKPT(0);}i2c_event1 = I2C_MASTER_EVENT_ABORTED;timeout_ms1           = 100000;value=data[0];value<<=8;value|=data[1];value<<=8;value|=data[2];value<<=8;value|=data[3];return value;
}

HS3003初始化

首先需要将HS3003进行唤醒,默认情况下是睡眠模式。
唤醒需要对Measurement Requests (MR)进行操作,MR命令用于将HS300x从休眠模式唤醒。通过发送7位从地址和第8位=0 (WRITE)来发起测量请求。

在这里插入图片描述

对于不同精度的数据读取,等待时间是不同的。

在这里插入图片描述

对于等待的时间,可以参考下图红框的数据。
在这里插入图片描述

HS3003读取温湿度

对于读取数据,可以直接在发送地址后,进行读取,当时需要注意再发送完地址后,要有等待时间。
在这里插入图片描述

读取操作函数如下所示,先发送操作地址,在进行读取。

void Humiture_HS3003_init(void)
{Humiture_HS3003_writeRegister(HS300X_ADR,NULL,0);}
//读取原始的数据
uint32_t Humiture_HS3003_ReadData_Raw(uint8_t resolution )
{uint8_t rx_buf[ 4 ];uint32_t data=0;Humiture_HS3003_init();//唤醒//8bit->1.2ms//10bit->2.72ms//12bit->9.10ms//14bit->33.90msif(resolution==8)R_BSP_SoftwareDelay(1200U, BSP_DELAY_UNITS_MICROSECONDS);else if(resolution==10)R_BSP_SoftwareDelay(2720U, BSP_DELAY_UNITS_MICROSECONDS);else if(resolution==12)R_BSP_SoftwareDelay(9100U, BSP_DELAY_UNITS_MICROSECONDS);elseR_BSP_SoftwareDelay(34U, BSP_DELAY_UNITS_MILLISECONDS);data=Humiture_HS3003_readRegister32(HS300X_ADR);return data;
}

对于读取的数据,需要进行处理。
湿度在后两个字节的15-2位,温度在前2个字节的13-0位。
在这里插入图片描述

对于原始的数据,要对他进行处理。
在这里插入图片描述

    Data=Humiture_HS3003_ReadData_Raw(14);Temp = (float)( (Data & 0xFFFF) >> 2);//只要低十六位Temp = Temp*HS300X_TEMP_MULTY*165-40;//HS300X_TEMP_MULTY->0.00006163516(1/(2^14-1) )Humidity = (float)( (Data >> 16) &0x3FFF );//只要高十六位,且最高2位不要Humidity = Humidity*HS300X_HUMD_MULTY*100;//HS300X_HUMD_MULTY->0.00006163516(1/(2^14-1) )

实现效果

正常显示数据。
在这里插入图片描述

同时串口也可以打印数据。
在这里插入图片描述

主程序

#include "hal_data.h"
#include <stdio.h>
#include "Humiture_HS3003.h"
#include "oled.h"
#include "bmp.h"
FSP_CPP_HEADER
void R_BSP_WarmStart(bsp_warm_start_event_t event);
FSP_CPP_FOOTERfsp_err_t err = FSP_SUCCESS;
volatile bool uart_send_complete_flag = false;
/* Callback function */
void user_uart_callback(uart_callback_args_t *p_args)
{/* TODO: add your own code here */if(p_args->event == UART_EVENT_TX_COMPLETE){uart_send_complete_flag = true;}
}#ifdef __GNUC__                                 //串口重定向#define PUTCHAR_PROTOTYPE int __io_putchar(int ch)
#else#define PUTCHAR_PROTOTYPE int fputc(int ch, FILE *f)
#endif
PUTCHAR_PROTOTYPE
{err = R_SCI_UART_Write(&g_uart9_ctrl, (uint8_t *)&ch, 1);if(FSP_SUCCESS != err) __BKPT();while(uart_send_complete_flag == false){}uart_send_complete_flag = false;return ch;
}
int _write(int fd,char *pBuffer,int size)
{for(int i=0;i<size;i++){__io_putchar(*pBuffer++);}return size;
}/* Callback function */
i2c_master_event_t i2c_event1 = I2C_MASTER_EVENT_ABORTED;
void sci_i2c_master_callback0(i2c_master_callback_args_t *p_args)
{/* TODO: add your own code here */i2c_event1 = I2C_MASTER_EVENT_ABORTED;if (NULL != p_args){/* capture callback event for validating the i2c transfer event*/i2c_event1 = p_args->event;}
}/* Callback function */
i2c_master_event_t i2c_event = I2C_MASTER_EVENT_ABORTED;
void sci_i2c_master_callback(i2c_master_callback_args_t *p_args)
{i2c_event = I2C_MASTER_EVENT_ABORTED;if (NULL != p_args){/* capture callback event for validating the i2c transfer event*/i2c_event = p_args->event;}
}uint32_t  timeout_ms1 = 100000;
uint32_t  timeout_ms = 100000;
float Temp=0.0f;
float Humidity=0.0f;
uint32_t Data=0;//温湿度原始数据
/*******************************************************************************************************************//*** main() is generated by the RA Configuration editor and is used to generate threads if an RTOS is used.  This function* is called by main() when no RTOS is used.**********************************************************************************************************************/
void hal_entry(void)
{/* TODO: add your own code here *//* Initialize the I2C module */err = R_SCI_I2C_Open(&g_i2c3_ctrl, &g_i2c3_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS == err);OLED_Init();            //初始化OLEDOLED_Clear()    ;OLED_ShowCHinese(0,0,0);//记OLED_ShowCHinese(16,0,1);//帖OLED_ShowString(0,2,"Temp:",16);OLED_ShowString(0,4,"Humidity:",16);/* Initialize the I2C module */err = R_SCI_I2C_Open(&g_i2c0_ctrl, &g_i2c0_cfg);/* Handle any errors. This function should be defined by the user. */assert(FSP_SUCCESS == err);Humiture_HS3003_init();/* Open the transfer instance with initial configuration. */fsp_err_t err = R_SCI_UART_Open(&g_uart9_ctrl, &g_uart9_cfg);assert(FSP_SUCCESS == err);printf("hello world!\n");while(1)
{Data=Humiture_HS3003_ReadData_Raw(14);Temp = (float)( (Data & 0xFFFF) >> 2);//只要低十六位Temp = Temp*HS300X_TEMP_MULTY*165-40;//HS300X_TEMP_MULTY->0.00006163516(1/(2^14-1) )Humidity = (float)( (Data >> 16) &0x3FFF );//只要高十六位,且最高2位不要Humidity = Humidity*HS300X_HUMD_MULTY*100;//HS300X_HUMD_MULTY->0.00006163516(1/(2^14-1) )OLED_Clear()    ;OLED_ShowCHinese(0,0,0);//记OLED_ShowCHinese(16,0,1);//帖OLED_ShowString(0,2,"Temp:",16);OLED_ShowString(0,4,"Humidity:",16);if(Temp<10 && Temp>=0)//0<=Temp<10{OLED_ShowNum(48,2,(int)(Temp),1,16);//显示Temp整数OLED_ShowString(56,2,".",16);OLED_ShowNum(64,2,(int)(Temp*100) - ( ((int)Temp) *100),1,16);//显示Temp小数if(( (int)(Temp*100) - ( ((int)Temp) *100) ) <10  )OLED_ShowString(64,2,"0",16);}else if (Temp>=10 && Temp<100)//10<=Temp<100{OLED_ShowNum(48,2,(int)(Temp),2,16);//显示Temp整数OLED_ShowString(64,2,".",16);OLED_ShowNum(72,2,(int)(Temp*100) - ( ((int)Temp) *100),2,16);//显示Temp小数if(( (int)(Temp*100) - ( ((int)Temp) *100) ) <10  )OLED_ShowString(72,2,"0",16);}else if (Temp>=100 && Temp<1000)//100<=Temp<1000{OLED_ShowNum(48,2,(int)(Temp),3,16);//显示Temp整数OLED_ShowString(72,2,".",16);OLED_ShowNum(80,2,(int)(Temp*100) - ( ((int)Temp) *100),2,16);//显示Temp小数if(( (int)(Temp*100) - ( ((int)Temp) *100) ) <10  )OLED_ShowString(80,2,"0",16);}if(Humidity<10)//0<=Humidity<10{OLED_ShowNum(72,4,(int)(Humidity),1,16);//显示Humidity整数OLED_ShowString(80,4,".",16);OLED_ShowNum(88,4,(int)(Humidity*100) - ( ((int)Humidity) *100),2,16);//显示Temp小数if(( (int)(Humidity*100) - ( ((int)Humidity) *100) ) <10  )OLED_ShowString(88,4,"0",16);}else if(Humidity>10 && Humidity<100){OLED_ShowNum(72,4,(int)(Humidity),2,16);//显示Humidity整数OLED_ShowString(88,4,".",16);OLED_ShowNum(96,4,(int)(Humidity*100) - ( ((int)Humidity) *100),2,16);//显示Temp小数if(( (int)(Humidity*100) - ( ((int)Humidity) *100) ) <10  )OLED_ShowString(96,4,"0",16);}printf("Temp=%.2f,Humidity=%.2f\n",Temp,Humidity);R_BSP_SoftwareDelay(1000U, BSP_DELAY_UNITS_MILLISECONDS);
}#if BSP_TZ_SECURE_BUILD/* Enter non-secure code */R_BSP_NonSecureEnter();
#endif
}

Humiture_HS3003.c

/** Humiture_HS3003.c**  Created on: 2023年2月19日*      Author: a8456* 交流群:615061293*/
#include "hal_data.h"
#include "Humiture_HS3003.h"
extern fsp_err_t err;
extern int  timeout_ms1;
extern  i2c_master_event_t i2c_event1 ;uint32_t Humiture_HS3003_readRegister32(uint8_t reg_address) {uint32_t value;uint8_t data[4];timeout_ms1           = 100000;/* Read data from I2C slave */err = R_SCI_I2C_Read(&g_i2c0_ctrl, &data, 0x04, false);assert(FSP_SUCCESS == err);while ((I2C_MASTER_EVENT_RX_COMPLETE != i2c_event1) && timeout_ms1){R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MILLISECONDS);timeout_ms1--;}if (I2C_MASTER_EVENT_ABORTED == i2c_event1){__BKPT(0);}i2c_event1 = I2C_MASTER_EVENT_ABORTED;timeout_ms1           = 100000;value=data[0];value<<=8;value|=data[1];value<<=8;value|=data[2];value<<=8;value|=data[3];return value;
}void Humiture_HS3003_writeRegister( uint8_t reg_address, uint8_t *buffer, uint8_t len)
{err = R_SCI_I2C_Write(&g_i2c0_ctrl, buffer, len, false);assert(FSP_SUCCESS == err);/* Since there is nothing else to do, block until Callback triggers*///while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event) && timeout_ms)while ((I2C_MASTER_EVENT_TX_COMPLETE != i2c_event1) && timeout_ms1>0){R_BSP_SoftwareDelay(1U, BSP_DELAY_UNITS_MICROSECONDS);timeout_ms1--;}if (I2C_MASTER_EVENT_ABORTED == i2c_event1){__BKPT(0);}/* Read data back from the I2C slave */i2c_event1 = I2C_MASTER_EVENT_ABORTED;timeout_ms1           = 100000;}void Humiture_HS3003_init(void)
{Humiture_HS3003_writeRegister(HS300X_ADR,NULL,0);}//读取原始的数据
uint32_t Humiture_HS3003_ReadData_Raw(uint8_t resolution )
{uint8_t rx_buf[ 4 ];uint32_t data=0;Humiture_HS3003_init();//唤醒//8bit->1.2ms//10bit->2.72ms//12bit->9.10ms//14bit->33.90msif(resolution==8)R_BSP_SoftwareDelay(1200U, BSP_DELAY_UNITS_MICROSECONDS);else if(resolution==10)R_BSP_SoftwareDelay(2720U, BSP_DELAY_UNITS_MICROSECONDS);else if(resolution==12)R_BSP_SoftwareDelay(9100U, BSP_DELAY_UNITS_MICROSECONDS);elseR_BSP_SoftwareDelay(34U, BSP_DELAY_UNITS_MILLISECONDS);data=Humiture_HS3003_readRegister32(HS300X_ADR);return data;
}

Humiture_HS3003.h

/** Humiture_HS3003.h**  Created on: 2023年2月19日*      Author: a8456* 交流群:615061293*/#ifndef HUMITURE_HS3003_H_
#define HUMITURE_HS3003_H_#define HS300X_ADR  0x44
#define HS300X_HUMD_MULTY           0.00006163516
#define HS300X_TEMP_MULTY           0.00006163516//uint8_t HuMIture_HS3003_readRegister8(uint8_t reg_address);
uint32_t Humiture_HS3003_readRegister32(uint8_t reg_address);
void Humiture_HS3003_writeRegister( uint8_t reg_address, uint8_t *buffer, uint8_t len);void Humiture_HS3003_init(void);
uint32_t Humiture_HS3003_ReadData_Raw(uint8_t resolution);#endif /* HUMITURE_HS3003_H_ */

相关文章:

RA4M2开发(3)----读取ISL29035数据,并在OLED上显示,串口打印

概述 HS3003是一种数字式温湿度传感器&#xff0c;可以测量环境中的温度和湿度。读取HS3003的数据需要连接传感器到一个数据采集系统&#xff0c;一般是微处理器或者单片机。以下是一个简单的读取HS3003数据的概述&#xff1a; 连接电路&#xff1a;将HS3003传感器连接到微处…...

密码复杂度

检查账户认证失败次数限制 修复建议&#xff1a; 配置SSH方式账户认证失败次数限制 编辑/etc/pam.d/sshd文件 在auth行下方添加&#xff1a; auth required pam_tally.so deny5 unlock_time600 no_lock_time 在account行下方添加&#xff1a; account required pam_tally.s…...

Python打印() 中的 SEP 参数

默认情况下&#xff0c;Python 中 print&#xff08;&#xff09; 函数的参数之间的分隔符是空格&#xff08;softspace 功能&#xff09;&#xff0c;可以根据我们的选择对其进行修改并设置为任何字符、整数或字符串。“sep”参数用于实现相同的目的&#xff0c;它仅在python …...

AG9300方案替代|替代AG9300设计Type-C转VGA方案|CS5260设计原理图

AG9300方案替代|替代AG9300设计Type-C转VGA方案|CS5260设计原理图 安格 AG9300是一款实现USB TYPE-C到VGA数据的单片机解决方案转换器。ALGOLTEK AG9300支持USB Type-C显示端口交替模式&#xff0c;AG9300可以将视频和音频流从USB Type-C接口传输到VGA端口。在AG9300&#xff0…...

力扣-文章浏览

大家好&#xff0c;我是空空star&#xff0c;本篇带大家了解一道简单的力扣sql练习题。 文章目录前言一、题目&#xff1a;1148. 文章浏览二、解题1.正确示范①提交SQL运行结果2.正确示范②提交SQL运行结果3.正确示范③提交SQL运行结果4.其他总结前言 一、题目&#xff1a;1148…...

Unity提取场景中的静态文本

有些单机项目开发的时候没有做本地文本配置文件&#xff0c;全部写死在场景的对象上面&#xff0c;简单记录一下怎么提取场景里面的文本并且写入到配置文件里面using System.Collections.Generic;using System.IO;using TMPro;using UnityEditor;using UnityEngine;using Unity…...

Netty常用核心类说明

MessageToByteEncoder MessageToByteEncoder是一个抽象编码器&#xff0c;子类可重写encode方法把对象编码为ByteBuf输出。 MessageToByteEncoder继承自ChannelOutboundHandlerAdapter&#xff0c;encode在出站是被调用。 public class MyMessageEncoder extends MessageToB…...

ingress服务

user.default.svc.cluster.local是集群内部service的dns地址&#xff0c;集群外部想访问集群里面的service&#xff0c;可以通过LoadBalaner和NodePort。LoadBalaner可以获得一个公网ip&#xff1b;NodePort在宿主机上开一个端口&#xff0c;访问这个端口会把报文实际的转发到集…...

java 抽象类 详解

目录 一、抽象类概述&#xff1a; 二、抽象方法 : 1.概述 : 2.应用 : 3.特点 : 三、抽象类特点 : 1.关于abstract关键字 : 2.抽象类不能被实例化&#xff0c;只能创建其子类对象 : 3.抽象类子类的两个选择 &#xff1a; 四、抽象类的成员 : 1.成员变量 : 2.成员方…...

MySQL的安装(详解)

文章目录前言一、yum方式安装1、下载并安装MySQL2、 启动MySQL数据库3、查看MySQL初始密码4、登录数据库5、修改MySQL默认密码6、授予root用户远程管理权限7、输入exit退出数据库二、rpm安装方式1、检查2、卸载mariadb3、安装4、启动5、密码总结前言 本教程为Linux下安装mysql的…...

界面控件DevExpress WinForm——轻松构建类Visual Studio UI(二)

DevExpress WinForm拥有180组件和UI库&#xff0c;能为Windows Forms平台创建具有影响力的业务解决方案。DevExpress WinForm能完美构建流畅、美观且易于使用的应用程序&#xff0c;无论是Office风格的界面&#xff0c;还是分析处理大批量的业务数据&#xff0c;它都能轻松胜任…...

BabylonJS之放烟花

一&#xff1a; 技术调研 1. 方案一&#xff1a;ParticleSystem 用ParticleSystem来实现每一束的烟花效果&#xff0c;如果浏览器支持WebGL2功能&#xff0c;使用GPUParticleSystem性能会有极大的提升。 优点&#xff1a; 烟花效果易实现且效果好。 缺点&#xff1a; 每一个P…...

vue3 布局样式的原理

style scoped <style scoped > 它的 CSS 只作用于当前组件中的元素&#xff0c;如果子组件只有一个根元素&#xff0c;也会被渗透 原理&#xff1a; 当我们再组建中使用scoped时&#xff0c;vue会自动为组件中所有元素生成一个随机的属性&#xff0c;形如&#xff1a;da…...

Qt程序使用路径方式和注意事项

Qt程序使用路径方式和注意事项 更多精彩内容&#x1f449;个人内容分类汇总 &#x1f448;&#x1f449;Qt开发经验 &#x1f448;文章目录Qt程序使用路径方式和注意事项[toc]前言一、Windows下Qt程序使用路径1.准备工作2.测试结果二、Linux下Qt程序使用路径1.准备工作2.测试结…...

和日期相关的代码和bug——一道力扣题中的小发现

目录 Day of the Week 题目大意 常规方法 Python代码 Golang代码 C代码 基姆拉尔森公式 Python代码 Golang代码 C代码 使用库函数 Python代码 Golang代码 C代码 Day of the Week Given a date, return the corresponding day of the week for that date. The inp…...

如何在2023年学习编程并获得开发者工作

丢下自负 许多进入软件开发领域的人都是从最底层开始的&#xff0c;你可能会获得“初级开发者”的头衔。每天面临的问题是&#xff1a;我有十年的专业经验了。我不是个入门员工。但尽管过去的工作经验丰富&#xff0c;我仍然是个入门级的开发者&#xff0c;我还是个新手。别总…...

Python实战之小说下载神器(三)排行榜所有小说:最全热门小说合集,总有一款适合你,好多好多好多超赞的小说...(源码分享学习)

前言 这次的是一个系列内容 给大家讲解一下何一步一步实现一个完整的实战项目案例系列之 小说下载神器&#xff08;三&#xff09;&#xff08;GUI界面化程序&#xff09; 多线程采集小说下载、采集排行榜所有小说 哈喽&#xff01;大家上午好啦&#xff0c;我是爱看小说的栗子…...

前端监控之用户行为监控实践1(数据收集)

前文对前端监控进行了简单介绍&#xff0c;起因是因为当前做的一个需求&#xff0c;老板要看当前项目的uv、pv信息。其实这是非常简单的统计。 但在最开始接到这个需求&#xff0c;却难倒我了。 现在进行简单的复盘&#xff0c;记录一下实现方法。 一、数据记录 用户行为从大…...

【网络原理7】认识HTTP

目录 一、HTTP协议的位置 二、HTTP协议的特点&应用场景 三、HTTP协议的格式的查看 Fiddler下载与使用 ​编辑 如何查看HTTP请求消息 ​编辑 如何查看HTTP响应数据包 如何默认开启HTTPS的解析功能 四、HTTP的请求数据包的格式含义 第一部分&#xff1a;请求行&…...

SPI实验

目录 一、SPI 简介 二、硬件原理 ECSPI3_SCLK ECSPI3_MISO和ECSPI3_MOSI ECSPI3_SS0 三、I.MX6U ECSPI 简介 ECSPIx_RXDATA ECSPIx_TXDATA ECSPIx_CONREG ECSPIx_CONFIGREG ECSPIx_PERIODREG​编辑 ECSPIx_STATREG 四、ICM-20608 简介 五、代码编写 1、创建文件及文…...

ARM PMU外部接口与性能监控寄存器详解

1. ARM性能监控寄存器外部接口深度解析性能监控单元(PMU)是现代处理器架构中用于硬件性能分析的核心模块&#xff0c;它通过一组可编程计数器实时捕获处理器微架构层面的各类事件。在ARMv8/v9架构中&#xff0c;PMU不仅可以通过系统寄存器访问&#xff0c;还提供了标准化的外部…...

一次搞懂内存取证:用Volatility3和Cobalt Strike分析工具复现VNCTF‘来一把紧张刺激的CS’

实战内存取证&#xff1a;从Volatility3到Cobalt Strike信标分析全解析 在网络安全事件响应中&#xff0c;内存取证往往是发现高级威胁的最后一道防线。当攻击者使用文件无落地的技术时&#xff0c;传统的磁盘取证可能一无所获&#xff0c;而内存中却保留着攻击行为的完整痕迹。…...

‌2026智慧校园规划必读:如何在预算吃紧下选到高性价比方案‌

✅作者简介&#xff1a;合肥自友科技 &#x1f4cc;核心产品&#xff1a;智慧校园平台(包括教工管理、学工管理、教务管理、考务管理、后勤管理、德育管理、资产管理、公寓管理、实习管理、就业管理、离校管理、科研平台、档案管理、学生平台等26个子平台) 。公司所有人员均有多…...

AI率总超标?2026年AI写作辅助网站排行榜权威发布,轻松定稿不是梦!

写论文效率低、熬夜赶稿、查重不过关&#xff1f;别慌&#xff01;2026 年最新 AI 论文写作工具合集来了&#xff0c;覆盖选题、大纲、初稿、润色、降重、格式、文献引用全流程&#xff0c;帮你精准匹配最适合的学术助手&#xff0c;彻底告别论文内耗&#xff01;&#x1f3c6;…...

defx.nvim 安装与配置完全教程:从零开始搭建高效文件管理系统 [特殊字符]

defx.nvim 安装与配置完全教程&#xff1a;从零开始搭建高效文件管理系统 &#x1f680; 【免费下载链接】defx.nvim :file_folder: The dark powered file explorer implementation for neovim/Vim8 项目地址: https://gitcode.com/gh_mirrors/de/defx.nvim defx.nvim …...

如何用WaveTools终极优化《鸣潮》游戏性能:从卡顿到丝滑的完整指南

如何用WaveTools终极优化《鸣潮》游戏性能&#xff1a;从卡顿到丝滑的完整指南 【免费下载链接】WaveTools &#x1f9f0;鸣潮工具箱 项目地址: https://gitcode.com/gh_mirrors/wa/WaveTools 如果你正在玩《鸣潮》却频繁遭遇帧率波动、画面卡顿或操作延迟&#xff0c;那…...

告别手动复制!用这个自定义编辑器脚本一键备份/克隆Unity Terrain Data

告别手动复制&#xff01;用这个自定义编辑器脚本一键备份/克隆Unity Terrain Data在Unity关卡设计和技术美术的工作流中&#xff0c;地形数据的灵活复用往往意味着反复的手动操作——导出高度图、备份材质参数、复制植被分布&#xff0c;每个环节都可能成为效率瓶颈。想象这样…...

ROS机器人仿真架构解析:基于wpr_simulation的移动操作机器人技术实现

ROS机器人仿真架构解析&#xff1a;基于wpr_simulation的移动操作机器人技术实现 【免费下载链接】wpr_simulation 项目地址: https://gitcode.com/gh_mirrors/wp/wpr_simulation 在机器人操作系统(ROS)开发领域&#xff0c;硬件依赖和测试成本一直是制约算法迭代效率的…...

Visual C++运行库一键安装指南:彻底解决Windows应用依赖问题

Visual C运行库一键安装指南&#xff1a;彻底解决Windows应用依赖问题 【免费下载链接】vcredist AIO Repack for latest Microsoft Visual C Redistributable Runtimes 项目地址: https://gitcode.com/gh_mirrors/vc/vcredist 你是否曾经遇到过打开软件时弹出"缺少…...

3步免费解锁Cursor Pro:告别设备限制,永久享受AI编程助手高级功能

3步免费解锁Cursor Pro&#xff1a;告别设备限制&#xff0c;永久享受AI编程助手高级功能 【免费下载链接】cursor-free-vip [Support 0.45]&#xff08;Multi Language 多语言&#xff09;自动注册 Cursor Ai &#xff0c;自动重置机器ID &#xff0c; 免费升级使用Pro 功能: …...