ESP8266-01S、手机、STM32连接

news2025/2/28 3:49:12

1、ESP8266-01S的工作原理

1.1、AP和STA

ESP8266-01S为WIFI的透传模块,主要模式如下图:

上节说到,我们需要用到AT固件进行局域网应用(ESP8266连接的STM32和手机进行连接)。

  1. ESP8266为一个WiFi透传模块,和蓝牙透传模块具有主从两种工作模式一样,也具有两种工作模式:STA模式(Station)和AP模式(Access Point),一般WiFi模块还会有一个STA+AP模式,即可以在两种模式下切换的状态。
  2. AP模式下,WiFi模块产生热点,提供无线接入服务,允许其它无线设备接入,提供数据访问,一般的无线路由/网桥工作在该模式下。该模式对应TCP传输协议中的服务端(TCP Server)。
  3. STA模式下,WiFi模块为连接到无线网络的终端(站点),可以连接到AP,一般无线网卡工作在STA模式下。该模式对应TCP传输协议中的客户端(TCP Client)。

1.2、TCP/UDP/透传的概念,以及他们之间的不同点和相同点

TCP:

  1. TCP是一种面向连接的,提供可靠交付服务和全双工通信的,基于字节流的端到端的传输层通信协议。
  2. TCP在传输数据之前必须先建立连接,数据传输结束后要释放连接。
  3. 每一条TCP连接只能有2个端点,故TCP不提供广播或多播服务。
  4. TCP提供可靠交付,通过TCP连接传输的数据,无差错、不丢失、不重复、并且按序到达。
  5. TCP是面向字节流的。虽然应用进程和TCP的交互是一次一个数据块(大小不等),但TCP把应用程序交下来的数据看成仅仅是一连串的无结构的字节流。TCP并不知道所传输的字节流的含义。


UDP:

  1. UDP是一种无连接的,尽最大努力交付的,基于报文的端到端的传输层通信协议。
  2. UDP,在发送数据之前不需要建立连接。
  3. UDP不保证可靠交付,主机不需要位置复杂的连接状态。
  4. UDP是面向报文的。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的的边界,即应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。在接收端,UDP一次交付一个完整的报文。
  5. UDP没有拥塞控制,网络出现的拥塞不会使源主机的发送速率降低。
  6. UDP支持一对一、一对多、多对一和多对多的交互通信。
  7. UDP的首部开销小,只有8个字节,比TCP的20个字节的首部要短。


透传:

  1. 透传,又称透明传输,具体来说就是“输入即输出(如从WiFi模块串口输入的字符会透传到服务器端)”,数据不改变,不同协议之间的转换(如串口到WiFi、蓝牙等)由模块完成。使用者无需关心内部具体实现,因此模块对于使用者是“透明的”、似乎不存在的(因为可无视中间的实现原理)。一个高度封装的模块,应该隐藏内部实现细节,仅对外提供使用接口

1.3、固件

固件:

固件是写入存储器中的程序,在单片机中就是写到Flash中的程序。即烧写进程序的flash(ROM),硬件根据该固件运行。

1.4、连接方式

 2、AT指令原理和配置

esp8266-01s在烧入固件后根据固件运行,固件中固定有配置和反馈指令,对其通过串口发送对应的指令,esp8266-01s会进行响应的配置。所以固件要根据自己的实际情况进行选择。你发对应指令,模块就会做相应的工作。

使用 AT 指令配置 ESP8266

通过 AT 指令,您可以对 ESP8266 进行各种配置,包括 Wi-Fi 连接、服务器设置等。以下是常用的 AT 指令以及如何使用它们配置 ESP8266 的步骤。

2.1、准备工作
  • 硬件连接:

    • 将 ESP8266 模块与 USB 转 TTL 适配器连接。
    • 确保正确接线(TX 到 RX,RX 到 TX,VCC 接 3.3V,GND 接地)。
  • 环境准备:

    • 使用串口工具(如 PuTTY、CoolTerm 或 Arduino Serial Monitor)打开串口通讯。
2.2、配置步骤AP模式
2.2.1 建立AP------------------------------------------------------------------------------------------------
1) 测试连接,串口对esp8266进行发送
AT
  • 如果返回 OK,表示与 ESP8266 的串口连接正常。

2) 查看固件版本
AT+GMR
  • 返回当前固件信息。

3) 设置工作模式
  • STA 模式(连接 Wi-Fi):
AT+CWMODE=1
  • AP 模式(创建热点):

AT+CWMODE=2
  • 混合模式(同时作为热点和客户端):
AT+CWMODE=3 
  • 查看工作模式
AT+CWMODE?
4) 设置AP名称

AT+CWSAP="Your_AP_Name","Your_Password",5,3

  • Your_AP_Name: 自定义的热点名称。
  • Your_Password: 热点的 Wi-Fi 密码(8 到 64 个字符)。
  • 5: 信道,值从 1 到 13。选择一个不冲突的信道。
  • 3: 安全模式(0:开放,1:WEP,2:WPA-PSK,3:WPA2-PSK,4:WPA/WPA2-PSK)。

5). 启动 AP
  • 设置 AP 后立即启动:
    • 上述 AT+CWSAP 指令执行后,ESP8266 会自动启动您配置的 AP。
6)获取 AP 配置信息
  • 查看当前 AP 配置:

AT+CWSAP?

7) 关闭 AP
  • 关闭当前 AP:

AT+CWQAP

8)查看当前连接状态
  • 检查已连接的客户端:

AT+CIPSTAMAC?
  • 用于获取已连接设备的 MAC 地址。
9)查看已接入设备的IP信息

AT+CWLIF

10)获取本设备IP

AT+CIFSR

2.2.2、Server 方法收发(可连接多设备)-----------------------------------------------------------------
1)、开启多连接模式

AT+CIPMUX=1

0-单路连接模式,1-多路连接模式(Server模式)

2)、创建服务器

AT+CIPSERVER=1,8080

  • 0-关闭 server 模式,1-开启 server 模式
  • 端口号,缺省值为 333

(1) AT+ CIPMUX=1 时才能开启服务器;关闭 server 模式需要重启

(2)开启 server 后自动建立 server 监听,当有 client 接入会自动按顺序占用一个连接。

3)关闭连接,关闭 server 模式需要重启,重启使用AT+ CIPMUX=1,重启后创建服务器AT+CIPSERVER=1,8080(例如)

AT+CIPSERVER=0

关闭服务器

 通过 fireTools.exe连接

串口助手 软件工具等
链接:百度网盘 请输入提取码    提取码:3p7y

可以看到连接失败,ESP8266默认ip为192.168.4.1,通过指令AT+CIFSR可以查看ESP8266自身的IP

需要设置超时时间,否则无数据时会超时自动断连,断联后需要重开服务器:需要再发一遍

AT+CIPMUX=1,AT+CIPSERVER=1,8080

4)设置超时时间s为单位,(开启服务器后才能设置)

AT+CIPSTO=2880

服务器超时时间,0~2880,单位为 s

5)然后电脑连接ESP8266-01S

此处网络为配置AP时设置的名称和密码,我们此处举例为ESP_01S;12345678,电脑连接模块的WIFI,然后通过 fireTools.exe调试助手连接TPC服务器(模块)

串口助手 软件工具等(下载工具),在TCP网络调试菜单进行调试
链接:百度网盘 请输入提取码    提取码:3p7y

协议类型表示上位机使用端的类型,为客户机;服务器ip即esp8266-01s的ip,默认为192.168.4.1,端口为自己配置的8080。esp8266的配置可通过AT+CWSAP?命令查看,esp8266的IP可通过AT+CIFSR查看。

如图,连接和断连都会显示

6)查看当前的设备

AT+CIPSTATUS

返回:STATUS: + CIPSTATUS:,,,,

  • :连接的 id 号 0-4
  • :字符串参数,类型 TCP 或 UDP
  • :字符串参数,IP 地址
  • :端口号
  • : 0-本模块做 client 的连接,1-本模块做 server 的连接

7)向连接设备发送数据

AT+CIPSEND=0,6(设置指令) (通过上一条指令 AT+CIPSTATUS 得知 ID=0)

1)单路连接时(+CIPMUX=0),指令为:AT+CIPSEND=

2)多路连接时(+CIPMUX=1) (Server模式),指令为:AT+CIPSEND= 0,6

多路连接参数1:0表示多路连接的设备0

多路连接参数2:6表示向指定设备发送6Byte数据,若发送字节数小于6,则在发送数据结尾每次会自动补充0D 0A,直到足够6Byte。若发送字节数大于6,则截取前6BYTE。最大长度为 2048。

ESP8266收到此命令后先换行返回”>”,然后开始接收串口数据

1是电脑调试助手发送给ESP8266的数据,发了两次,

发送完毕ESP826601S会返回Recv 6 bytes SEND OK,如果未建立连接或连接被断开,返回 ERROR

8)接收数据

从设备(电脑模拟的),可直接发送数据,接收到

发送接收也可以使用ASIIC,一个汉字占2BYTE(好像是)

2.2.3 Client收发数据方法-----------------------------------------------------------------------------------------
1)关闭Server服务器(不管之前开没开启过,都可以走一下这个流程)

AT+CIPSERVER=0

指令:AT+CIPSERVER=[,]                 

说明::0-关闭 server 模式,1-开启 server 模式

:端口号,缺省值为 333

响应:OK

说明:(1) AT+ CIPMUX=1 时才能开启服务器;关闭 server 模式需要重启

(2)开启 server 后自动建立 server 监听,当有 client 接入会自动按顺序占用一个连

接。

AT+RST重启一下

2)使用其他设备或调试助手创建服务器,示例使用fireTools.exe

3)开启多路连接模式(一个客户机(esp826601s)可以连接多个服务器)

AT+CIPMUX=1

0-单路连接模式,1-多路连接模式

4)建立TCP连接

AT+CIPSTART=0,"TCP","192.168.4.2",8080

表示建立id为0的TCP连接,后面是服务器ip和端口号

指令:

1)单路连接时(+CIPMUX=0),指令为:AT+CIPSTART= ,,

2)多路连接时(+CIPMUX=1),指令为:AT+CIPSTART=,,,

响应:

如果格式正确且连接成功,返回 OK,否则返回 ERROR

如果连接已经存在,返回 ALREAY CONNECT

说明:

0-4,连接的 id 号

字符串参数,表明连接类型,”TCP”-建立 tcp 连接,”UDP”-建立 UDP 连接

字符串参数,远程服务器 IP 地址

远程服务器端口号

5)向服务器发送数据

AT+CIPSEND=0,10(通过上一条指令 AT+CIPSTART 设置为 ID=0)

指令:

1)单路连接时(+CIPMUX=0),指令为:AT+CIPSEND=

2)多路连接时(+CIPMUX=1) ,指令为: AT+CIPSEND=  , 

响应:

收到此命令后先换行返回”>”,然后开始接收串口数据

每次发送会自动补0D、0A,当数据长度满 length 时发送数据。

如果未建立连接或连接被断开,返回 ERROR

如果数据发送成功,返回 SEND OK

说明:

需要用于传输连接的 id 号 0-4

数字参数,表明发送数据的长度,最大长度为 2048

2.3. 其他常用指令
  • 重启 ESP8266
AT+RST
  • 设置无回显模式(有时需要):
ATE0
  • 恢复工厂设置

AT+RESTORE

二、实际操作

1、ESP8266配置

1.1使用安可信助手连接ESP8266模块(方法见上一文章,需要烧写固件等)

1.2指令配置

1、AT,测试


2、AT+CWMODE=2,AP模式配置

3、AT+RST,复位

4、AT+CWSAP="Your_AP_Name","Your_Password",1,3      ,配置ESP8266的WIFI热点名称和密码

  • Your_AP_Name: 自定义的热点名称。
  • Your_Password: 热点的 Wi-Fi 密码(8 到 64 个字符)。
  • 5: 信道,值从 1 到 13。选择一个不冲突的信道。
  • 3: 安全模式(0:开放,1:WEP,2:WPA-PSK,3:WPA2-PSK,4:WPA/WPA2-PSK)。

5、AT+CIPMUX=1 ,开启多连接模式

6、AT+CIPSERVER=1,a (为端口号,默认333),ESP8266-01S作为server进行连接

  • 0-关闭 server 模式,1-开启 server 模式
  • 端口号,缺省值为 333

9、完成以上指令后,基本上就设置完成了,当用手机app连接时,app随便下一个网络调试助手就行,选择TCP客户端,连接时需要8266模块的ip,和之前设置的端口,默认端口为333,模块的ip可以通过指令查询:AT+CIFSR

一般默认192.168.4.1

2、手机作为客户端进行连接,当用手机app连接时,app随便下一个网络调试助手就行

若与与手机端在一定时间内不通信,则模块会断开此连接,默认为3分钟。

2.1、设置超时时间

2.2、连接

手机直接连接刚才创建的服务器,和指定的端口,通过

多路连接,连接的通断会显示,好像是0-4通道,默认从0开始

通过指令可以查看当前连接的设备通道和ip和端口等。

AT+CIPSTATUS

返回:STATUS: + CIPSTATUS:,,,,

  • :连接的 id 号 0-4
  • :字符串参数,类型 TCP 或 UDP
  • :字符串参数,IP 地址
  • :端口号
  • : 0-本模块做 client 的连接,1-本模块做 server 的连接​​​​​​​​​​​​​​

2.3、收发

手机直接发送,ESP826601S可以接收到

ESP接收到数据

ESP826601S发送:

 AT+CIPSEND=0,6

多路连接参数1:0表示多路连接的设备0

多路连接参数2:6表示向指定设备发送6Byte数据,若发送字节数小于6,则在发送数据结尾每次会自动补充0D 0A,直到足够6Byte。若发送字节数大于6,则截取前6BYTE。最大长度为 2048。下图发送的两次1。

ESP8266收到此命令后先换行返回”>”,然后开始接收串口数据

1是电脑调试助手发送给ESP8266的数据,发了两次,

发送完毕ESP826601S会返回Recv 6 bytes SEND OK,如果未建立连接或连接被断开,返回 ERROR

测试完成表明连接已经成功,功能无异常!

三、ESP8266-01S----STM32----手机

以STM32串口3为例

  • 串口3,esp8266模块连接串口3资源
  • 定时器5,为什么使用定时器?在esp8266接受数据产生中断时,因为我们并不知道接收的有多少数据,什么时候接收结束,所以采用一个定时器,当定时器清零前下一个数据到来表示是连续数据,重置定时器,若定时器时间到了还没有接收到下一条数据则表示数据接收完成,可进入定时器中断服务程序进行数据处理,添加接收完成标志位,如下代码

定时器5初始化:


#include "timer5.h"
extern u8 start3;//串口中断接收完成标志

//定时器5中断服务程序		    
void TIM5_IRQHandler(void)
{ 	
	if (TIM_GetITStatus(TIM5, TIM_IT_Update) != RESET)//是更新中断
	{	 			   
		start3=1;	//标记串口数据接收完成
		TIM_ClearITPendingBit(TIM5, TIM_IT_Update  );  //清除TIM5更新中断标志    
		TIM_Cmd(TIM5, DISABLE);  //关闭TIM5
	}	    
}
 
//通用定时器中断初始化
//这里始终选择为APB1的2倍,而APB1为36M
//arr:自动重装值。
//psc:时钟预分频数		 
void TIM5_Int_Init(u16 arr,u16 psc)
{	
	NVIC_InitTypeDef NVIC_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;

	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM5, ENABLE);//TIM7时钟使能    
	
	//定时器TIM7初始化
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	
	TIM_TimeBaseStructure.TIM_Prescaler =psc; //设置用来作为TIMx时钟频率除数的预分频值
	TIM_TimeBaseStructure.TIM_ClockDivision = TIM_CKD_DIV1; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM5, &TIM_TimeBaseStructure); //根据指定的参数初始化TIMx的时间基数单位
 
	TIM_ITConfig(TIM5,TIM_IT_Update,ENABLE ); //使能指定的TIM5中断,允许更新中断

	 	  
	NVIC_InitStructure.NVIC_IRQChannel = TIM5_IRQn;
	NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//抢占优先级0
	NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;		//子优先级1
	NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;			//IRQ通道使能
	NVIC_Init(&NVIC_InitStructure);	//根据指定的参数初始化VIC寄存器
	
}
	 

串口3初始化:

//初始化IO 串口3
//bound:波特率	  

void usart3_init(u32 bound)
{  

    USART_InitTypeDef USART_InitStructure;  
    NVIC_InitTypeDef NVIC_InitStructure;   
    GPIO_InitTypeDef GPIO_InitStructure;    //声明一个结构体变量,用来初始化GPIO  
    //使能串口的RCC时钟  
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB , ENABLE); //使能UART3所在GPIOB的时钟  
    RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART3, ENABLE);  
 
    //串口使用的GPIO口配置  
    // Configure USART3 Tx (PB.10) as alternate function push-pull  
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;  
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  
    GPIO_Init(GPIOB, &GPIO_InitStructure); 
 
    // Configure USART3 Rx (PB.11) as input floating    
    GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11;  
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;  
    GPIO_Init(GPIOB, &GPIO_InitStructure);   
 
    //串口中断配置  
    //Configure the NVIC Preemption Priority Bits     
   // NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);  
 
    // Enable the USART3 Interrupt   
    NVIC_InitStructure.NVIC_IRQChannel = USART3_IRQn;   
    NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=1 ;//抢占优先级3
    NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2;        //子优先级3
    NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;  
    NVIC_Init(&NVIC_InitStructure);  
 
    //配置串口  
    USART_InitStructure.USART_BaudRate = bound;  
    USART_InitStructure.USART_WordLength = USART_WordLength_8b;  
    USART_InitStructure.USART_StopBits = USART_StopBits_1;  
    USART_InitStructure.USART_Parity = USART_Parity_No;  
    USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;  
    USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx;  
 
    // Configure USART3   
    USART_Init(USART3, &USART_InitStructure);//配置串口3 
    // Enable USART3 Receive interrupts 使能串口接收中断  
    USART_ITConfig(USART3, USART_IT_RXNE, ENABLE);  
    // Enable the USART3   
    USART_Cmd(USART3, ENABLE);//使能串口3  
    USART_ClearFlag(USART3, USART_FLAG_TC);		
		
		TIM5_Int_Init(1000-1,8400-1);		//100ms中断
	  TIM_Cmd(TIM5, DISABLE); //关闭定时器7

}

串口3中断处理函数:

//定义接收数组,接收缓冲,最大USART3_MAX_RECV_LEN个字节,宏定义为400
unsigned char USART3_RX_BUF[USART3_MAX_RECV_LEN]; 				
u16 USART3_RX_STA=0;  //数组标志位
u8 start3=0; //接收状态标志位
void USART3_IRQHandler(void)
{
	u8 res;	 
	if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET)//接收到数据
	{	 
	res =USART_ReceiveData(USART3);	
    	TIM_SetCounter(TIM5,0);//计数器清空        				 		
			TIM_Cmd(TIM5, ENABLE);  //使能定时器5  		
			USART3_RX_BUF[USART3_RX_STA]=res;		//记录接收到的值
			USART3_RX_STA++; 						 
}  
}

串口3发送字符串函数:

//串口3,printf 函数
//确保一次发送数据不超过USART3_MAX_SEND_LEN字节
void u3_printf(char* fmt,...)  
{  
	u16 i,j;
	va_list ap;
	va_start(ap,fmt);
	vsprintf((char*)USART3_TX_BUF,fmt,ap);
	va_end(ap);
	i=strlen((const char*)USART3_TX_BUF);//此次发送数据的长度
	for(j=0;j<i;j++)//循环发送数据
	{
	  while(USART_GetFlagStatus(USART3,USART_FLAG_TC)==RESET);  //等待上次传输完成 
		USART_SendData(USART3,(uint8_t)USART3_TX_BUF[j]); 	 //发送数据到串口3 
	}
	
}

esp8266初始化:

//清空每次中断接收完成后的数组
void Clear_Buffer(void)//清空缓存
{
		u8 i;
		for(i=0;i<=USART3_RX_STA;i++)
		USART3_RX_BUF[i]=0;//缓存
		USART3_RX_STA=0;
		Delay_ms(100);
}

//模块初始化
void esp8266_start_trans(void)
{
    esp8266_send_cmd("AT+CWMODE=2","OK",50);
		Clear_Buffer();
	//Wifi模块重启
	esp8266_send_cmd("AT+RST","OK",20);
	Delay_ms(1000);         //延时3S等待重启成功
	Delay_ms(1000);
	Delay_ms(1000);	
    //AP模式
	esp8266_send_cmd("AT+CWSAP=\"想学ESP8266吗\",\"12345678\",11,3","OK",200);
	Clear_Buffer();
	esp8266_send_cmd("AT+CIPMUX=1","OK",20);
	Clear_Buffer();
	esp8266_send_cmd("AT+CIPSERVER=1","OK",200);
	Clear_Buffer();

}	


u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{
	u8 res=0; 
	USART3_RX_STA=0;
	u3_printf("%s\r\n",cmd);	//发送命令
	printf("%s\r\n",cmd);
	Delay_ms(waittime);
	if(strstr((const char*)USART3_RX_BUF,"OK"))
	{
		Uart1_SendStr((char*)USART3_RX_BUF);
	}

	return res;
}

主函数main:

extern u8 start3;
	extern unsigned char USART3_RX_BUF[USART3_MAX_RECV_LEN]; 
	

int main ( void )
{
	/* 初始化 */
  USART1_Config ();
  usart3_init(115200);  
  CPU_TS_TmrInit();	
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_3);  	
  esp8266_start_trans();                                                      
   while ( 1 )
  {
	 if(start3==1)//接收中断完成标志位
	 {
	 //判断接收的数据是否为密码数据,自己设置就行
		if(strstr((const char*)USART3_RX_BUF,"12345678"))
			{		
			   printf("开门成功\r\n");	
			}								
			if(!strstr((const char*)USART3_RX_BUF,"12345678"))
			{
			  printf("密码错误\r\n");	
			}				
		Clear_Buffer();		
		start3=0;
	 }
  }
}

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

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

相关文章

【BUUCTF】[GXYCTF2019]BabySQli

进入页面如下 尝试万能密码注入 显示这个&#xff08;qyq&#xff09; 用burp suite抓包试试 发现注释处是某种编码像是base编码格式 MMZFM422K5HDASKDN5TVU3SKOZRFGQRRMMZFM6KJJBSG6WSYJJWESSCWPJNFQSTVLFLTC3CJIQYGOSTZKJ2VSVZRNRFHOPJ5 可以使用下面这个网页在线工具很方便…

CSS基础知识 ----- 学习

介绍 CSS&#xff08;Cascading Style Sheets&#xff09;是一种用于定义网页样式和布局的样式表语言。 它与 HTML 一起用于构建 Web 页面&#xff0c;HTML 负责定义页面的结构和内容&#xff0c;而 CSS 则负责控制页面的外观和样式(各种元素的字体,颜色,大小,间距,边距)。 …

计算机网络 (50)两类密码体制

前言 计算机网络中的两类密码体制主要包括对称密钥密码体制&#xff08;也称为私钥密码体制、对称密码体制&#xff09;和公钥密码体制&#xff08;也称为非对称密码体制、公开密钥加密技术&#xff09;。 一、对称密钥密码体制 定义&#xff1a; 对称密钥密码体制是一种传…

Asp.Net Core 8.0 使用 Serilog 按日志级别写入日志文件的两种方式

1、所需的Nuget包 本文项目的版本是.NET 8.0&#xff0c;如果使用其它版本安装适配版本即可。 Serilog.AspNetCore(8.0.2) Serilog.Sinks.File(5.0.0) Serilog.Expressions(5.0.0) 2、两种配置方式 2.1 代码形式&#xff08;Program.cs&#xff09; 在Program.cs文件中&am…

华为HuaweiCloudStack(一)介绍与架构

本文简单介绍了华为HCS私有云解决方案&#xff0c;并从下至上介绍HCS的整体架构&#xff0c;部署架构、部署方式等内容。 目录 HCS简介 HCS架构 纵向结构 ?管理平台类型 HCS节点类型 FusionSphere OpenStack CPS ServiceOM SC 运营面 OC 运维面 HCS部署架构 regi…

彻底讲清楚 单体架构、集群架构、分布式架构及扩展架构

目录 什么是系统架构 单体架构 介绍 示例图 优点 缺点 集群架构 介绍 示意图 优点 缺点 分布式架构 示意图 优点 缺点 生态扩展 介绍 示意图 优点 缺点 扩展&#xff1a;分布式服务解析 纵切拆服务 全链路追踪能力 循环依赖 全链路日志&#xff08;En…

flutter 常用UI组件

文章目录 1. Toast 文本提示框oktoastbot_toast2. loading 加载窗flutter_easyloading3. 对话框gex dialog4.下拉刷新pull_to_refresh5. pop 窗custom_pop_up_menu6. pin code 密码框pinput7. 二维码qr_flutter8. swiper 滚动组件carousel_sliderflutter_swiper_view9. Badge 角…

【王树森搜索引擎技术】概要01:搜索引擎的基本概念

1. 基本名词 query&#xff1a;查询词SUG&#xff1a;搜索建议文档&#xff1a;搜索结果标签/筛选项 文档单列曝光 文档双列曝光 2. 曝光与点击 曝光&#xff1a;用户在搜索结果页上看到文档&#xff0c;就算曝光文档点击&#xff1a;在曝光后&#xff0c;用户点击文档&…

【开源免费】基于SpringBoot+Vue.JS欢迪迈手机商城(JAVA毕业设计)

本文项目编号 T 141 &#xff0c;文末自助获取源码 \color{red}{T141&#xff0c;文末自助获取源码} T141&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

【ArcGIS微课1000例】0140:总览(鹰眼)、放大镜、查看器的用法

文章目录 一、总览工具二、放大镜工具三、查看器工具ArcGIS中提供了三种局部查看的工具: 总览(鹰眼)、放大镜、查看器,如下图所示,本文讲述这三种工具的使用方法。 一、总览工具 为了便于效果查看与比对,本实验采用全球影像数据(位于配套实验数据包中的0140.rar中),加…

【TCP】rfc文档

tcp协议相关rfc有哪些 TCP&#xff08;传输控制协议&#xff09;是一个复杂的协议&#xff0c;其设计和实现涉及多个RFC文档。以下是一些与TCP协议密切相关的RFC文档列表&#xff0c;按照时间顺序排列&#xff0c;涵盖了从基础定义到高级特性和优化的各个方面&#xff1a; 基…

智能学习平台系统设计与实现(代码+数据库+LW)

摘 要 传统办法管理信息首先需要花费的时间比较多&#xff0c;其次数据出错率比较高&#xff0c;而且对错误的数据进行更改也比较困难&#xff0c;最后&#xff0c;检索数据费事费力。因此&#xff0c;在计算机上安装智能学习平台系统软件来发挥其高效地信息处理的作用&#…

5 分钟复刻你的声音,一键实现 GPT-Sovits 模型部署

想象一下&#xff0c;只需简单几步操作&#xff0c;就能生成逼真的语音效果&#xff0c;无论是为客户服务还是为游戏角色配音&#xff0c;都能轻松实现。GPT-Sovits 模型&#xff0c;其高效的语音生成能力为实现自然、流畅的语音交互提供了强有力的技术支持。本文将详细介绍如何…

HunyuanVideo 文生视频模型实践

HunyuanVideo 文生视频模型实践 flyfish 运行 HunyuanVideo 模型使用文本生成视频的推荐配置&#xff08;batch size 1&#xff09;&#xff1a; 模型分辨率(height/width/frame)峰值显存HunyuanVideo720px1280px129f60GHunyuanVideo544px960px129f45G 本项目适用于使用 N…

浅谈 JVM

JVM 内存划分 JVM 内存划分为 四个区域&#xff0c;分别为 程序计数器、元数据区、栈、堆 程序计数器是记录当前指令执行到哪个地址 元数据区存储存储的是当前类加载好的数据&#xff0c;包括常量池和类对象的信息&#xff0c;.java 编译之后产生 .class 文件&#xff0c;运…

macOS安装的Ubuntu 20 VM虚拟机扩充磁盘的便捷方式

文章目录 说明操作一 VM扩充虚拟磁盘二 ubuntu系统调整分区 说明 建议ubuntu虚拟机安装图形化界面&#xff0c;方便磁盘管理。如果你安装的debian12&#xff0c;那可能需要使用命令行的方式&#xff0c;本人选择放弃&#xff0c;操作太复杂&#xff01; 操作 一 VM扩充虚拟磁…

关于机器学习的一份总结

在之前的文章中分别有详细的关于机器学习中某一学习算法的介绍&#xff0c;但缺少一个总体关于机器学习的总结&#xff0c;所以在这篇文中就是关于机器学习的一份总结。 在最近的日子中&#xff0c;人工智能日益火热起来&#xff0c;而机器学习是其中举足轻重的一部分&#xf…

idea中远程调试中配置的参数说明

Ⅰ 远程调试中配置的端口号与服务本身端口号区别 一、远程调试中配置端口号的作用 在 IDEA 中进行远程调试时配置的端口号主要用于建立开发工具&#xff08;如 IDEA&#xff09;和远程服务之间的调试连接。当你启动远程调试时&#xff0c;IDEA 会监听这个配置的端口号&#xf…

初识JVM HotSopt 的发展历程

目录 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 各大 JVM look 看一下虚拟机 HotSopt 的发展历程 总结 导学 目前企业对程序员的基本要求 面向的对象 实战 学习目标 JVM 是什么 JVM 的三大核心功能 即时编译 主要是…

3. 后端验证前端Token

书接上回&#xff0c;后端将token返回给前端&#xff0c;前端存入cookie&#xff0c;每次前端给后端发送请求&#xff0c;后端是如何验证的。 若依是用过滤器来实现对请求的验证&#xff0c;过滤器的简单理解是每次发送请求的时候先发送给过滤器执行逻辑判断以及处理&#xff0…