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

“掌握温度,感知湿度,一触即知!”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程序运行结果

在这里插入图片描述

结束语

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

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

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

相关文章

Linux基础-磁盘

1.磁盘分区 1.分区有固定大小 2.直接写在这块盘的磁盘分区表中&#xff08;DPT&#xff09;&#xff0c;和上面装什么操作系统没有任何关系 2.每一个磁盘分区都要先有一个磁盘分区类型 GPT&#xff08;首选&#xff09; MBR 3.磁盘专业术语叫做块设备&#xff08;Block Dev…

numpy基础之切片索引

1 numpy基础之切片索引 多维数组有多个轴&#xff0c;索引下标从0轴开始&#xff0c;每个轴下标用逗号分隔。 比如[m,n,o]&#xff0c;表示0轴上索引为m&#xff0c;1轴上索引为n&#xff0c;2轴上索引为o的下标。 切片索引下标是在指定轴上用冒号选取一定范围的下标。 比如…

mac缩小图片大小的软件有哪些?推荐6款实用软件

mac缩小图片大小的软件有哪些&#xff1f;在处理图片时&#xff0c;我们经常需要调整图片的大小以适应不同的需求。在Mac上&#xff0c;有许多软件可以帮助我们实现这一目标。本文将介绍6款知名的图片缩小软件&#xff0c;让你轻松应对图片大小的调整。 1.改图鸭 这是一款功能…

亿级流量高并发春晚互动前端技术揭秘

前言 2022年1月&#xff0c;京东成为央视总台2022年春节联欢晚会独家互动合作伙伴&#xff0c;双方在红包互动、电商等方面展开全方位深度合作。在除夕当天产生691亿次互动&#xff0c;送出15亿元红包好物。 如何在这种大规模、高并发的场景下&#xff0c;确保系统的稳定性和…

这是一篇学习记录(二) —— RPA应用

RPA可以做数据提取、表单填写和文件移动。RPA 可以在不相关的软件系统中自动执行各种活动和事务&#xff0c;从而释放人力资源&#xff0c;使其优先处理更复杂的任务。 以下是 RPA 在不同领域的典型应用&#xff1a; 金融和银行业&#xff1a;RPA 在金融和会计领域有广泛应用…

Linux实验记录:使用Postfix与Dovecot部署邮件系统

前言&#xff1a; 本文是一篇关于Linux系统初学者的实验记录。 参考书籍&#xff1a;《Linux就该这么学》 实验环境&#xff1a; VmwareWorkStation 17——虚拟机软件 RedHatEnterpriseLinux[RHEL]8——红帽操作系统 备注&#xff1a; Web服务和FTP文件传输服务虽能实现文…

Stable Diffusion 模型下载:majicMIX reverie 麦橘梦幻

文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八案例九案例十 下载地址 模型介绍 非常推荐的一个梦幻风格的大模型&#xff0c;由国人“Merjic”发布&#xff0c;下载量颇高。基于majicMIX_lux合并了一个2.5D模型。它与majicMIX_fantasy有类似的方…

【开源】SpringBoot框架开发城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统&#xff0c;支持…

01-Datahub是什么?

Datahub是LinkedIn开源的基于现代数据栈的元数据管理平台&#xff0c;原来叫做WhereHows 。经过一段时间的发展datahub于2020年2月在Github开源。 官网地址为&#xff1a;A Metadata Platform for the Modern Data Stack | DataHub 源码地址为&#xff1a;GitHub - datahub-p…

Java实现视频抽帧

&#x1f913; 1️⃣配置Maven 在pox.xml中加入 <dependencies><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.7</version></dependency> </dependencies…

代码随想录 Leetcode51. N 皇后

题目&#xff1a; 代码(首刷看解析 2024年2月6日&#xff09;&#xff1a; class Solution { private:vector<vector<string>> res;void backtracking(int n, int row, vector<string>& chessboard) {if (row n) {res.push_back(chessboard);return;}f…

论文阅读-面向公平性的分布式系统负载均衡机制

摘要 当一组自利的用户在分布式系统中共享多个资源时&#xff0c;我们面临资源分配问题&#xff0c;即所谓的负载均衡问题。特别地&#xff0c;负载均衡被定义为将负载分配到分布式系统的服务器上&#xff0c;以便最小化作业响应时间并提高服务器的利用率。在本文中&#xff0…

UE5 解析Base64加密的json并解决中文乱码

参考资料: IntelliJ IDEA 设置编码为utf-8编码_idea如何转化utf-8-CSDN博客 【UE4】FString TCHAR_TO_UTF8宏的一些坑-CSDN博客 这是最有用的Unreal Engine FString TArray<uint8> utf-8互转 - 知乎 FString UMyBlueprintFunctionLibrary::LoadStringBase64Decode(FSt…

Tiktok云手机是什么,做tiktok养号有什么优势?

随着抖音海外版的兴起&#xff0c;给跨境电商带来了前所未有的巨大商机&#xff0c;打算做Tiktok带货的跨境商家越来越多了。本文将介绍如何通过tiktok云手机轻松养号涨粉。 账号的安全稳定是做好tiktok的基础&#xff0c;早期大家用的比较多的是实体手机。但是这种方法有几个弊…

人工智能|深度学习——基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统

代码下载&#xff1a; 基于全局注意力的改进YOLOv7-AC的水下场景目标检测系统.zip资源-CSDN文库 1.研究的背景 水下场景目标检测是水下机器人、水下无人机和水下监控等领域中的重要任务之一。然而&#xff0c;由于水下环境的复杂性和特殊性&#xff0c;水下目标检测面临着许多挑…

深度解析 Netty 架构与原理

一共 28661字&#xff0c;耐心看完。 在阅读本文前最好有 Java 的 IO 编程经验&#xff08;知道 Java 的各种 IO 流&#xff09;&#xff0c;以及 Java 网络编程经验&#xff08;用 ServerSocket 和 Socket 写过 demo&#xff09;&#xff0c;并对 Java NIO 有基本的认识&…

Etsy做什么店铺比较靠谱? 什么叫做真人店?

作为Etsy是美国最大的原创手工在线销售平台之一&#xff0c;以其店铺利润高、平台佣金低、平台同质化不严重的优点在跨境电商里颇具竞争力。然而Etsy开店却不是件容易事&#xff0c;原因是Etsy真人店对于环境以及卖家的运营操作要求较高&#xff0c;下面就给各位有意入局Etsy的…

计算机毕业设计 | SSM 旅游网站后台管理系统(附源码)

1&#xff0c;概述 1.1 背景分析 随着人们生活水平的提高和对休闲旅游的日益重视&#xff0c;旅游业已成为全球最大的经济产业之一。越来越多的人选择通过在线方式进行旅行预订&#xff0c;这种趋势为旅游网站提供了巨大的商机。用户体验是决定旅游网站成功与否的关键因素。良…

c语言贪食蛇游戏

演示视频 目录 一.概述 二.游戏开始前 修改控制台程序标题和大小 Win32 API GetStdHandle函数 GetConsoleCursorInfo函数和SetConsoleCursorInfo函数 SetConsoleCursorPosition函数 游戏开篇界面处理 创建地图 蛇身节点以及食物节点初始化 蛇身的初始化 整体蛇节点…

相机图像质量研究(5)常见问题总结:光学结构对成像的影响--景深

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结&#xff1a;光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结&#xff1a;光学结构对成…