ESP8266-01S、手机、STM32连接

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;
	 }
  }
}

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Vscode:问题解决办法 及 Tips 总结

Visual Studio Code&#xff08;简称VSCode&#xff09;是一个功能强大的开源代码编辑器&#xff0c;广泛用于各种编程语言和开发场景&#xff0c;本博客主要记录在使用 VSCode 进行verilog开发时遇到的问题及解决办法&#xff0c;使用过程中的技巧 文章目录 扩展安装失败调试配…

Comment(爆破+git泄漏+二次注入)

通过爆破密码的后三位&#xff0c;获得账号为&#xff1a;zhangwei666 F12查看控制台 使用bugscanteam的githack工具&#xff0c;下载泄漏的源码&#xff0c;根据控制台的提示&#xff0c;完整源码还在历史的commit中 git log –reflog 查看历史记录 查看最新的提交记录&#…

物联网网关Web服务器--Boa服务器移植与测试

1、Boa服务器介绍 BOA 服务器是一个小巧高效的web服务器&#xff0c;是一个运行于unix或linux下的&#xff0c;支持CGI的、适合于嵌入式系统的单任务的http服务器&#xff0c;源代码开放、性能高。 Boa 嵌入式 web 服务器的官方网站是http://www.boa.org/。 特点 轻量级&#x…

vim文本编辑器

vim命令的使用&#xff1a; [rootxxx ~]# touch aa.txt #首先创建一个文件 [rootxxx ~]# vim aa.txt #vim进入文件aa.txt进行编辑 vim是vi的升级版&#xff0c;具有以下三种基本模式&#xff1a; 输入模式(编辑模式) 点击i进入编辑模式 &#xff08;说明…

MYSQL主从同步----1、基于binlog 2、基于gtid

目录 前提&#xff08;无论是基于binlog还是基于gitd&#xff09; 一、对MySQL主从同步的了解 1、MySQL支持的复制类型 2、为什么要做主从复制 3、主从复制原理---面试会考 二、基于binlog的主从同步 1、主库上的操作 1&#xff09;配置文件 2&#xff09;备份数据库&am…

opencv笔记2

图像灰度 彩色图像转化为灰度图像的过程是图像的灰度化处理。彩色图像中的每个像素的颜色由R&#xff0c;G&#xff0c;B三个分量决定&#xff0c;而每个分量中可取值0-255&#xff0c;这样一个像素点可以有256*256*256变化。而灰度图像是R&#xff0c;G&#xff0c;B三个分量…

Hadoop•用Web UI查看Hadoop状态词频统计

听说这里是目录哦 通过Web UI查看Hadoop运行状态&#x1f407;一、关闭防火墙二、在物理计算机添加集群的IP映射三、启动集群四、进入HDFS的Web UI 词频统计&#x1f9a9;1、准备文本数据2、在HDFS创建目录3、上传文件4、查看文件是否上传成功5、运行MapReduce程序6、查看MapRe…

C语言二级查漏补缺

直接拿错过的选择开始补知识点 二叉树 推荐视频 基础名词讲解 根节点&#xff08;Root&#xff09;&#xff1a;二叉树的顶端节点&#xff0c;没有父节点。子节点&#xff08;Children&#xff09;&#xff1a;每个节点下面的节点。对于二叉树来说&#xff0c;每个节点最多…

Low-Level 大一统:如何使用Diffusion Models完成视频超分、去雨、去雾、降噪等所有Low-Level 任务?

Diffusion Models专栏文章汇总:入门与实战 前言:视频在传输过程中常常因为各种因素(如恶劣天气、噪声、压缩和传感器分辨率限制)而出现质量下降,这会严重影响计算机视觉任务(如目标检测和视频监控)的性能。现有的视频修复方法虽然取得了一些进展,但通常只能针对特定的退…

【22】Word:小李-高新技术企业政策❗

目录 题目​ NO1.2 NO3 NO4 NO5.6 NO7.8 NO9.10 若文章中存在删除空白行等要求&#xff0c;可以到最后来完成。注意最后一定要检查此部分&#xff01;注意&#xff1a;大多是和事例一样即可&#xff0c;不用一摸一样&#xff0c;但也不要差太多。 题目 NO1.2 F12Fn&a…

【前端】CSS学习笔记(1)

目录 CSS的简介CSS的概念语法 CSS的引入方式内联样式&#xff08;行内样式&#xff09;内部样式外部样式&#xff08;推荐&#xff09; 选择器全局选择器元素选择器类选择器ID选择器合并选择器后代选择器子选择器相邻兄弟选择器通用兄弟选择器伪类选择器:link:visited:hover:ac…

C#与AI的共同发展

C#与人工智能(AI)的共同发展反映了编程语言随着技术进步而演变&#xff0c;以适应新的挑战和需要。自2000年微软推出C#以来&#xff0c;这门语言经历了多次迭代&#xff0c;不仅成为了.NET平台的主要编程语言之一&#xff0c;还逐渐成为构建各种类型应用程序的强大工具。随着时…

几何数据结构之四叉树与八叉树

几何数据结构之四叉树与八叉树 四叉树的定义四叉树深度的计算公式推导假设&#xff1a;计算过程&#xff1a;1. 划分空间&#xff1a;2. 节点容纳的最小距离&#xff1a;3. 解出深度&#xff1a;4. 考虑常数项&#xff1a; 总结&#xff1a; 八叉树 四叉树的定义 四叉树&#…

机器学习中的方差与偏差

文章目录 方差与偏差1.1 数据1.1.1 数据的分布1.1.2 拟合 1.2 方差与偏差1.2.1 泛化误差的拆分1.2.2 理解方差偏差 1.3 方差-偏差trade-off1.3.1 方差-偏差trade-off1.3.2 方差与偏差诊断 1.4 降低策略1.4.1 噪声1.4.2 高偏差1.4.3 高方差 方差与偏差 1.1 数据 1.1.1 数据的分…

Weblogic - General - 弱口令 任意文件读取漏洞

0x01&#xff1a;漏洞简介 首先需要说明&#xff0c;本文并不是介绍了 Weblogic 某一 CVE 漏洞&#xff0c;而是提供了一种通用的测试思路。 0x0101&#xff1a;弱口令漏洞 弱口令漏洞主要是由于用户安全意识淡薄&#xff0c;为了便于记忆&#xff0c;设置了强度过低的密码&…

C#中的语句

C#提供了各式各样的语句&#xff0c;大多数是由C和C发展而来&#xff0c;当然&#xff0c;在C#中做了相应修改。语句和表达式一样&#xff0c;都是C#程序的基本组成部分&#xff0c;在本文我们来一起学习C#语句。 1.语句 语句是构造所有C#程序的过程构造块。在语句中可以声明…

VLAN基础理论

VLAN V&#xff1a;Virtual(虚拟) LAN ——局域网 VLAN ——虚拟局域网(虚拟广播域&#xff1a;交换机和路由器协同工作后&#xff0c;将原来的一个广播域&#xff0c;逻辑上切分为多个。) VLAN的配置我们基于以下拓扑进行&#xff1a; PC1-4的IP地址依次为192.168.1.1-192.168…

基于SpringBoot的健身房管理系统【源码+文档+部署讲解】

系统介绍 基于SpringBootVue实现的健身房管理系统采用前后端分离架构方式&#xff0c;系统设计了管理员、会员、员工三种角色&#xff0c;系统实现了用户登录与注册、个人中心、会员管理、员工管理、会员卡管理、会员卡类型管理、教练信息管理、解聘管理、健身项目管理、指导项…

C++ 模拟真人鼠标轨迹算法 - 防止游戏检测

一.简介 鼠标轨迹算法是一种模拟人类鼠标操作的程序&#xff0c;它能够模拟出自然而真实的鼠标移动路径。 鼠标轨迹算法的底层实现采用C/C语言&#xff0c;原因在于C/C提供了高性能的执行能力和直接访问操作系统底层资源的能力。 鼠标轨迹算法具有以下优势&#xff1a; 模拟…

搭建一个基于Spring Boot的校园台球厅人员与设备管理系统

搭建一个基于Spring Boot的校园台球厅人员与设备管理系统可以涵盖多个功能模块&#xff0c;例如用户管理、设备管理、预约管理、计费管理等。以下是一个简化的步骤指南&#xff0c;帮助你快速搭建一个基础的系统。 — 1. 项目初始化 使用 Spring Initializr 生成一个Spring …