STM32项目分享:家庭环境监测系统
目录
一、前言
二、项目简介
1.功能详解
2.主要器件
三、原理图设计
四、PCB硬件设计
1.PCB图
2.PCB板打样焊接图
五、程序设计
六、实验效果
七、资料内容
项目分享
一、前言
项目成品图片: 
哔哩哔哩视频链接:
https://www.bilibili.com/video/BV1oi42117dp/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2
(资料分享见文末)
二、项目简介
1.功能详解
基于STM32的家庭环境监测系统。功能如下:
- 温湿度采集:使用DHT11温湿度传感器采集环境温湿度
- 烟雾浓度采集:通过MQ-2烟雾传感器采集环境烟雾浓度
- PM2.5浓度采集:通过粉尘传感器采集环境PM2.5浓度
- 二氧化碳浓度采集:通过CO2气敏传感器检测二氧化碳浓度
- 风扇控制:可自动模式下根据环境温度触发或手动模式下APP开闭
- 加湿器控制:可自动模式下根据环境湿度触发或手动模式下APP开闭
- 窗户:可自动模式下根据PM2.5浓度触发或手动模式下APP开闭
- OLED显示:将检测到的环境数据显示在oled屏幕上。
- 蜂鸣器报警:异常情况下本地蜂鸣器触发报警
- APP功能:使用机智云APP,包括功能有自动模式和手动模式切换,控制并显示风扇、加湿器和窗户状态,查看蜂鸣器报警状态,显示当前环境温湿度、烟雾浓度和PM2,5浓度信息
2.主要器件
- STM32F103C8T6最小系统板
- DHT11温湿度传感器
- OLED显示屏(4针I2C协议)
- WiFi模块(ESP8266-01s)
- MQ-2烟雾浓度传感器
- PM2.5模块
- 28BYJ51步进电机
- 5V风扇模块
- 加湿器模块及驱动板
- 继电器
- 蜂鸣器
- LED灯
三、原理图设计
四、PCB硬件设计
1.PCB图


2.PCB板打样焊接图

五、程序设计
int main(void)
{NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);OLED_Init();ADCX_Init();GP2Y_Init();MQ2_Init();DHT11_UserConfig();MOTOR_UserConfig();Key_Init();Relay_Init();Buzzer_Init();Timer2_Init(9,14398);uart2_init(9600);uart1_init(115200);GENERAL_TIM_Init();userInit(); //完成机智云初始赋值gizwitsInit(); //开辟一个环形缓冲区Delay_ms(500);gizwitsSetMode(WIFI_AIRLINK_MODE);IWDG_Init(); //初始化看门狗while (1){IWDG_ReloadCounter(); //重新加载计数值 喂狗 switch(Menu){case 1: Menu1();//判断步进电机是否需要进行旋转if(Window_Flag_ON == 1){MOTOR_Direction_Angle(1,0,90,1); //顺时针旋转90度MOTOR_STOP();Window_Flag_ON = 0;}if(Window_Flag_OFF == 1){MOTOR_Direction_Angle(0,0,90,1); //逆时针旋转90度MOTOR_STOP();Window_Flag_OFF = 0;}break;case 2: OLED_Clear();Menu2();Menu = 3;//用于判断阈值数据有没有被更改old_Temp_value = Temp_value;old_Humi_value = Humi_value;old_Smog_value = Smog_value;old_PM25_value = PM25_value;break;case 3: //显示传感器阈值OLED_ShowNum(1,13,Temp_value,2);OLED_ShowNum(2,13,Humi_value,2);OLED_ShowNum(3,13,Smog_value,4);OLED_ShowNum(4,13,PM25_value,4);//进行阈值选择if(KeyNum == 1){KeyNum = 0;value_Option_Num++;if(value_Option_Num > 4){value_Option_Num = 1;}}//显示选择标识符“>”OLED_Option(value_Option_Num);//检测阈值数值的调节switch(value_Option_Num){case 1: if(KeyNum == 3){KeyNum = 0;Temp_value++;if(Temp_value >= 100){Temp_value = 1;}}if(KeyNum == 4){KeyNum = 0;Temp_value--;if(Temp_value >= 100){Temp_value = 99;}}break;case 2: if(KeyNum == 3){KeyNum = 0;Humi_value++;if(Humi_value >= 100){Humi_value = 1;}}if(KeyNum == 4){KeyNum = 0;Humi_value--;if(Humi_value >= 100){Humi_value = 99;}}break;case 3: if(KeyNum == 3){KeyNum = 0;Smog_value++;if(Smog_value >= 501){Smog_value = 1;}}if(KeyNum == 4){KeyNum = 0;Smog_value--;if(Smog_value >= 5001){Smog_value = 500;}}break;case 4: if(KeyNum == 3){KeyNum = 0;PM25_value++;if(PM25_value >= 501){PM25_value = 1;}}if(KeyNum == 4){KeyNum = 0;PM25_value--;if(PM25_value >= 501){PM25_value = 500;} }break;}//退出阈值设置界面if(KeyNum == 2){KeyNum = 0;//当阈值数据被更改后,才会写入FLASH中if((old_Temp_value != Temp_value) || (old_Humi_value != Humi_value) || (old_Smog_value != Smog_value) || (old_PM25_value != PM25_value)){//写入传感器阈值数据FLASH_W(FLASH_START_ADDR,Temp_value,Humi_value,Smog_value,PM25_value); }Menu = 1; //回到主菜单OLED_Clear(); //清屏}break; }userHandle(); //更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)¤tDataPoint); //数据上传至机智云 }
}
六、实验效果


七、资料内容
项目分享
相关文章:
STM32项目分享:家庭环境监测系统
目录 一、前言 二、项目简介 1.功能详解 2.主要器件 三、原理图设计 四、PCB硬件设计 1.PCB图 2.PCB板打样焊接图 五、程序设计 六、实验效果 七、资料内容 项目分享 一、前言 项目成品图片: 哔哩哔哩视频链接: https://www.bilibili.…...
华为HCIP Datacom H12-821 卷5
1.单选题 下列哪种工具不能被 route-policy 的 apply 子句直接引用? A、IP-Prefix B、tag C、community D、origin 正确答案: A 解析: 因route-policy工具中, apply 后面跟的是路由的相关属性。 但是ip-prefix是用来匹配路由的工具。 2.单选题...
Mongodb数据库基本操作
本文为在命令行模式下Mongodb数据库的基本操作整理。 目录 数据库操作 创建数据库 查看所有数据 查看当前数据库 删除数据库 断开连接 查看命令api 集合操作 查看当前数据库下集合 创建集合 删除当前数据库中的集合 文档操作 插入文档 insertOne()方法 insertMa…...
【机器学习】基于Softmax松弛技术的离散数据采样
1.引言 1.1.离散数据采样的意义 离散数据采样在深度学习中起着至关重要的作用,它直接影响到模型的性能、泛化能力、训练效率、鲁棒性和解释性。 首先,采样方法能够有效地平衡数据集中不同类别的样本数量,使得模型在训练时能够更均衡地学习…...
.NET+Python量化【1】——环境部署和个人资金账户信息查询
前言:量化资料很少,.NET更少。那我就来开个先河吧~ 以下是使用QMT进行量化开发的环境部署和基础信息获取有关操作。 1、首先自己申请券商的QMT权限,此步骤省略。 2、登陆QMT,选择极简模式,或者独立交易模式之类的。会进…...
洛谷 P10584 [蓝桥杯 2024 国 A] 数学题(整除分块+杜教筛)
题目 思路来源 登录 - Luogu Spilopelia 题解 参考了两篇洛谷题解,第一篇能得出这个式子,第二篇有比较严格的复杂度分析 结合去年蓝桥杯洛谷P9238,基本就能得出这题的正确做法 代码 #include<bits/stdc.h> #include<iostream&g…...
深入讲解C++基础知识(一)
目录 一、基本内置类型1. 类型的作用2. 分类3. 整型3.1 内存描述及查询3.2 布尔类型 —— bool3.3 字符类型 —— char3.4 其他整型 4. 有符号类型和无符号类型5. 浮点型6. 如何选择类型7. 类型转换7.1 自动类型转换7.2 强制类型转换7.3 类型转换总结 8. 类型溢出8.1 注意事项 …...
Python爬虫实战:批量下载网站图片
1.获取图片的url链接 首先,打开百度图片首页,注意下图url中的index 接着,把页面切换成传统翻页版(flip),因为这样有利于我们爬取图片! 对比了几个url发现,pn参数是请求到的数量。…...
使用 JavaScript 获取电池状态
在现代的移动设备和笔记本电脑上,了解电池状态是一项非常有用的功能。使用 JavaScript 可以轻松地获取电池的充电状态、电量百分比等信息。本文将介绍如何使用 JavaScript 访问这些信息,并将其显示在网页上。 1. HTML 结构 首先,我们需要一…...
java—类反射机制
简述 反射机制允许程序在执行期间借助于Reflection API取得任何类的内部信息(如成员变量,构造器,成员方法等),并能操作对象的属性及方法。反射机制在设计模式和框架底层都能用到。 类一旦加载,在堆中会产生…...
浏览器-服务器架构 (BS架构) 详解
目录 前言1. BS架构概述1.1 BS架构的定义1.2 BS架构的基本原理 2. BS架构的优势2.1 客户端简化2.2 易于更新和维护2.3 跨平台性强2.4 扩展性高 3. BS架构的劣势3.1 网络依赖性强3.2 安全性问题3.3 用户体验局限 4. BS架构的典型应用场景4.1 企业内部应用4.2 电子商务平台4.3 在…...
微型操作系统内核源码详解系列五(四):cm3下svc启动任务
系列一:微型操作系统内核源码详解系列一:rtos内核源码概论篇(以freertos为例)-CSDN博客 系列二:微型操作系统内核源码详解系列二:数据结构和对象篇(以freertos为例)-CSDN博客 系列…...
筛质数(暴力法、埃氏筛、欧拉筛)
筛质数(暴力法、埃氏筛、欧拉筛) 暴力法 思路分析: 直接双for循环来求解质数 如果不设置标记只是简单地执行了break会导致内部循环(由j控制)而不是立即打印i或者跳过它。如果打印语句写到内部循环中,也会导致每个 非素数也被打…...
使用USI作为主SPI接口
代码; lcd_drive.c //***************************************************************************** // // File........: LCD_driver.c // // Author(s)...: ATMEL Norway // // Target(s)...: ATmega169 // // Compiler....: AVR-GCC 3.3.1; avr-libc 1.0 // // D…...
AI播客下载:Eye on AI(AI深度洞察)
"Eye on A.I." 是一档双周播客节目,由长期担任《纽约时报》记者的 Craig S. Smith 主持。在每一集中,Craig 都会与在人工智能领域产生影响的人们交谈。该播客的目的是将渐进的进步置于更广阔的背景中,并考虑发展中的技术的全球影响…...
Flink 窗口触发器
参考: NoteWarehouse/05_BigData/09_Flink(1).md at main FGL12321/NoteWarehouse GitHub Flink系列 9. 介绍 Flink 窗口触发器、移除器和延迟数据等 | hnbian https://github.com/kinoxyz1/bigdata-learning-notes/blob/master/note/flink/Window%26%E6%97%B6…...
Java面试题:解释线程间如何通过wait、notify和notifyAll方法进行通信
在 Java 中,线程间的通信可以通过 wait()、notify() 和 notifyAll() 这三个方法实现。这些方法是 Java 线程 Thread 类的一部分,它们与 synchronized 关键字一起使用,以实现线程间的协调。 基本概念 wait():当一个线程执行到 wa…...
【机器学习 复习】第9章 降维算法——PCA降维
一、概念 1.PCA (1)主成分分析(Principal ComponentAnalysis,PCA)一种经典的线性降维分析算法。 (2)原理,这里以二维转一维为例,原来的平面变成了一条直线 这是三维变二…...
Ubuntu系统docker gpu环境搭建
Ubuntu系统dockergpu环境搭建 安装步骤前置安装安装指定版本的依赖包用docker官方脚本安装Docker-ce添加稳定仓库和GPG秘钥更新源 安装docker安装nvidia-docker2重启docker服务阿里云镜像加速 相关命令网络 docker常用命令镜像容器 docker相关问题解决方案使用wsl时docker的容器…...
网络安全-如何设计一个安全的API(安全角度)
目录 API安全概述设计一个安全的API一个基本的API主要代码调用API的一些问题 BasicAuth认证流程主要代码问题 API Key流程主要代码问题 Bearer auth/Token auth流程 Digest Auth流程主要代码问题 JWT Token流程代码问题 Hmac流程主要代码问题 OAuth比较自定义请求签名身份认证&…...
UE5 学习系列(二)用户操作界面及介绍
这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
Debian系统简介
目录 Debian系统介绍 Debian版本介绍 Debian软件源介绍 软件包管理工具dpkg dpkg核心指令详解 安装软件包 卸载软件包 查询软件包状态 验证软件包完整性 手动处理依赖关系 dpkg vs apt Debian系统介绍 Debian 和 Ubuntu 都是基于 Debian内核 的 Linux 发行版ÿ…...
抖音增长新引擎:品融电商,一站式全案代运营领跑者
抖音增长新引擎:品融电商,一站式全案代运营领跑者 在抖音这个日活超7亿的流量汪洋中,品牌如何破浪前行?自建团队成本高、效果难控;碎片化运营又难成合力——这正是许多企业面临的增长困局。品融电商以「抖音全案代运营…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)
宇树机器人多姿态起立控制强化学习框架论文解析 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一) 论文解读:交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...
JVM暂停(Stop-The-World,STW)的原因分类及对应排查方案
JVM暂停(Stop-The-World,STW)的完整原因分类及对应排查方案,结合JVM运行机制和常见故障场景整理而成: 一、GC相关暂停 1. 安全点(Safepoint)阻塞 现象:JVM暂停但无GC日志,日志显示No GCs detected。原因:JVM等待所有线程进入安全点(如…...
C++ Visual Studio 2017厂商给的源码没有.sln文件 易兆微芯片下载工具加开机动画下载。
1.先用Visual Studio 2017打开Yichip YC31xx loader.vcxproj,再用Visual Studio 2022打开。再保侟就有.sln文件了。 易兆微芯片下载工具加开机动画下载 ExtraDownloadFile1Info.\logo.bin|0|0|10D2000|0 MFC应用兼容CMD 在BOOL CYichipYC31xxloaderDlg::OnIni…...
dify打造数据可视化图表
一、概述 在日常工作和学习中,我们经常需要和数据打交道。无论是分析报告、项目展示,还是简单的数据洞察,一个清晰直观的图表,往往能胜过千言万语。 一款能让数据可视化变得超级简单的 MCP Server,由蚂蚁集团 AntV 团队…...
Linux离线(zip方式)安装docker
目录 基础信息操作系统信息docker信息 安装实例安装步骤示例 遇到的问题问题1:修改默认工作路径启动失败问题2 找不到对应组 基础信息 操作系统信息 OS版本:CentOS 7 64位 内核版本:3.10.0 相关命令: uname -rcat /etc/os-rele…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
