“掌握温度,感知湿度,一触即知!”DHT11温湿度传感器,为您的生活增添一份关怀与精准。#非标协议【下】

news2024/9/20 22:27:32

“掌握温度,感知湿度,一触即知!”DHT11温湿度传感器,为您的生活增添一份关怀与精准。#非标协议【下】

    • 前言
    • 预备知识
    • 1.DHT11温湿度传感器初识
      • 1.1产品概述
      • 1.2与51单片机接线
      • 1.3数据传送逻辑和数据格式
    • 2.发送时序检测DHT11温湿度传感器模块是否存在
      • 2.1发送时序检测模块是否存在核心思路
      • 2.2定义DHT11温湿度传感器数据接线
      • 2.3根据手册检测DHT11温湿度传感器模块时序图配置检测函数
      • 2.4根据手册让单片机上电启动等待DHT11温湿度传感器稳定。
      • 2.5完整程序代码
    • 3.读取DHT11数据的时序分析
      • 3.1时序图详解
      • 3.2读取DHT11数据的次数
    • 4.根据时序写代码获取DHT11的数据
      • 4.1根据时序写代码获取DHT11的数据的核心思路
      • 4.2建立存放温湿度数据变量
      • 4.3依据3.1构造打开DHT11温湿度传感器高速模式函数
      • 4.4依据3.1构造读取DHT11温湿度传感器数据函数
      • 4.5主函数中每秒读取一次DHT11温湿度传感器数据。
      • 4.6完整程序代码
    • 5.温湿度通过串口传到PC显示
      • 5.1温湿度通过串口传到PC显示核心思虑
      • 5.2将串口编制03_PC发送指令控制LED中的串口初始化和发送字节和字符串函数拷贝到程序中合理位置,测试是否正常发送字符串。
      • 5.3使用发送字节函数发送湿度的整数部分并进行测试。
      • 5.4测速完毕,使用发送字节函数和发送字符串函数发送小数点和换行符,还要有中文提示
      • 5.5下载程序后串口无反应BUG调试
      • 5.6完整程序代码
      • 5.7程序运行结果
    • 结束语

前言

  本篇博文介绍的是用51单片机的非标准写协议【下】(DHT11温湿度传感器),包含DHT11温湿度传感器初识,发送时序检测DHT11温湿度传感器模块是否存在,读取DHT11数据的时序分析,根据时序写代码获取DHT11的数据,温湿度通过串口传到PC显示。看到这篇博文的朋友,可以先赞再看吗?

预备知识

  一、基本电路标识识别和接线,例如VCC,GND。
  二、数电时序图的阅读,高低电平的识别。
  三、C变量
  四、基本输入输出
  五、流程控制
  六、函数

  七、指针
  八,字符串

  如果以上知识不清楚,请自行学习后再来浏览。如果我有没例出的,请在评论区写一下。谢谢啦!

1.DHT11温湿度传感器初识

1.1产品概述

  DHT11数字温湿度传感器是一款含有已校准数字信号输出的温湿度复合传感器,应用领域:暖通空调;汽车;消费品;气象站;湿度调节器;除湿器;家电;医疗;自动控制 。

在这里插入图片描述

  特点

  • 相对湿度和温度测量
  • 全部校准,数字输出
  • 长期稳定性
  • 超长的信号传输距离:20米
  • 超低能耗:休眠
  • 4 引脚安装:可以买封装好的
  • 完全互换 : 直接出结果,不用转化

1.2与51单片机接线

在这里插入图片描述

1.3数据传送逻辑和数据格式

  • 数据传送逻辑

  只有一根数据线DATA,上官一号发送序列指令给DHT11模块,模块一次完整的数据传输为40bit,高位先出

  • 数据格式

  8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和

  • 通讯过程时序图

在这里插入图片描述

2.发送时序检测DHT11温湿度传感器模块是否存在

2.1发送时序检测模块是否存在核心思路

  • 定义DHT11温湿度传感器数据接线
  • 根据手册检测DHT11温湿度传感器模块时序图配置检测函数
  • 根据手册让单片机上电启动等待DHT11温湿度传感器稳定。

2.2定义DHT11温湿度传感器数据接线

  • 在这里我将DHT11温湿度传感器数据接51单片机P3.3口,需要注意DHT11配套的杜邦线质量不行,会有接触不良。
sbit Data = P3^3; //把DHT11接在单片机的P1.0口

2.3根据手册检测DHT11温湿度传感器模块时序图配置检测函数

  • 时序图详解

在这里插入图片描述

  • 函数代码
void checkDHT()
{
	//a: Data = 1
	Data = 1;
	//b: Data = 0
	Data = 0;
	//至少延时18ms,那么延时30ms
	Delay30ms();
	//c: Data = 1
	Data = 1;
	
	//20到100,40到120,读取中间交集40到100。单位(us)所以延时60us
	Delay60us();
	//根据时序图,如果有DHT11模块接入,Data会被拉低
	if(Data == 0)
	{
		LED1 = 0;     //检测到DHT11模块LED1亮。
	}
}

2.4根据手册让单片机上电启动等待DHT11温湿度传感器稳定。

  • 手册内容

  DHT11的供电电压为 3-5.5V。 传感器上电后, 要等待 1s 以越过不稳定状态在此期间无需发送任何指令。 电源引脚(VDD, GND) 之间可增加一个100nF 的电容, 用以去耦滤波。

  • 代码
Delay1000ms();  //等待DHT模块稳定
Delay1000ms();

2.5完整程序代码

#include "reg52.h"
#include "intrins.h"

sbit LED1 = P3^7; //用尾定义声明LED1
sbit Data = P3^3; //把DHT11接在单片机的P1.0口

void Delay30ms()		//@11.0592MHz
{
	unsigned char i, j; 

	i = 54;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

void Delay60us()		//@11.0592MHz
{
	unsigned char i;

	i = 25;
	while (--i);
}

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void checkDHT()
{
	//a: Data = 1
	Data = 1;
	//b: Data = 0
	Data = 0;
	//至少延时18ms,那么延时30ms
	Delay30ms();
	//c: Data = 1
	Data = 1;
	
	//20到100,40到120,读取中间交集40到100。单位(us)所以延时60us
	Delay60us();
	//根据时序图,如果有DHT11模块接入,Data会被拉低
	if(Data == 0)
	{
		LED1 = 0;     //检测到DHT11模块LED1亮。
	}
}

void main()
{
	LED1 = 1;       //一上电就让灯灭
	
	Delay1000ms();  //等待DHT模块稳定
	Delay1000ms();
	checkDHT();     //检测模块是否存在
  while(1);       //防止程序退出主函数,导致LED1微弱闪烁	
}

3.读取DHT11数据的时序分析

3.1时序图详解

请添加图片描述

3.2读取DHT11数据的次数

  • 手册内容介绍

“8bit湿度整数数据+8bit湿度小数数据+8bi温度整数数据+8bit温度小数数据+8bit校验和” ==40个字节

  • 读取次数计算

  根据手册,要读取5轮,每轮8次,共读取40次

4.根据时序写代码获取DHT11的数据

4.1根据时序写代码获取DHT11的数据的核心思路

  • 建立存放温湿度数据变量
  • 依据3.1构造打开DHT11温湿度传感器高速模式函数
  • 依据3.1构造读取DHT11温湿度传感器数据函数
  • 主函数中每秒读取一次DHT11温湿度传感器数据。

  注:本程序依据发送时序检测DHT11温湿度传感器模块是否存在工程建立

4.2建立存放温湿度数据变量

char THdata[5];   //存放温湿度数据变量

4.3依据3.1构造打开DHT11温湿度传感器高速模式函数

  • 代码看不懂请仔细看3.1的时序图
  • 函数代码
void startDHT()
{
	Data = 1;
	Data = 0;
	//至少延时18ms,那么延时30ms
	Delay30ms();
    Data = 1;
	//检测d点
	while(Data);
	//检测e点
	while(!Data);
	//检测f点
	while(Data);
}

4.4依据3.1构造读取DHT11温湿度传感器数据函数

  • 函数核心思路

  在本函数中,需要搞清楚的是要读取五轮,每轮读取8次,就可以使用两层for循环来读取,外层为轮次,内层为每轮的次数。在每次读取的时候,需要检测时序图中的g点,才能知道是否传送数据。

  根据时序图中传送1和0的时间不同,0是26us1是70us等待60us后,如果Data = 1,就传1Data = 0;就传0

  建立临时变量tmp用于存放传送的数据。然而传送的数据位0 1 0 1 的数据,这是需要使用移位和或等于运算的方法来存放。下图为移位和存数据示意图。

在这里插入图片描述

  • 函数代码
void readDHTData()
{
	char i; //轮次
	char j; //次数
	char flag;
	char tmp;
	
	//打开DHT11高速模式
	startDHT();
	
	for(i=0; i<5; i++)
	{
		for(j=0; j<8; j++)
		{
			//检测G点
			while(!Data);
			//根据传送1和0的时间不同,0是26us,1是70us。等待60us后,如果Data = 1,就传1,Data = 0;就传0
			Delay60us();
			if(Data == 1)
			{
				flag = 1;
				while(Data); //传1的时间比较久,所以要等传1结束
			}
      else
			{
				flag = 0;
			}
			tmp = tmp << 1;
			tmp |= flag;
		}
		THdata[i] = tmp;
	}
}

4.5主函数中每秒读取一次DHT11温湿度传感器数据。

void main()
{
	LED1 = 1;            //一上电就让灯灭
	
	Delay1000ms();       //等待DHT模块稳定
	Delay1000ms();
  while(1)             //防止程序退出主函数,导致LED1微弱闪烁
	{
		Delay1000ms();     //间隔1秒读一次
		readDHTData();
	}
	
}

4.6完整程序代码

#include "reg52.h"
#include "intrins.h"

sbit LED1 = P3^7; //用尾定义声明LED1
sbit Data = P3^3; //把DHT11接在单片机的P1.0口

char THdata[5];   //存放温湿度数据变量

void Delay30ms()		//@11.0592MHz
{
	unsigned char i, j; 

	i = 54;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

void Delay60us()		//@11.0592MHz
{
	unsigned char i;

	i = 25;
	while (--i);
}

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void startDHT()
{
	Data = 1;
	Data = 0;
	//至少延时18ms,那么延时30ms
	Delay30ms();
	Data = 1;
	//检测d点
	while(Data);
	//检测e点
	while(!Data);
	//检测f点
	while(Data);
}

void readDHTData()
{
	char i; //轮次
	char j; //次数
	char flag;
	char tmp;
	
	//打开DHT11高速模式
	startDHT();
	
	for(i=0; i<5; i++)
	{
		for(j=0; j<8; j++)
		{
			//检测G点
			while(!Data);
			//根据传送1和0的时间不同,0是26us,1是70us。等待60us后,如果Data = 1,就传1,Data = 0;就传0
			Delay60us();
			if(Data == 1)
			{
				flag = 1;
				while(Data); //传1的时间比较久,所以要等传1结束
			}
      else
			{
				flag = 0;
			}
			tmp = tmp << 1;
			tmp |= flag;
		}
		THdata[i] = tmp;
	}
}

void main()
{
	LED1 = 1;            //一上电就让灯灭
	
	Delay1000ms();       //等待DHT模块稳定
	Delay1000ms();
  while(1)             //防止程序退出主函数,导致LED1微弱闪烁
	{
		Delay1000ms();     //间隔1秒读一次
		readDHTData();
	}
	
}

5.温湿度通过串口传到PC显示

5.1温湿度通过串口传到PC显示核心思虑

  • 将串口编制03_PC发送指令控制LED中的串口初始化和发送字节和字符串函数拷贝到程序中合理位置,测试是否正常发送字符串。
  • 使用发送字节函数发送湿度的整数部分并进行测试。
  • 测速完毕,使用发送字节函数和发送字符串函数发送小数点和换行符,还要有中文提示。
  • 下载程序后串口无反应BUG调试

5.2将串口编制03_PC发送指令控制LED中的串口初始化和发送字节和字符串函数拷贝到程序中合理位置,测试是否正常发送字符串。

  • 串口初始化函数
void UartInit(void)		//自己配
{
	//配置串口工作方式为方式1,从只收不发改为能收能发
	SCON =  0x50;
  //配置辅助寄存器,减少电磁辐射,稳定晶振频率  
	AUXR =  0x01;
	//设置定时器工作方式为定时器1的8位自动重装
	TMOD &= 0x0F;
	TMOD |= 0x20;
	//设置串口波特率为9600,0误差
	TH1   = 0xFD;
	TL1   = 0xFD;
	//打开定时器1
	TR1   = 1;
}
  • 发送字节函数
void sendByte(char data_mas)
{
	SBUF = data_mas;
	while(!TI);
	TI = 0;          //一定要软件置零,不然会出现乱序
}
  • 发送字符串函数
void sendString(char *str)
{
	while(*str != '\0')
	{
		sendByte(*str);
		str++;
	}
}
  • 测试结果

在这里插入图片描述

5.3使用发送字节函数发送湿度的整数部分并进行测试。

  • 使用发送字节函数发送湿度的整数部分核心思路

  首先得搞明白DHT11传回的数据是8位2进制数字信息,而串口发送并显示的是文本信息。那么就要将这数字信息转化为文本信息。根据ASCII码表,可以知道0字符的ASCII码为 0011 0000。除了0以外,1到9的ASCII码高位都是 0011低位为相应数字的二进制数。那么在配置发送字节函数形参时 THdata 中元素的值最终要加上 0x30 。然而DHT11可以检测的温度范围是0°C至50°C,湿度范围是20%RH至90%RH,所以我们得将DHT11串回的8位二进制数转为10进制数并且取出十位个位上的数值。在C语言中,8为二进制和10进制数之间的转化不用特殊算法,只需要在变量进行运算时进行10进制的运算

  此时配置发送字节函数形参可以用 THdata[0] /10 +0x30THdata[0] %10 +0x30表示十位个位数。

  • ASCII码表

在这里插入图片描述

  • 函数配置参数代码
sendByte(THdata[0]/10 + 0x30); //除10是将十位取出,加上0x30是将数字的数字转换为字符的数字。0标号元素根据手册和读取DHT11数据函数逻辑可以知道是湿度信息
sendByte(THdata[0]%10 + 0x30); //取余十是将个位取出
  • 测试结果

在这里插入图片描述

5.4测速完毕,使用发送字节函数和发送字符串函数发送小数点和换行符,还要有中文提示

  • 代码体现
Delay1000ms();     //间隔1秒读一次
readDHTData();     //读取DHT11温湿度数据
sendString("湿度:");

sendByte(THdata[0]/10 + 0x30); //除10是将十位取出,加上0x30是将数字的数字转换为字符的数字。
sendByte(THdata[0]%10 + 0x30); //取余十是将个位取出
sendByte('.');
sendByte(THdata[1]/10 + 0x30); //除10是将十位取出,加上0x30是将数字的数字转换为字符的数字。
sendByte(THdata[1]%10 + 0x30); //取余十是将个位取出
sendString("\r\n");

sendString("温度:");

sendByte(THdata[2]/10 + 0x30); //除10是将十位取出,加上0x30是将数字的数字转换为字符的数字。
sendByte(THdata[2]%10 + 0x30); //取余十是将个位取出
sendByte('.');
sendByte(THdata[3]/10 + 0x30); //除10是将十位取出,加上0x30是将数字的数字转换为字符的数字。
sendByte(THdata[3]%10 + 0x30); //取余十是将个位取出
sendString("\r\n");

5.5下载程序后串口无反应BUG调试

  • 出现这个BUG的原因是在读取DHT11传输的数据时,延时过长导致读取数据0出错读取到下一个传送时序,解决办法就是减小延时,减小为40微秒。

  • 代码体现

void readDHTData()
{
	char i; //轮次
	char j; //次数
	char flag;
	char tmp;
	
	//打开DHT11高速模式
	startDHT();
	
	for(i=0; i<5; i++)
	{
		for(j=0; j<8; j++)
		{
			//检测G点
			while(!Data);
			//根据传送1和0的时间不同,0是26us,1是70us。等待60us后,如果Data = 1,就传1,Data = 0;就传0
			//Delay60us();   延时60微妙太长了,可能在读0时读到下一个发送序列了,延时40微妙
			Delay40us();
			if(Data == 1)
			{
				flag = 1;
				while(Data); //传1的时间比较久,所以要等传1结束
			}
      else
			{
				flag = 0;
			}
			tmp = tmp << 1;
			tmp |= flag;
		}
		THdata[i] = tmp;
	}
}

5.6完整程序代码

#include "reg52.h"
#include "intrins.h"

sbit LED1 = P3^7; //用尾定义声明LED1
sbit Data = P3^3; //把DHT11接在单片机的P1.0口
sfr AUXR = 0x8e;   //声明AUXR寄存器地址

char THdata[5];   //存放温湿度数据变量

void Delay30ms()		//@11.0592MHz
{
	unsigned char i, j; 

	i = 54;
	j = 199;
	do
	{
		while (--j);
	} while (--i);
}

void Delay40us()		//@11.0592MHz
{
	unsigned char i;

	_nop_();
	i = 15;
	while (--i);
}

void Delay1000ms()		//@11.0592MHz
{
	unsigned char i, j, k;

	_nop_();
	i = 8;
	j = 1;
	k = 243;
	do
	{
		do
		{
			while (--k);
		} while (--j);
	} while (--i);
}

void UartInit(void)		//自己配
{
	//配置串口工作方式为方式1,从只收不发改为能收能发
	SCON =  0x50;
  //配置辅助寄存器,减少电磁辐射,稳定晶振频率  
	AUXR =  0x01;
	//设置定时器工作方式为定时器1的8位自动重装
	TMOD &= 0x0F;
	TMOD |= 0x20;
	//设置串口波特率为9600,0误差
	TH1   = 0xFD;
	TL1   = 0xFD;
	//打开定时器1
	TR1   = 1;
}

void sendByte(char data_mas)
{
	SBUF = data_mas;
	while(!TI);
	TI = 0;          //一定要软件置零,不然会出现乱序
}

void sendString(char *str)
{
	while(*str != '\0')
	{
		sendByte(*str);
		str++;
	}
}

void startDHT()
{
	Data = 1;
	Data = 0;
	//至少延时18ms,那么延时30ms
	Delay30ms();
	Data = 1;
	//检测d点
	while(Data);
	//检测e点
	while(!Data);
	//检测f点
	while(Data);
}

void readDHTData()
{
	char i; //轮次
	char j; //次数
	char flag;
	char tmp;
	
	//打开DHT11高速模式
	startDHT();
	
	for(i=0; i<5; i++)
	{
		for(j=0; j<8; j++)
		{
			//检测G点
			while(!Data);
			//根据传送1和0的时间不同,0是26us,1是70us。等待60us后,如果Data = 1,就传1,Data = 0;就传0
			//Delay60us();   延时60微妙太长了,可能在读0时读到下一个发送序列了,延时40微妙
			Delay40us();
			if(Data == 1)
			{
				flag = 1;
				while(Data); //传1的时间比较久,所以要等传1结束
			}
      else
			{
				flag = 0;
			}
			tmp = tmp << 1;
			tmp |= flag;
		}
		THdata[i] = tmp;
	}
}

void main()
{
	LED1 = 1;            //一上电就让灯灭
	UartInit();          //初始化串口
	Delay1000ms();       //等待DHT模块稳定
	Delay1000ms();
  while(1)             //防止程序退出主函数,导致LED1微弱闪烁
	{
		Delay1000ms();     //间隔1秒读一次
		readDHTData();     //读取DHT11温湿度数据
		sendString("湿度:");
		
		sendByte(THdata[0]/10 + 0x30); //除10是将十位取出,加上0x30是将数字的数字转换为字符的数字。
		sendByte(THdata[0]%10 + 0x30); //取余十是将个位取出
		sendByte('.');
		sendByte(THdata[1]/10 + 0x30); //除10是将十位取出,加上0x30是将数字的数字转换为字符的数字。
		sendByte(THdata[1]%10 + 0x30); //取余十是将个位取出
		sendString("\r\n");
		
		sendString("温度:");
		
		sendByte(THdata[2]/10 + 0x30); //除10是将十位取出,加上0x30是将数字的数字转换为字符的数字。
		sendByte(THdata[2]%10 + 0x30); //取余十是将个位取出
		sendByte('.');
		sendByte(THdata[3]/10 + 0x30); //除10是将十位取出,加上0x30是将数字的数字转换为字符的数字。
		sendByte(THdata[3]%10 + 0x30); //取余十是将个位取出
		sendString("\r\n");
	}
	
}

5.7程序运行结果

在这里插入图片描述

结束语

  很高兴您能看到这里,点个赞再走呗。谢谢您啦!!!

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

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

相关文章

无心剑小诗《醉爱平凡人生》

醉爱平凡人生 平凡人生&#xff0c;别样卓越 做调色板上最亮的颜料 没有豪华光环与繁杂束缚 只有一份简单的快乐 不追求虚名&#xff0c;不被物欲左右 安静地享受生活&#xff0c;品味每滴雨露 平凡人生&#xff0c;宛如流淌的小溪 没有壮烈激流&#xff0c;却有恒久细流 不…

Java中处理I/O操作的不同方式:BIO,NIO,AIO

Java中处理I/O操作的不同方式&#xff1a;BIO&#xff0c;NIO&#xff0c;AIO 亲爱的朋友&#xff0c; 在这美好的时刻&#xff0c;愿你感受到生活的温暖和欢乐。愿你的每一天都充满着笑容和满足&#xff0c;无论面对什么挑战都能勇往直前&#xff0c;化解困境。 希望你的心中充…

LeetCode:26.删除有序数组中的重复项

26. 删除有序数组中的重复项 - 力扣&#xff08;LeetCode&#xff09; 目录 题目&#xff1a; 思路&#xff1a; 代码注释&#xff1a; 每日表情包&#xff1a; 题目&#xff1a; 思路&#xff1a; 没啥特殊的&#xff0c;老老实实双指针遍历数组&#xff0c;&#xff0…

2024.2.6日总结(小程序开发3)

页面配置 页面配置和全局配置的关系&#xff1a; 小程序中&#xff0c;app.json中的window节点&#xff0c;可以全局配置小程序中每个页面的窗口表现 如果某些小程序想要有特殊的窗口表现&#xff0c;可以用页面级别的.json配置文件实现这个需求 页面配置和全局配置冲突时&…

企业计算机服务器中了mallox勒索病毒怎么办,mallox勒索病毒处理流程

由于网络技术的不断发展与应用&#xff0c;越来越多的企业开始依赖计算机技术来提高企业效率。然而&#xff0c;网络安全威胁无处不在&#xff0c;严重影响着企业计算机服务器中的数据安全。近期&#xff0c;云天数据恢复中心接到许多中大型企业的求助&#xff0c;企业的多台服…

国产数据库 GBase 8a 安装

一、GBase简介 GBase 是南大通用数据技术有限公司推出的自主品牌的数据库产品&#xff0c;在国内数据库市场具有较高的品牌知名度。 二、下载地址&#xff08;需要先注册账号&#xff09; https://www.gbase.cn/download/gbase-8a?categoryINSTALL_PACKAGE 三、环境 服务…

Python(20)正则表达式(Regular Expression)中常用函数用法

大家好&#xff01;我是码银&#x1f970; 欢迎关注&#x1f970;&#xff1a; CSDN&#xff1a;码银 公众号&#xff1a;码银学编程 正文 正则表达式 粗略的定义&#xff1a;正则表达式是一个特殊的字符序列&#xff0c;帮助用户非常便捷的检查一个字符串是否符合某种模…

小白代码审计入门

最近小白一直在学习代码审计,对于我这个没有代码审计的菜鸟来说确实是一件无比艰难的事情。但是着恰恰应了一句老话:万事开头难。但是小白我会坚持下去。何况现在已经喜欢上了代码审计,下面呢小白就说一下appcms后台模板Getshell以及读取任意文件,影响的版本是2.0.101版本。…

vue项目开发vscode配置

配置代码片段 步骤如下&#xff1a; 文件->首选项->配置用户代码片段新增全局代码片段起全局代码片段文件名“xxx.code-snippets” 这里以配置vue2初始代码片段为例&#xff0c;配置具体代码片段 {"name": "vue-sph","version": "…

【Qt】常见问题

1.存在未解析的标识符 将build文件夹删掉重新编译。 2.左侧项目目录栏无法删除已添加项目 打开目标项目上一级的pro文件&#xff0c;将目标文件名字注释或者删除掉&#xff0c;最后保存&#xff0c;qt就会自动更新&#xff0c;将该项目隐藏掉。 3.在qt creator下添加槽函数…

MATLAB语音去噪系统

目录 一、背景 二、GUI页面 三、程序 3.1 LMS滤波程序 3.2 GUI程序 四、附录 一、背景 本文介绍了一种最佳的自适应滤波器结构&#xff0c;该结构采用最小均方差&#xff08;LMS&#xff09;作为判据&#xff0c;通过不断迭代自适应结构来调整得到最佳滤波器…

Linux应用开发---网络通信

Linux应用开发—网络通信 1 网络通信概述 Linux下的网络编程&#xff0c;我们一般称为 socket 编程&#xff0c;socket 是内核向应用层提供的一套网络编程接口&#xff0c;我们可以基于socket接口开发自己的网络相关应用程序。 1.1 socket 简介 套接字&#xff08;socket&…

在容器中使用buildah构建镜像

简介 buildah是一个构建OCI标准镜像的工具&#xff0c;可以用来替代docker build 在常见的linux发行版中可直接通过包管理工具安装使用 # centos yum install buildah# ubuntu/debian apt install buildah# alpine apk add buildah其他发行版安装方法详见 github&#xff0c…

RabbitMQ-4.MQ的可靠性

MQ的可靠性 4.MQ的可靠性4.1.数据持久化4.1.1.交换机持久化4.1.2.队列持久化4.1.3.消息持久化 4.2.LazyQueue4.2.1.控制台配置Lazy模式4.2.2.代码配置Lazy模式4.2.3.更新已有队列为lazy模式 4.MQ的可靠性 消息到达MQ以后&#xff0c;如果MQ不能及时保存&#xff0c;也会导致消…

(每日持续更新)jdk api之ObjectInputFilter.FilterInfo基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…

RabiitMQ延迟队列(死信交换机)

Dead Letter Exchange&#xff08;死信交换机&#xff09; 在MQ中&#xff0c;当消息成为死信&#xff08;Dead message 死掉的信息&#xff09;后&#xff0c;消息中间件可以将其从当前队列发送到另一个队列中&#xff0c;这个队列就是死信队列。而 在RabbitMQ中&#xff0c;由…

dolphinscheduler海豚调度(一)简介快速体验

1、简介 Apache DolphinScheduler 是一个分布式易扩展的可视化DAG工作流任务调度开源系统。适用于企业级场景&#xff0c;提供了一个可视化操作任务、工作流和全生命周期数据处理过程的解决方案。 Apache DolphinScheduler 旨在解决复杂的大数据任务依赖关系&#xff0c;并为应…

Doris中的本地routineload环境,用于开发回归测试用例

----------------2024-2-6-更新-------------- doris的routineload&#xff0c;就是从kafka中加载数据到表&#xff0c;特点是定时、周期性的从kafka取数据。 要想在本地开发测试routine load相关功能&#xff0c;需要配置kafka环境&#xff0c;尤其是需要增加routine load回…

SQL,HQL刷题,尚硅谷

目录 相关表数据&#xff1a; 题目及思路解析&#xff1a; 汇总分析 1、查询编号为“02”的课程的总成绩 2、查询参加考试的学生个数 分组 1、查询各科成绩最高和最低的分&#xff0c;以如下的形式显示&#xff1a;课程号&#xff0c;最高分&#xff0c;最低分 2、查询每门课程…

分享66个行业PPT,总有一款适合您

分享66个行业PPT&#xff0c;总有一款适合您 66个行业PPT下载链接&#xff1a;https://pan.baidu.com/s/1kcUOfR_xtH9CAJC12prcTw?pwd8888 提取码&#xff1a;8888 Python采集代码下载链接&#xff1a;采集代码.zip - 蓝奏云 学习知识费力气&#xff0c;收集整理更不易。知…