【单片机毕业设计3-基于stm32c8t6的智能家居系统】

【单片机毕业设计3-基于stm32c8t6的智能家居系统】

  • 前言
  • 一、功能介绍
  • 二、硬件部分
  • 三、软件部分
  • 总结


前言

🔥这里是小殷学长,单片机毕业设计篇3 基于stm32的智能家居控制系统
🧿创作不易,拒绝白嫖(有需可点击最后链接)可私
企鹅号:2836235214

在这里插入图片描述


一、功能介绍

------------------------------------------智能家居系统-----------------------------------------
a. 通过DHT11温湿度传感器模块与显示屏结合将实时采集的环境温湿度的数据进行显示监控,当温度低于或高于我们所设阈值时则会触发蜂鸣器发出相应的警报;
b. 红外传感器模块,通过红外感应进行灯光的控制。
c. MQ2烟雾传感器进行可燃气体的检测;
d. 雨滴传感器检测是否有下雨,通过发出警报提醒居家者;
e. 火焰传感器实时检测当前环境是否有火灾,并发出警报警示居家者及时处理;
f. 震动传感器,类似声控灯,检测到震动后就会打开灯光;
g. 8组继电器实现电器的模拟控制(空凋、冰箱、电视、风扇、灯等);
h. 语音模块(SU-03T)通过智能公元AI平台进行相应命令配置从而与单片机进行串口通信控制;
i. 蓝牙模块(HC-05)通过手机端蓝牙APP实现控制;
j. WIFI (ESP826601s)模块,通过OneNet云端平台进行数据上传监测和指令下发控制。
功能可定制


在这里插入图片描述

🔥 实物展示

在这里插入图片描述

在这里插入图片描述

二、硬件部分

下面为该毕设中所用到的相关硬件说明,具体参数不做细节描述

硬件材料

在这里插入图片描述
在这里插入图片描述

PCB和原理图

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、软件部分

在这里插入图片描述

部分流程图

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

程序

main.c部分代码

 int main(void){	unsigned char *dataPtr = NULL;unsigned short timeCount = 0;	//发送间隔变量delay_init();	    	   //延时函数初始化	  NVIC_Configuration();  //设置NVIC中断分组2:2位抢占优先级,2位响应优先级Led_Init();            //LED初始化Init_MQ2();            //MQ2初始化Beep_Init();           //蜂鸣器初始化InitRelay();           //继电器初始化Fire_Init();           //火焰初始化Rain_Init();           //雨滴初始化Shake_Init();          //震动初始化Infrared_Init();       //红外初始化TIMER3_Init();         //定时器初始 1msInit_Usart();          //串口初始化LCD_Init();	           //液晶屏初始化//温度初始化if(!DHT11_Init()){printf(" Error! T DHT11 HAS NO RESPOND...\n");}else{printf("\r\n THE DHT11 HAS RESPOND");}Init_Inteface();	      //界面初始化ESP8266_Init();					//初始化ESP8266 //printf("8266_INIT_END\n");while(OneNet_DevLink())			//接入OneNETdelay_ms(500);printf("接入onenet成功");delay_ms(500);Show_Str(180,280,RED,BLUE,(unsigned char *)"WIFI加载成功...",16,0);	LCD_Clear(WHITE);delay_ms(500);	onenet_flag = 1;          //WIFI接入成功后将其标志位置1 在定时器中进行相关OneNet数据上报处理while(1) {		if(temp > set_temp || humi > set_humi){Buzzer_Action(5);}Param_Interface();      //参数界面实时刷新Sensor_Task();          //传感器任务Usart_Task();           //串口任务if(++timeCount >= 150)		//时间间隔1s{//传感器检测if(DHT11_Read_Data(&temp,&humi) == 1){delay_ms(100);//printf("temp:%02d  humi:%02d \r\n",temp,humi);}OneNet_SendData();//发送数据给onenet//printf("send_data_end\n");timeCount = 0;ESP8266_Clear();}	dataPtr = ESP8266_GetIPD(0);//获取平台返回的数据if(dataPtr != NULL)//如果返回数据不为空OneNet_RevPro(dataPtr);//平台返回数据检测		delay_ms(10); 		}
}//1 蓝牙 RX- PA9  TX-PA10
void USART1_IRQHandler(void)
{if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中断{Usart_cmd = USART_ReceiveData(USART1);USART_ClearFlag(USART1, USART_FLAG_RXNE);}
}//2 语音 RX-  PA2  TX-PA3
void USART2_IRQHandler(void)
{if(USART_GetITStatus(USART2,USART_IT_RXNE) != RESET){Usart_cmd = USART_ReceiveData(USART2);				USART_ClearFlag(USART2, USART_FLAG_RXNE);}
}void TIM3_IRQHandler()
{static unsigned int t = 0,set_t = 0,set_t1 = 0,temp_t,onenet_t,t2 = 0,t3 = 0;  if(TIM_GetITStatus(TIM3, TIM_IT_Update)){t++;                //时间变量temp_t++;           //温度刷新变量if(t == 1000)  //1s{t = 0;sec++;if(sec == 60) //1hour{sec = 0;hour++;if(hour == 24){hour = 0;}}sprintf(strtime,"%4d-%02d-%02d %02d:%02d:%02d\r\n",year,month,day,hour,min,sec);  //更新时间//printf("%02d:%02d:%02d\r\n",hour,min,sec);  //调试打印信息 不用的时候屏蔽}//========================定时功能==============================if(light_flag == 1)  //开启灯光定时模式{corridor_light(1);set_t++;  if(set_t  == 1000)  //1s{set_t = 0;set_light_timer--;if(set_light_timer == 0)  //时间到{corridor_light(0);light_flag = 0;        //关闭定时标志set_light_timer = 10;          //再次重装初值}}}if(fan_flag == 1)  //开启定时模式{//打开风扇Relay3_ON();set_t1++;  if(set_t1  == 1000)  //1s{set_t1 = 0;set_fan_timer--;if(set_fan_timer == 0)  //时间到{//关闭风扇Relay3_OFF();fan_flag = 0;        //关闭定时标志set_fan_timer = 10;          //再次重装初值}}}	//下面为温湿度数据更新 200msif(temp_t == 200){temp_t = 0;DHT11_Read_Data(&temp,&humi);	}//下面为OneNet云平台数据上报 2S更新一次/*if(onenet_flag == 1){onenet_t++;}if(onenet_t == 2000){OneNet_SendData();//发送数据给onenetonenet_t = 0;}*///下面为红外检测后的功能处理 走廊灯亮5s后自动关闭if(people_flag == 1){corridor_light(1);status[15] = 1;t2++;if(t2 == 5000)     //5s时间到 关闭走廊灯标志位清零  灯光状态置0 {t2 = 0;corridor_light(0);status[15] = 0;people_flag = 0;}}//下面为震动传感器检测后的功能处理 卧室灯亮5s后熄灭if(shake_flag == 1){Relay8_ON();status[7] = 1;	t3++;if(t3 == 5000)   //5s时间到 关闭卧室灯标志位清零  灯光状态置0 {t3 = 0;Relay8_OFF();status[7] = 0;	shake_flag = 0;}}TIM_ClearITPendingBit(TIM3, TIM_IT_Update);}
}

总结

上面为基于stm32f103c8t6的智能家居控制系统相关的大致介绍,源码,pcb和原理图以及相关文档说明做了详细说明,有需可私

🧿创作不易,拒绝白嫖

很有幸获得2023届优秀本科毕业论文和毕业设计

在这里插入图片描述

实物+资料

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Python自动化测试框架:Pytest和Unittest的区别

pytest和unittest是Python中常用的两种测试框架,它们都可以用来编写和执行测试用例,但两者在很多方面都有所不同。本文将从不同的角度来论述这些区别,以帮助大家更好地理解pytest和unittest。 1. 原理 pytest是基于Python的assert语句和Pytho…

consul安装启动流程

普通软件包安装 首先cd /opt ,将安装包放到该目录下 下载consul安装包 进入consul官网找到自己开发平台对应的安装包下载 https://www.consul.io/downloads.html 或使用命令 wget https://releases.hashicorp.com/consul/1.6.2/consul_1.6.2_linux_amd64.zip (如果…

vue3 table动态合并,自定义参数合并单元格

<template><div><el-table :data"tableData" :span-method"objectSpanMethod" border:header-cell-style"{ textAlign: center}"><el-table-column prop"area" label"区域" align"center"&g…

HW样本《关于“XXXX”微信视频号发布短视频的信息说明.exe》的逆向分析

一、概述 样本运行后会释放《关于“XXXX”微信视频号发布短视频的信息说明.doc》并打开&#xff1b;同时释放ncloud.exe恶意文件并启动&#xff1b;调用cmd命令删除样本母体&#xff1b;其中ncloud.exe会从互联网下载类似字母表的数据解密出CS木马&#xff0c;在内存加载并运行…

真就逮住23届了使劲薅呗,24届笑了

作者&#xff1a;阿秀 InterviewGuide大厂面试真题网站&#xff1a;https://top.interviewguide.cn 小伙伴们大家好&#xff0c;我是阿秀。 最近在朋友圈看到不少动态说"24届明显好转"的消息&#xff0c;也收到不少私信问是不是24届的相比于23届好多了&#xff0c;更…

深度学习阶段性回顾

本文针对过去两周的深度学习理论做阶段性回顾&#xff0c;学习资料来自吴恩达老师的2021版deeplearning.ai课程&#xff0c;内容涵盖深度神经网络改善一直到ML策略的章节。视频链接如下&#xff1a;吴恩达深度学习视频链接 &#xff08;注&#xff1a;本文出自深度学习初学者&a…

Vue中如何更好地封装组件?

子组件接受父组件传递的事件 1.子组件使用事件名"$emit(父组件中传递的事件名,想给父组件传递的参数(可选))" click"$emit(click)" 2.子组件使用 v-on"$listeners" 父组件&#xff1a; <template><div id"app"><myCo…

MyBatis的XML映射文件

Mybatis的开发有两种方式&#xff1a; 注解 XML配置文件 通过XML配置文件的形式来配置SQL语句&#xff0c;这份儿XML配置文件在MyBatis当中也称为XML映射文件。 导学&#xff1a;在MyBatis当中如何来定义一份儿XML映射文件&#xff1f; 在MyBatis当中&#xff0c;定义XML…

使用 HTML、CSS 和 JavaScript 创建多步骤表单

使用 HTML、CSS 和 JavaScript 创建多步骤表单 为了处理又长又复杂的表单&#xff0c;我们需要将它们分成多个步骤。通过一次只在屏幕上显示一些输入&#xff0c;表单会感觉更容易理解&#xff0c;并防止用户感到被大量的表单字段淹没。 在本文中&#xff0c;我将逐步指导如何…

基础堆排序(Java 实例代码)

目录 基础堆排序 一、概念及其介绍 二、适用说明 三、过程图示 四、Java 实例代码 src/runoob/heap/Heapify.java 文件代码&#xff1a; 基础堆排序 一、概念及其介绍 堆排序&#xff08;Heapsort&#xff09;是指利用堆这种数据结构所设计的一种排序算法。 堆是一个近…

Linux_5_Shell脚本编程

目录 1 基础1.1 程序组成1.2 程序编程风格1.3 编程语言1.4 编程逻辑处理方式 2 shell 脚本语言的基本结构2.1 shell脚本的用途2.2 shell脚本基本结构2.3 创建shell脚本过程2.4 脚本注释规范2.5 第一个脚本2.6 脚本调试2.7 变量2.7.1 变量2.7.2 变量类型2.7.3 编程语言分类2.7.4…

【MAC】 M2 brew安装 docker 运行失败 解决

MAC 安装 brew install --cask docker 之后一直显示docker: Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?. 网上看了一些文章 发现 这个不适用于M2 所以要从官网上下载 docker 安装成功

C++ 动态规划经典案例解析之最长公共子序列(LCS)_窥探递归和动态规划的一致性

1. 前言 动态规划处理字符相关案例中&#xff0c;求最长公共子序列以及求最短编辑距离&#xff0c;算是经典中的经典案例。 讲解此类问题的算法在网上一抓应用一大把&#xff0c;即便如此&#xff0c;还是忍不住有写此文的想法。毕竟理解、看懂都不算是真正掌握&#xff0c;唯…

多线程与并发编程面试题总结

多线程与并发编程 多线程 线程和进程的区别&#xff1f; 从操作系统层面上来讲&#xff1a;进程(process)在计算机里有单独的地址空间&#xff0c;而线程只有单独的堆栈和局部内存空间&#xff0c;线程之间是共享地址空间的&#xff0c;正是由于这个特性&#xff0c;对于同…

vscode debug python 带参数

两种方法 第一种&#xff1a; 1&#xff0c;侧边栏选择运行和调试 2&#xff0c;请先创建一个launch.json文件 3&#xff0c;并选择配置文件为python文件 此时你的工作目录下会多一个目录.vscode和该目录下一个launch.json文件&#xff0c;该文件则配置了你的debug配置。在…

【报错】ModuleNotFoundError: No module named ‘websocket‘

1 报错 ModuleNotFoundError: No module named websocket 2 解决方法 pip install websocket 1 报错 AttributeError: module websocket has no attribute enableTrace 2 分析 一般是由于websocket的依赖包没有安装造成的。websocket.enableTrace()方法是在websocket-cli…

C语言第十课----------------扫雷----------数组的经典练手题

作者前言 &#x1f382; ✨✨✨✨✨✨&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f367;&#x1f382; &#x1f382; 作者介绍&#xff1a; &#x1f382;&#x1f382; &#x1f382;…

React构建的JS优化思路

背景 之前个人博客搭建时&#xff0c;发现页面加载要5s才能完成并显示 问题 React生成的JS有1.4M&#xff0c;对于个人博客服务器的带宽来说&#xff0c;压力较大&#xff0c;因此耗费了5S的时间 优化思路 解决React生成的JS大小&#xff0c;因为我用的是react-router-dom…

prometheus告警发送组件部署

一、前言 要实现Prometheus的告警发送需要通过alertmanager组件&#xff0c;当prometheus触发告警策略时&#xff0c;会将告警信息发送给alertmanager&#xff0c;然后alertmanager根据配置的策略发送到邮件或者钉钉中&#xff0c;发送到钉钉需要安装额外的prometheus-webhook…

模拟实现消息队列(以 RabbitMQ 为蓝本)

目录 1. 需求分析1.1 介绍一些核心概念核心概念1核心概念2 1.2 消息队列服务器&#xff08;Broker Server&#xff09;要提供的核心 API1.3 交换机类型1.3.1 类型介绍1.3.2 转发规则&#xff1a; 1.4 持久化1.5 关于网络通信1.5.1 客户端与服务器提供的对应方法1.5.2 客户端额外…