✌️✌️大家好,这里是5132单片机毕设设计项目分享,今天给大家分享的是基于《基于STM32的智能家居设计》。

目录

1、系统功能

2.1、硬件清单

2.2、功能介绍

2.3、控制模式

2、演示视频和实物

3、系统设计框图

4、软件设计流程图

5、原理图

6、主程序

7、总结


1、系统功能

2.1、硬件清单

STM32+OLED+BH1750 光照传感器 + 温湿度传感器 + 空气质量传感器 + PM2.5 传感器 + 补光灯 + 风扇 + 蜂鸣器 + WIFI + 继电器模块 + 按键模块

2.2、功能介绍(下面视频有详细讲解)

(1)ESP8266 WIFI 模块:用于连接远程云平台,可在手机 APP 实现对设备的远程控制,实时查看温度、湿度、空气质量、PM2.5、光照强度等传感器数据。
(2)BH1750 光照传感器(I2C 通讯协议):用于检测环境光照强度,在自动模式下,当光照强度小于设定阈值时自动打开补光灯。
(3)温湿度传感器(DHT11):用于检测房间温度和湿度,在自动模式下,若湿度大于设定阈值,会触发继电器模块打开空调。
(4)空气质量传感器和 PM2.5 传感器:分别用于监测空气质量参数及空气中 PM2.5 浓度,在自动模式下,空气质量大于设定阈值会触发空调开启,PM2.5 浓度大于设定阈值会启动风扇进行排风。
(5)0.96 寸显示屏(OLED):用于实时显示时间、温度、湿度、PM2.5、光照强度等传感器数据及系统工作模式,时间准确性在不拔下后备电池时可得到保证。
(6)按键模块(4 个按键):在不同模式下功能不同,包括模式切换(远程 / 手动 / 自动)、阈值设置(通过按键加减调整各传感器阈值,可通过按键进入阈值设置界面)、手动控制外设(风扇、空调、补光灯等),因传感器采集耗时,操作时需按下停顿一秒再放开以确保响应。
(7)继电器模块:用于控制空调,在自动模式下,当湿度或空气质量检测值大于设定阈值时自动开启空调;在手动模式下,可通过按键控制空调开关。
(8)补光灯:用于环境补光,在自动模式下,根据光照强度传感器检测值与设定阈值对比,当光照强度小于阈值时自动打开。
(9)风扇:在自动模式下,若温度或 PM2.5 浓度大于对应设定阈值,自动启动进行排风;在手动模式下,可通过按键直接控制风扇开关。
(10)蜂鸣器模块:用于声音报警,当检测到的声音强度大于设定阈值时触发报警,可通过调整阈值或对着麦克风大声说话触发。

2.3、控制模式

  1. 手动模式:通过按键或蓝牙连接的手机 APP 直接控制各区域灯光的开关及暖光 / 白光模式切换,OLED 屏实时显示当前模式及操作状态。
  2. 语音模式:通过唤醒词 “小智” 激活语音交互,支持语音指令控制各区域灯光的开关、暖光 / 白光切换(如 “打开厨房暖光灯”“关闭卧室灯”),语音指令执行结果通过语音反馈及 OLED 屏显示。
  3. 自动模式:需通过按键或 APP 开启,仅在人体识别传感器检测到有人时生效,系统根据光敏传感器检测的光照强度自动调节对应区域灯光亮度(光照强度低于阈值时逐级增强亮度,高于阈值时关闭灯光),实现无人时自动关灯、有人时智能调光。

2、演示视频和实物

基于STM32的智能家居控制(版本1)(PM2.5+温湿度+光照强度)-(远程+自动+手动模式)

 


3、系统设计框图


4、软件设计流程图


5、原理图


6、主程序

#include "main.h"
uint16_t AD0, AD1;             //存储5路ADC值
uint8_t KeyNum;// 存储按键值
u8 t = 0;// 传感器读取时间间隔
uint16_t RTC_Time[] = {0, 0, 0};// RTC时间
uint16_t RTC_Time1[] = {7, 0, 0};// 定时时间---开
uint16_t RTC_Time2[] = {19, 0, 0};// 定时时间---关
u8 S_Mode; // 按键状态标志
u8 S_Shou_1 ;     //手动模式控制设备1
u8 S_Shou_2;     //手动模式控制设备2
u8 S_Shou_3;     //手动模式控制设备3
u8 S_YuZhi;       //阈值设置里用的,用来切换阈值
// 其他状态标志
u8 qingping = 1;   //清屏标志
u8 S_ShiShi_Time_1;     //设置实时时间用,用来切换时间显示和设置时间
u8 S_ShiShi_Time_2;    //设置实时时间用,用来切换设置的时分秒
u8 S_DingShi_Switch;    //设置定时时间里用到,切换时分秒
uint32_t bufe[10];
// 定义传感器数据和阈值结构体变量
SensorDataAndThreshold sensorData;// 初始化相关硬件和机智云
void System_Init()
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); // 设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(9600);       // 串口初始化为9600delay_init();      // 延时函数初始化LED_Init();            // 初始化与LED连接的硬件接口DHT11_Init();Buzzer_Init();             // 外设初始化OLED_Init();PM25_Init();       //里面包含了AD_Init();BH1750_Init();Key_Init();MyRTC_Init();sensorData.GuangYu = 100;sensorData.KongQiYu = 80;sensorData.PM25Yu = 500;sensorData.ShengYinYu = 20;sensorData.HumiYu = 50;sensorData.TempYu = 35;MY_Gizwits_Init();   // 机智云初始化
}int main(void)
{System_Init();while (1){userHandle();    // 数据上传gizwitsHandle((dataPoint_t *)&currentDataPoint);   // 后台处理,必须放在while里ReadSensorData();HandleModes();}
}// 读取传感器数据
void ReadSensorData()
{ if(t%10==0){DHT11_Read_Data(&sensorData.Temp, &sensorData.Humi);  // 读取温湿度并显示在OLED上sensorData.Guang = bh_data_read();AD1 = AD_GetValue(ADC_Channel_1);    //空气质量传感器if (AD1 > 4000)AD1 = 4000;sensorData.KongQi = (u8)(80 - (AD1 / 40));sensorData.ShengYin = 100 - TS_GetData(ADC_Channel_0);  // 声音传感器    PA0sensorData.PM25 = Get_PM25_Average_Data();}
}// 处理不同模式
void HandleModes()
{KeyNum = Key_GetNum();if (KeyNum == 1 && DebounceKey(1)){qingping = 0;S_Shou_2 = 2;            //每次初始化手动模式的标志,这样进入手动模式是一样的S_Mode = (S_Mode + 1) % 4;}switch (S_Mode){case 0: // 远程模式if (qingping == 0){OLED_Clear();qingping = 1;}TimeRead();ChuangGan();OLED_ShowChinese(1, 7, 49);OLED_ShowChinese(1, 8, 50);break;case 2: // 自动模式OLED_ShowChinese(1, 7, 51);OLED_ShowChinese(1, 8, 52);TimeRead();zhidong();ChuangGan();break;case 1: // 手动模式OLED_ShowChinese(1, 7, 18);OLED_ShowChinese(1, 8, 52);TimeRead();ChuangGan();shoudong();break;case 3: // 阈值设置if (qingping == 0){OLED_Clear();qingping = 1;}YuZhiSet();break;}
}// 手动模式函数
void shoudong()
{if (qingping == 0){OLED_Clear();qingping = 1;}if (KeyNum == 2 && DebounceKey(2)){S_Shou_1 = (S_Shou_1 + 1) % 2;}if (S_Shou_1 == 0){FENG_OFF();// 外设操作}if (S_Shou_1 == 1){FENG_ON();// 外设操作}if (KeyNum == 3 && DebounceKey(3)){S_Shou_2 = (S_Shou_2 + 1) % 2;}if (S_Shou_2 == 1){LED_ON(); // 外设操作}if (S_Shou_2 == 0){LED_OFF(); // 外设操作}if (KeyNum == 4 && DebounceKey(4)){S_Shou_3 = (S_Shou_3 + 1) % 2;}if (S_Shou_3 == 1){KONG_ON(); // 外设操作}if (S_Shou_3 == 0){KONG_OFF(); // 外设操作}
}// 自动模式函数
void zhidong()
{if (qingping == 0){OLED_Clear();qingping = 1;}if ((sensorData.PM25 > sensorData.PM25Yu) || (sensorData.Temp > sensorData.TempYu)){FENG_ON();}else{FENG_OFF();}if ((sensorData.KongQi > sensorData.KongQiYu) || (sensorData.Humi > sensorData.HumiYu)){KONG_ON();}else{KONG_OFF();}if (sensorData.Guang < sensorData.GuangYu){LED_ON();}else{LED_OFF();}if (sensorData.ShengYin > sensorData.ShengYinYu){Buzzer_Turn();}else{Buzzer_OFF();}
}// 设置阈值函数
void YuZhiSet()
{if (qingping == 0){OLED_Clear();qingping = 1;}zhidong();OLED_ShowChinese(1, 3, 72);OLED_ShowChinese(1, 4, 73);OLED_ShowChinese(1, 5, 74);OLED_ShowChinese(1, 6, 75);OLED_ShowString(2, 1, "G:");OLED_ShowNum(2, 3, sensorData.GuangYu, 3);OLED_ShowString(2, 7, "K:");OLED_ShowNum(2, 9, sensorData.KongQiYu, 2);OLED_ShowString(2, 12, "T:");OLED_ShowNum(2, 14, sensorData.TempYu, 2);OLED_ShowString(3, 12, "H:");OLED_ShowNum(3, 14, sensorData.HumiYu, 2);OLED_ShowString(3, 1, "PM2.5:");OLED_ShowNum(3, 7, sensorData.PM25Yu, 3);OLED_ShowString(4, 1, "ShengYin:");OLED_ShowNum(4, 10, sensorData.ShengYinYu, 2);if (KeyNum == 2 && DebounceKey(2)){S_YuZhi = (S_YuZhi + 1) % 6;}switch (S_YuZhi){case 0:if (KeyNum == 3) sensorData.GuangYu++;if (KeyNum == 4) sensorData.GuangYu--;break;case 1:if (KeyNum == 3) sensorData.KongQiYu++;if (KeyNum == 4) sensorData.KongQiYu--;break;case 3:if (KeyNum == 3) sensorData.PM25Yu += 100;if (KeyNum == 4) sensorData.PM25Yu -= 100;break;case 5:if (KeyNum == 3) sensorData.ShengYinYu ++;if (KeyNum == 4) sensorData.ShengYinYu --;break;case 2:if (KeyNum == 3) sensorData.TempYu ++;if (KeyNum == 4) sensorData.TempYu --;break;case 4:if (KeyNum == 3) sensorData.HumiYu ++;if (KeyNum == 4) sensorData.HumiYu --;break;}
}// 定时模式函数
void DingShiMoShi()
{if (qingping == 0){OLED_Clear();qingping = 1;}// 定时模式判断if ((MyRTC_Time[3] == RTC_Time1[0]) && (MyRTC_Time[4] == RTC_Time1[1]) && (MyRTC_Time[5] == RTC_Time1[2])){// 外设操作}if ((MyRTC_Time[3] == RTC_Time2[0]) && (MyRTC_Time[4] == RTC_Time2[1]) && (MyRTC_Time[5] == RTC_Time2[2])){// 外设操作}// 显示定时时间OLED_ShowChinese(3, 1, 31);OLED_ShowString(3, 3, ":");OLED_ShowNum(3, 5, RTC_Time1[0], 2);OLED_ShowString(3, 7, ":");OLED_ShowNum(3, 8, RTC_Time1[1], 2);OLED_ShowString(3, 10, ":");OLED_ShowNum(3, 11, RTC_Time1[2], 2);OLED_ShowChinese(4, 1, 32);OLED_ShowString(4, 3, ":");OLED_ShowNum(4, 5, RTC_Time2[0], 2);OLED_ShowString(4, 7, ":");OLED_ShowNum(4, 8, RTC_Time2[1], 2);OLED_ShowString(4, 10, ":");OLED_ShowNum(4, 11, RTC_Time2[2], 2);// 修改定时时间操作if (KeyNum == 2 && DebounceKey(2)){S_DingShi_Switch = (S_DingShi_Switch + 1) % 6;}switch (S_DingShi_Switch){case 0: // 时if (KeyNum == 3) RTC_Time2[0]++;if (KeyNum == 4) RTC_Time2[0]--;break;case 1: // 分if (KeyNum == 3) RTC_Time2[1]++;if (KeyNum == 4) RTC_Time2[1]--;break;case 2: // 秒if (KeyNum == 3) RTC_Time2[2]++;if (KeyNum == 4) RTC_Time2[2]--;break;case 3: // 时if (KeyNum == 3) RTC_Time1[0]++;if (KeyNum == 4) RTC_Time1[0]--;break;case 4: // 分if (KeyNum == 3) RTC_Time1[1]++;if (KeyNum == 4) RTC_Time1[1]--;break;case 5: // 秒if (KeyNum == 3) RTC_Time1[2]++;if (KeyNum == 4) RTC_Time1[2]--;break;}
}void YuYingMode()   //先说小杰唤醒,然后说打开窗户和关闭窗户
{
//    if (qingping == 0)
//    {
//        OLED_Clear();
//        qingping = 1;
//    }
//    if (Serial2_RxFlag == 1)        //串口接收到数据包的标志位,若是收到数据包,会置1
//    {
//        if (strcmp(Serial2_RxPacket, "JIASHI_ON") == 0)
//        {
//            // 外设操作
//        }
//        else if (strcmp(Serial2_RxPacket, "JIASHI_OFF") == 0)
//        {
//            // 外设操作
//        }
//        Serial2_RxFlag = 0; //将标志位清零,不清零就接收不到下一个数据包了
//    }
}// 机智云初始化函数
void MY_Gizwits_Init(void)
{TIM3_Int_Init(9, 7199); // 1MS系统定时usart3_init(9600); // WIFI初始化memset((uint8_t *)&currentDataPoint, 0, sizeof(dataPoint_t)); // 设备状态结构体初始化gizwitsInit(); // 环形缓冲区初始化gizwitsSetMode(2);   // 设置模式userInit();
}// 按键消抖函数
uint8_t DebounceKey(uint8_t key)
{delay_ms(20);return KeyNum == key;
}// 设置时间函数
void TimeSet()
{if (KeyNum == 2 && DebounceKey(2)){S_ShiShi_Time_1 = (S_ShiShi_Time_1 + 1) % 3;}if (S_ShiShi_Time_1 == 0)   // 时间显示模式{MyRTC_ReadTime();OLED_ShowNum(1, 5, MyRTC_Time[3], 2);    // 时OLED_ShowString(1, 7, ":");OLED_ShowNum(1, 8, MyRTC_Time[4], 2);    // 分OLED_ShowString(1, 10, ":");OLED_ShowNum(1, 11, MyRTC_Time[5], 2);   // 秒RTC_Time[0] = MyRTC_Time[3];RTC_Time[1] = MyRTC_Time[4];RTC_Time[2] = MyRTC_Time[5];}else if (S_ShiShi_Time_1 == 1)     // 修改时间{if (KeyNum == 5 && DebounceKey(5)){S_ShiShi_Time_2 = (S_ShiShi_Time_2 + 1) % 3;}switch (S_ShiShi_Time_2){case 0: // 修改时if (KeyNum == 4){RTC_Time[0] = (RTC_Time[0] + 1) % 24; // 加 1 后取模 24,确保在 0 - 23 范围内}if (KeyNum == 3){if (RTC_Time[0] == 0){RTC_Time[0] = 23; // 当为 0 时,减操作变为 23}else{RTC_Time[0]--;}}OLED_ShowNum(1, 5, RTC_Time[0], 2);  // 时break;case 1: // 修改分if (KeyNum == 4){RTC_Time[1] = (RTC_Time[1] + 1) % 60; // 加 1 后取模 60,确保在 0 - 59 范围内}if (KeyNum == 3){if (RTC_Time[1] == 0){RTC_Time[1] = 59; // 当为 0 时,减操作变为 59}else{RTC_Time[1]--;}}OLED_ShowNum(1, 8, RTC_Time[1], 2);  // 分break;case 2: // 修改秒if (KeyNum == 4){RTC_Time[2] = (RTC_Time[2] + 1) % 60; // 加 1 后取模 60,确保在 0 - 59 范围内}if (KeyNum == 3){if (RTC_Time[2] == 0){RTC_Time[2] = 59; // 当为 0 时,减操作变为 59}else{RTC_Time[2]--;}}OLED_ShowNum(1, 11, RTC_Time[2], 2);  // 秒break;}}else if (S_ShiShi_Time_1 == 2){MyRTC_Time[3] = RTC_Time[0];MyRTC_Time[4] = RTC_Time[1];MyRTC_Time[5] = RTC_Time[2];MyRTC_SetTime();S_ShiShi_Time_1 = 0;}
}// 读取时间函数
void TimeRead()
{MyRTC_ReadTime();OLED_ShowNum(1, 5, MyRTC_Time[3], 2);    // 时OLED_ShowString(1, 7, ":");OLED_ShowNum(1, 8, MyRTC_Time[4], 2);    // 分OLED_ShowString(1, 10, ":");OLED_ShowNum(1, 11, MyRTC_Time[5], 2);   // 秒
}// 显示传感器信息
void ChuangGan()
{OLED_ShowChinese(2, 1, 53);OLED_ShowChinese(2, 2, 54);OLED_ShowString(2, 5, ":");OLED_ShowNum(2, 6, sensorData.Guang, 4);OLED_ShowString(2, 10, "%");OLED_ShowString(2, 12, "T:");OLED_ShowNum(2, 14, sensorData.Temp, 2);OLED_ShowString(3, 12, "H:");OLED_ShowNum(3, 14, sensorData.Humi, 2);OLED_ShowString(3, 1, "PM2.5:");OLED_ShowNum(3, 7, sensorData.PM25, 4);
//    OLED_ShowNum(3, 7,  bufe[0], 4);OLED_ShowChinese(4, 1, 64);OLED_ShowChinese(4, 2, 65);OLED_ShowString(4, 5, ":");OLED_ShowChinese(4, 5, 78);OLED_ShowChinese(4, 6, 79);OLED_ShowString(4, 13, ":");OLED_ShowNum(4, 6, sensorData.KongQi, 2);OLED_ShowNum(4, 14, sensorData.ShengYin, 2);
}

7、总结

本文介绍了一个基于STM32的智能家居系统设计,支持远程控制、手动操作和自动调节三种模式。系统硬件包括STM32主控、OLED显示屏、温湿度传感器、光照传感器、空气质量传感器、PM2.5传感器等模块,通过ESP8266 WIFI模块连接云平台实现手机APP远程监控。自动模式下能根据环境参数智能控制补光灯、风扇和空调;手动模式可通过按键或APP直接操作;还支持语音控制功能。软件设计采用模块化编程,包含传感器数据采集、阈值设置、模式切换等功能模块。该系统实现了家居环境的智能监测与调控,具有实用性和可扩展性。

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

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenSCA开源社区每日安全漏洞及投毒情报资讯—2025年7月24日

2025年7月24日安全风险情报资讯在野漏洞风险&#xff08;CVE未收录&#xff09;&#xff1a;1公开漏洞精选&#xff1a;2组件投毒情报&#xff1a;2在野漏洞风险&#xff08;CVE未收录&#xff09;1.1 gemini-cli项目潜在命令注入漏洞项目详情项目描述&#xff1a;gemini-cli是…

飞算 JavaAI 深度实战:从老项目重构到全栈开发的降本增效密码

飞算 JavaAI 深度实战&#xff1a;从老项目重构到全栈开发的降本增效密码引言正文一、智能引导模块&#xff1a;老项目重构的 “手术刀” 级解决方案1.1 本地化智能分析&#xff1a;IDEA 插件实操演示1.1.1 &#x1f4cc; IDEA 插件安装步骤1.1.1.1 首先打开idea工具&#xff0…

分布式推客系统开发全解:微服务拆分、佣金结算与风控设计

一、推客系统概述与市场背景推客系统&#xff08;也称为分销系统或社交电商系统&#xff09;已成为现代电商平台和内容平台的重要增长引擎。根据最新统计数据&#xff0c;2023年社交电商市场规模已突破3万亿元&#xff0c;占整体电商市场份额的25%以上。推客系统的核心价值在于…

Linux tcpdump 抓取udp 报文

一、tcpdump 支持命令选项tcpdump -i # 指定监听网络接口tcpdump -w # 将捕获到的信息保存到文件中&#xff0c;且不分析和打印在屏幕tcpdump -r # 从文件中读取数据tcpdump -n # 不把 ip 转化成域名tcpdump -t # 在每行的输出中不显示时间tcpdump -v # 产生详细的输出tc…

Oracle数据块8KB、OS默认认块管理4KB,是否需调整大小为一致?

上班路上&#xff0c;脑中忽然闪现一个问题&#xff1a;Oracle数据库块大小&#xff08;8KB&#xff09;、操作系统文件系统块大小&#xff08;4KB&#xff09;&#xff0c;为了减少IOPS&#xff0c;需不需要调整为一致&#xff1f;在数据块保持一致的情况下&#xff0c;针对频…

卡尔曼滤波器噪声方差设置对性能影响的仿真研究

卡尔曼滤波器噪声方差设置对性能影响的仿真研究 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家,觉得好请收藏。点击跳转到网站。 1. 引言 卡尔曼滤波器是一种广泛应用于信号处理、控制系统、导航系统等领域的递归估计算法。它通过对系…

“多线程修路:当count++变成灾难现场”

1.现象 当我们操作一个线程池的时候&#xff0c;可能需要去计数&#xff0c;也就是统计count&#xff0c;那我们这里有一个疑问&#xff0c;会不会产生线程安全问题&#xff1f; 毫无疑问绝对会有线程安全问题。在线程池环境中&#xff0c;多个线程并发访问和修改一个共享的 co…

GaussDB null的用法

1 null的定义null 空值代表丢失的未知数据。 默认情况下&#xff0c;表列可以保存 null 值。 本章解释 is null 和 is not null 操作符。2 null值的赘述如果表中的列是可选的&#xff0c;那么我们可以插入一个新记录或更新一个现有记录&#xff0c;而无 需向列添加一个值。这意…

智慧农业新图景:物联网如何精准守护作物生长​

在传统农业生产模式下&#xff0c;农民往往凭借经验判断作物生长需求&#xff0c;灌溉、施肥缺乏精准性&#xff0c;导致水资源浪费、土壤板结、作物产量与品质难以提升等问题。加之气候变化无常&#xff0c;极端天气频发&#xff0c;给农业生产带来诸多不确定性&#xff0c;传…

[ComfyUI] -入门2- 小白零基础搭建ComfyUI图像生成环境教程

AI图像生成已经成为AIGC(人工智能生成内容)领域的重要组成部分,而ComfyUI作为一款可视化的Stable Diffusion工作流工具,以其模块化、高度自由化的特点吸引了越来越多创作者的关注。本文将手把手教你如何在Windows系统下,从零搭建属于自己的ComfyUI图像生成环境。 一、Comf…

java设计模式 -【单例模式】

单例模式的定义 单例模式&#xff08;Singleton Pattern&#xff09;是一种创建型设计模式&#xff0c;确保一个类只有一个实例&#xff0c;并提供一个全局访问点。常用于需要控制资源或共享状态的场景&#xff0c;例如数据库连接、日志记录器等 单例模式的实现方式 饿汉式&…

Flink 自定义类加载器和子优先类加载策略

子类优先加载Flink 默认采用了子优先&#xff08;Child-First&#xff09;的类加载策略来加载用户代码&#xff0c;以解决潜在的依赖冲突问题。我们可以通过源码来证明这一点。ChildFirstClassLoader 的实现Flink 中负责实现“子优先”加载逻辑的核心类是 ChildFirstClassLoade…

Nginx 安全加固:如何阻止 IP 直接访问,只允许域名访问

在部署网站或 Web 应用时,我们通常会通过域名来访问服务。然而,有时用户可能会尝试直接使用服务器的 IP 地址来访问,这不仅可能绕过我们的域名特定配置(如 SSL 证书、重定向规则等),还可能导致不必要的安全风险或管理混乱。本文将介绍如何配置 Nginx,使其在通过 IP 地址…

服务端处于 TIME_WAIT 状态的 TCP 连接,收到相同四元组的 SYN 后会发生什么?详解

文章目录一、先判断 SYN 是否合法1、开启「时间戳」机制1.1、合法 SYN1.2、非法 SYN2、关闭「时间戳」机制1.1、合法 SYN1.2、非法 SYN二、收到合法 SYN三、收到非法 SYN一、先判断 SYN 是否合法 1、开启「时间戳」机制 1.1、合法 SYN 客户端的 SYN「序列号」比服务端「期望…

数字化转型:一文读懂从单系统到智能架构(业务、应用、数据、技术架构)的跨越

在数字化浪潮席卷全球的今天&#xff0c;企业正经历从 “单系统孤岛” 到 “智能架构协同” 的范式革命。智能架构以业务敏捷化、应用服务化、数据价值化、技术云原生化为核心特征&#xff0c;通过四个维度的架构升级&#xff0c;破解传统 IT 系统的效率瓶颈&#xff0c;支撑企…

AUTOSAR进阶图解==>AUTOSAR_SRS_Transformer

AUTOSAR Transformer 详解 基于AUTOSAR 4.4.0标准的Transformer模块分析与说明目录 1. Transformer概述 1.1 Transformer的作用1.2 Transformer的基本特性 2. Transformer架构 2.1 整体架构2.2 类层次结构 3. Transformer类型 3.1 SOME/IP Transformer3.2 COM Based Transform…

【算法专题训练】05、最大单词长度乘积

1、题目信息 https://leetcode.cn/problems/aseY1I/description/ 给定一个字符串数组 words&#xff0c;请计算当两个字符串 words[i] 和 words[j] 不包含相同字符时&#xff0c;它们长度的乘积的最大值。假设字符串中只包含英语的小写字母。如果没有不包含相同字符的一对字符串…

Tenable 利用 AI 升级漏洞评级系统,提升风险优先级排序能力

网络安全公司 Tenable Holdings Inc. 今日宣布对其漏洞优先级评级系统&#xff08;Vulnerability Priority Rating&#xff0c;VPR&#xff09;进行人工智能驱动的升级&#xff0c;旨在帮助机构更准确地识别和应对最具威胁性的漏洞。从60%到1.6%的精准聚焦Tenable VPR 系统于20…

安全插座项目规划书

安全插座项目规划书 一、项目概述 本项目旨在设计并开发一款安全插座&#xff0c;通过集成多种安全保护功能&#xff0c;有效预防因电气故障引发的安全问题&#xff0c;如过载、短路、漏电等&#xff0c;为用户提供更加可靠的用电环境。 二、技术架构 &#xff08;一&#xff0…

Logcat日志分析

1. AndroidRuntime关键字&#xff08;跟整个系统代码相关&#xff09; 一、AndroidRuntime的核心作用 AndroidRuntime是Android系统负责启动和运行应用程序的核心组件&#xff0c;当应用因未处理的异常&#xff08;如空指针、数组越界等&#xff09;导致崩溃时&#xff0c;Andr…