【单片机毕业设计选题24003】-基于STM32和阿里云的家庭安全监测系统

news2024/12/23 18:41:18

系统功能:

此设计采用STM32单片机采集环境温湿度,烟雾浓度和一氧化碳浓度显示在OLED上,并将这些信息上报至阿里云平台。

1. 上电连接手机热点后自动连接阿里云,可通过阿里云平台收到系统上报的温湿度,烟雾

浓度,一氧化碳数据以及系统状态信息,并可以通过阿里云下发风扇开关命令。

2. 硬件系统包含四个机械按键,第一个按键为系统显示界面切换,第二个和第三个按键

为当前显示界面的设定阈值增减,第四个按键为手动开启/关闭风扇。

3. 系统有三个显示界面,第一个界面显示温湿度/继电器状态/系统状态,第二个界面

显示烟雾传感器设定阈值及状态,第三个界面显示一氧化碳传感器设定阈值及状态。系统功能框图:

资料获取方法

主要功能模块原理图

系统主要功能模块代码

初始化代码:

  /* USER CODE BEGIN 1 */


  /* USER CODE END 1 */


  /* MCU Configuration--------------------------------------------------------*/


  /* Reset of all peripherals, Initializes the Flash interface and the Systick. */

  HAL_Init();


  /* USER CODE BEGIN Init */

    InitVar();


  /* USER CODE END Init */


  /* Configure the system clock */

  SystemClock_Config();


  /* USER CODE BEGIN SysInit */


  /* USER CODE END SysInit */


  /* Initialize all configured peripherals */

  MX_GPIO_Init();

  MX_USART1_UART_Init();

  MX_USART2_UART_Init();

  MX_ADC1_Init();

  /* USER CODE BEGIN 2 */

//uart2打开接收中断

    HAL_UART_Receive_IT(&huart2, (uint8_t*)&uart2RecBuff, 1);

   

    InitOled();

    InitOledDisp();

    ResetDHT11();

//初始化ESP8266

    ESP8266_Init();   

    HAL_Delay(100);

    OledFill(0x00);     //全屏熄灭  

ESP8266接入阿里云代码:

//硬件复位ESP8266

    HAL_GPIO_WritePin(ESP8266RST_GPIO_Port, ESP8266RST_Pin, GPIO_PIN_RESET);

         HAL_Delay(250);

    HAL_GPIO_WritePin(ESP8266RST_GPIO_Port, ESP8266RST_Pin, GPIO_PIN_SET);

         HAL_Delay(500);

//关闭板载LED

    HAL_GPIO_WritePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin, GPIO_PIN_SET);

         ESP8266_Clear();

//测试AT指令

         printf("AT Testing\r\n");

         while(ESP8266_SendCmd("AT\r\n", "OK", 200))

         {

                  HAL_Delay(1000);

         }

         HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin); 

         HAL_Delay(500);

//设置为Station   

         printf("set CWMODE\r\n");

         while(ESP8266_SendCmd("AT+CWMODE=1\r\n", "OK", 200))

         {

                  HAL_Delay(1000);

         }

         HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin); 

         HAL_Delay(500);

//上电不自动连接AP

         printf("set CWAUTOCONN\r\n");

         while(ESP8266_SendCmd("AT+CWAUTOCONN=0\r\n", "OK", 200))

         {

                  HAL_Delay(1000);

         }

         HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin); 

         HAL_Delay(500);

//关闭回显

    printf("set ATE0\r\n");

    while(ESP8266_SendCmd("ATE0\r\n", "OK", 200))

    {

        HAL_Delay(1000);

    }

    HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);  

    HAL_Delay(500);

//配置WIFI

         printf("set Wifi\r\n");

         while(ESP8266_SendCmd("AT+CWJAP=\""WIFI_SSID"\",\""WIFI_PASSWD"\"\r\n", "OK", 500))

         {

                  HAL_Delay(1000);

    }      

         HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);

         HAL_Delay(500);

//MQTT USER CONFIG

    printf("mqtt config\r\n");

    while(ESP8266_SendCmd("AT+MQTTUSERCFG=0,1,\""MQTT_CLIENT_ID"\",\""MQTT_USER_NAME"\",\""MQTT_PASSWD"\",0,0,\"\"\r\n", "OK", 500))

    {

        HAL_Delay(1000);

    }  

    HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);

    HAL_Delay(1000);

//MQTT连接服务器

    printf("mqtt broker\r\n");

    while(ESP8266_SendCmd("AT+MQTTCONN=0,\""BROKER_ASDDRESS"\",1883,0\r\n", "OK", 500))

    {

        HAL_Delay(1000);

    }  

    HAL_GPIO_TogglePin(OnBoardLED_GPIO_Port, OnBoardLED_Pin);

HAL_Delay(500);

读传感器数据:

//读传感器值,AD值

void ReadSensorVal(void)

{

//获取温度值

    getTempVal = DHT11_Data.temp_int;

//获取湿度值

    getHumiVal = DHT11_Data.humi_int;

//获取烟雾传感器值

    getMQ2Val = ReadADCChannel(ADC_CHANNEL_4);

//获取一氧化碳传感器值

    getMQ7Val = ReadADCChannel(ADC_CHANNEL_5);

//烟雾和一氧化碳超标后需打开风扇,自动开风扇

    if((getMQ2Val>setMQ2Val)||(getMQ7Val>setMQ7Val))

    {

        relayState = true; 

        RELAY_ON();

    }

    else

    {

        relayState = false;

    }

//四个传感器值中任意一个超标都报警

    if((getMQ2Val>setMQ2Val)||(getMQ7Val>setMQ7Val)

        ||(getTempVal>setTempVal)||(getHumiVal>setHumiVal))

    {

        sysAlarm = true;

        BUZZER_ON();

    }

    else

    {

        sysAlarm = false;

        BUZZER_OFF();

    }

}

系统资料

此设计提供的资料包含原理图PCB(包含PDF,AD,立创EDA三个版本),源代码,系统框图,主程序流程图,物料清单(包含使用到的器件手册),功能操作说明等。

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

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

相关文章

数字经济红利惠及全民,从掏钱消费到赚钱消费的转变,你准备好了吗?

伴随科技飞速发展,我们迎来了一个全新的经济时代——数字经济。数字经济以其独特的魅力,正为我们每个人带来前所未有的红利。 那么,面对数字经济的红利,我们是否已经做好了准备?我们又该如何把握这个时代赋予我们的机…

期末测试2(1)---PTA

一开始写错了, 因为这个再定义一个和原函数一样类型的进行存储, 然后将第一个设置为最大的,依次用循环比较后面的, 最后输出 但是这个适用于找最大的、字符串这样最后只输出一个最大项比较好 对于结构体不好将比较的这个数所…

学了这篇面试经,轻松收割网络安全的offer

网络安全面试库 吉祥学安全知识星球🔗除了包含技术干货:Java代码审计、web安全、应急响应等,还包含了安全中常见的售前护网案例、售前方案、ppt等,同时也有面向学生的网络安全面试、护网面试等。 0x1 应届生面试指南 网络安全面…

【课程总结】Day8(上):深度学习基本流程

前言 在上一篇课程《【课程总结】Day7:深度学习概述》中,我们了解到: 模型训练过程→本质上是固定w和b参数的过程;让模型更好→本质上就是让模型的损失值loss变小;让loss变小→本质上就是求loss函数的最小值&#xf…

SQL Server中的FOR XML PATH以及Split

前提 数据库是在2016年以下的版本,以上的版本,现在有最新的函数可以支持者两个了 Split 在c#中Split可以将以指定字符分割的字符串转换为字符串数组,这里主要是用于,主表存储了多个从表的id,存储的时候用的字符串&a…

企业级Flask项目移植记录【待补完】

背景 Flask项目A从老电脑C1移植到新电脑C2上 更新日志 1-240614上线第一版经验,博主关于这个项目包的问题还没有解决,正在解决中,但是整体思路大家在移植的时候可以借鉴。 思路 1-首先生产环境的python解释器等相关的东西最好严格保持一…

海康充电桩报文校验TCP校验和

1 TCP校验文档校验文档要求: 校验码描述 校验码计算范围包含包头标识、消息头和消息体,校验算法采用 TCP 和校验,具体规则如下。 将待校验的所有数据分为 16 位的字(大端序),如果总长度为奇数个字节,则在最后增添一个 位都为 0 的字节; 将所有 16 位的字进行累加,累加…

SemanticKITTI 拼接语义点云帧

文章目录 KITTISemanticKITTISemantic Segmentation and Panoptic SegmentationSemantic Scene Completion 数据转换语义标签和点云拼接 KITTI The odometry benchmark consists of 22 stereo sequences, saved in loss less png format: We provide 11 sequences (00-10) wit…

【等保资料】等级保护定级指南及网络安全解读(ppt原件)

新版网络安全等级保护定级指南网络安全等级保护工作的作用对象,主要包括基础信息网络、工业控制系统、云计算平台、物联网、使用移动互联技术的网络和大数据等。 软件全套精华资料包清单部分文件列表: 工作安排任务书,可行性分析报告&#xf…

TVS管选择

在RS485和CAN电路设计中,经常要考虑“静电和浪涌保护”,怎么选择TVS管,很少有人讲解。 1、先了解TVS管 TVS管有单向管和双向管,通常后缀为CA的是双向TVS管,只有字母A的是单向TVS管。见下图: 2、TVS选择依…

一文理清sshc包的使用场景和掌握两种连接方式及异常场景

一文理清sshc、ssh包的使用场景和两种连接方式 SSH协议SSH(Secure Shell)协议支持通过多种编程语言实现客户端和服务端的功能,包括Go、Python、Java、C#等。 GO语言 sshc包的使用建立连接1.DialWithKey2.DialWithPasswd 运行命令异常场景思维…

【并发编程系列一】并发编年史:线程的双刃剑——从优势到风险的全面解析

文章目录 并发简史🖥️初期探索(20世纪50-60年代)并发理论基础(1965年以后)并行计算的兴起(1970年代至1980年代)现代并发技术(1990年代至今) 线程的优势😍发挥…

CleanMyMac X和腾讯柠檬清理谁更优秀?最新6.18活动CleanMyMac 优惠码

经常有新关注的粉丝问,同样做为垃圾清理软件,付费CleanMyMac和免费的柠檬清理哪个更好用?其实,两款软件都是属于非常成熟的软件,一个有着悠久的开发迭代历史,另一个更是背靠鹅厂金主爸爸,很难说…

SAP 角色授权账户 重复的问题 解决方案

直接从agr_usrs 里面删除新的 *&---------------------------------------------------------------------* *& Report ZRPT_BC_ROLEASSIGN_RM_DUP *&---------------------------------------------------------------------* *&角色授权去重 *&--------…

【Android】文本服务器获取内容

链接web服务器,打开apaquee 收到数据 public void getNewsIndexData() throws Exception{String sUrl"http://10.107.24.12:8080/newsIndex.json";URL urlnew URL(sUrl);HttpURLConnection urlConn(HttpURLConnection) url.openConnection();InputStrea…

Linux Kernel 编程-你不知道的printk(2)

内核版本:6.1 书接上回:Linux Kernel 编程-你不知道的printk(1):https://mp.weixin.qq.com/s/TIuxhG3b-KBYXzrDYy__Aw 上回我们介绍了: printk()的简单使用pintk 的实现:ring buffer使用 systemd 命令 journalctl 查…

计算机视觉全系列实战教程:(九)图像滤波操作

1.图像滤波的概述 (1)Why (为什么要进行图像滤波) 去噪:去除图像在获取、传输等过程中的各种噪音干扰提取特征:使用特定的图像滤波器提取图像特定特征 (2)What (什么是图像滤波) 使用滤波核对图像进行卷积运算或非线性运算,以达到去噪或提…

经典的网站系统架构(入门级)

从开发到部署,从用户访问到底层数据库,介绍搭建网站系统的经典架构的10个核心部分。 (图转自bytebytego,翻译整理by dogstar) 1、使用Git管理和协同源代码,通过CI/CD或Git的Webhook方式自动同步更新部署到服…

Python开源项目周排行 2024年第9周

#2024年第9周2024年6月3日1buku强大的浏览器书签管理工具。这是一款开源的书签命令行管理工具,它轻量、隐私安全且易于使用,支持从主流浏览器导入书签、自动获取书签信息、跨平台同步和强大的搜索功能。2flagsmith轻松管理功能开关和配置的平台。这是一个…

计算机网络(6) UDP协议

一.UDP数据报格式 UDP(User Datagram Protocol,用户数据报协议)是一种简单的传输层协议,与TCP(Transmission Control Protocol,传输控制协议)相比,UDP提供一种无连接、不可靠的数据传…