首页 > 其他分享 >学习STM32的智能家居安防

学习STM32的智能家居安防

时间:2024-07-28 12:28:24浏览次数:16  
标签:CR2 引脚 安防 智能家居 STM32 GPIOA ADC GPIO CRL

智能家居安防是目前智能家居领域的一个重要应用之一,它利用传感器、设备和网络技术来实现对家居环境和安全的实时监控和控制。在本文中,我们将使用STM32微控制器来实现一个基本的智能家居安防系统。

首先,我们需要列出我们的系统需求:

  1. 温湿度监测:系统需要能够实时监测室内的温度和湿度。

  2. 光线控制:系统需要能够自动根据光线强度来控制灯光的亮度。

  3. 烟雾检测:系统需要能够检测烟雾,并在检测到烟雾时触发警报。

  4. 窗户状态监测:系统需要能够监测窗户的开关状态,并在窗户异常开启时触发警报。

  5. 安全警报:系统需要能够触发安全警报并发送通知给用户。

现在,我们将逐步介绍如何使用STM32来实现这些功能。

  1. 温湿度监测:

首先,我们需要连接一个温湿度传感器到STM32的GPIO引脚上。常用的温湿度传感器有DHT11和DHT22。这里我们使用DHT22传感器作为示例。

#include "stm32f10x.h"

void DHT22_Init()
{
  // 配置GPIO引脚为输入模式
  RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // 使能GPIOA时钟
  GPIOA->CRL &= ~GPIO_CRL_CNF1; // 清除原先的配置
  GPIOA->CRL |= GPIO_CRL_CNF1_0; // 设置为浮空输入
}

uint32_t DHT22_ReadData()
{
  // 发送起始信号
  GPIOA->CRL |= GPIO_CRL_MODE1; // 设置为推挽输出
  GPIOA->BSRR = GPIO_BSRR_BR1; // 发送低电平信号,持续18ms
  Delay_ms(18);
  GPIOA->BSRR = GPIO_BSRR_BS1; // 发送高电平信号,等待传感器响应
  
  // 等待传感器响应
  GPIOA->CRL &= ~GPIO_CRL_MODE1; // 设置为浮空输入
  Delay_us(20);
  if (!(GPIOA->IDR & GPIO_IDR_IDR1)) // 如果传感器成功响应,返回0
    return 0;
  Delay_us(80);
  
  // 读取数据
  uint32_t data = 0;
  for (int i = 0; i < 32; i++) {
    while (GPIOA->IDR & GPIO_IDR_IDR1); // 等待传感器输出低电平信号
    Delay_us(30);
    if (GPIOA->IDR & GPIO_IDR_IDR1)
      data |= (1 << (31 - i));
    while (!(GPIOA->IDR & GPIO_IDR_IDR1)); // 等待传感器输出高电平信号
  }
  
  return data;
}

在上述代码中,我们先初始化了GPIO引脚,然后通过发送低电平信号和等待传感器响应来获取温湿度数据。

  1. 光线控制:

为了实现光线控制,我们需要连接一个光敏电阻到STM32的GPIO引脚。光敏电阻的阻值会随着光线强度的变化而变化,我们可以通过测量其阻值来获取光线强度信息。

#include "stm32f10x.h"

void LDR_Init()
{
  // 配置GPIO引脚为模拟输入模式
  RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // 使能GPIOA时钟
  GPIOA->CRL &= ~GPIO_CRL_CNF1; // 清除原先的配置
  GPIOA->CRL |= GPIO_CRL_CNF1_1; // 设置为模拟输入
  GPIOA->CRL &= ~GPIO_CRL_MODE1; // 设置为浮空输入

  // 配置ADC
  RCC->APB2ENR |= RCC_APB2ENR_ADC1EN; // 使能ADC1时钟
  ADC1->CR2 = ADC_CR2_ADON | ADC_CR2_CONT; // 使能ADC1,连续转换模式
  ADC1->SQR3 = 1; // 选择ADC通道1
  ADC1->CR2 |= ADC_CR2_RSTCAL; // 复位校准
  while (ADC1->CR2 & ADC_CR2_RSTCAL); // 等待校准完成
  ADC1->CR2 |= ADC_CR2_CAL; // 启动校准
  while (ADC1->CR2 & ADC_CR2_CAL); // 等待校准完成
  ADC1->CR2 |= ADC_CR2_ADON; // 启动ADC转换
  ADC1->CR2 |= ADC_CR2_SWSTART; // 启动转换
}

uint32_t LDR_ReadData()
{
  while (!(ADC1->SR & ADC_SR_EOC)); // 等待转换完成
  return ADC1->DR;
}

上述代码中,我们先初始化了GPIO引脚和ADC模块,然后通过ADC转换来获取光线强度数据。

  1. 烟雾检测:

为了实现烟雾检测,我们需要连接一个烟雾传感器到STM32的GPIO引脚。烟雾传感器通常通过测量环境中的烟雾颗粒浓度来判断是否有烟雾。

#include "stm32f10x.h"

void Smoke_Init()
{
  // 配置GPIO引脚为输入模式
  RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // 使能GPIOA时钟
  GPIOA->CRL &= ~GPIO_CRL_CNF1; // 清除原先的配置
  GPIOA->CRL |= GPIO_CRL_CNF1_0; // 设置为浮空输入
}

uint32_t Smoke_ReadData()
{
  return GPIOA->IDR & GPIO_IDR_IDR1; // 读取GPIO引脚状态
}

上述代码中,我们只需要读取GPIO引脚的状态来获取烟雾检测结果。

  1. 窗户状态监测:

为了实现窗户状态监测,我们需要连接一个磁簧传感器到STM32的GPIO引脚。磁簧传感器通常由一个开关和一个磁铁组成,当两者靠近时,开关闭合,否则开关断开。

#include "stm32f10x.h"

void Window_Init()
{
  // 配置GPIO引脚为输入模式
  RCC->APB2ENR |= RCC_APB2ENR_IOPAEN; // 使能GPIOA时钟
  GPIOA->CRL &= ~GPIO_CRL_CNF1; // 清除原先的配置
  GPIOA->CRL |= GPIO_CRL_CNF1_1; // 设置为模拟输入
  GPIOA->CRL &= ~GPIO_CRL_MODE1; // 设置为浮空输入
}

uint32_t Window_ReadData()
{
  return GPIOA->IDR & GPIO_IDR_IDR1; // 读取GPIO引脚状态
}

在上述代码中,我们只需要读取GPIO引脚的状态来获取窗户的开关状态。

  1. 安全警报:

为了实现安全警报,我们需要连接一个蜂鸣器和一个LED灯到STM32的GPIO引脚。当系统检测到安全事件时,蜂鸣器将触发警报声音,LED灯将闪烁。

#include "stm32f10x.h"

void Buzzer

标签:CR2,引脚,安防,智能家居,STM32,GPIOA,ADC,GPIO,CRL
From: https://blog.csdn.net/2401_85258012/article/details/140746665

相关文章

  • STM32的IO复用详解
    前言最近在STM32的IO复用上面吃了一个亏,所以把问题记录下来并且将IO复用的原理再深刻理解一下。起因就是自己做的项目需要用一个SPI读取数据的功能,我是用的STM32F429的HAL库,所以就将SPI的例子复制过来,之前SPI读的是开发板上面的spiflash,用的是SPI5,我自己的项目用的是SPI3,所以......
  • STM32自定义协议串口接收解析指令程序
    1、在使用串口接收自定义协议指令时,需要串口解析收到的是什么指令,举例通信报文为上位机->单片机名称长度备注帧头1Byte0x5A0x5A帧长度1Byte数据包的长度0x00-0xFF数据包命令字1Byte功能标识数据可以为空校验1Byte数据包所有字节按位异......
  • STM32 串行FLASH W25Q64 移植文件系统FatFs ——(2)
    引言简述本篇文章目标:介绍如何将FatFs文件系统移植到STM32平台上的W25Q64串行FLASH。回顾上篇内容:软件模拟SPI驱动的实现。一、FatFs文件系统简介文件系统相对庞大且复杂,需要根据具体应用的文件系统格式进行编写。通常,文件系统与底层驱动分离,便于移植。因此,在实际工程应......
  • 2024年最新STM32单片机简介
    一、STM32简介    STM32是ST公司基于ARMCortex-M内核开发的32位微控制器。    STM32常应用在嵌入式领域,如智能车、无人机、机器人、无线通信、物联网、工业控制、娱乐电子产品等。    STM32功能强大、性能优异、片上资源丰富、功耗低,是一款经典的......
  • STM32+ESP8266-连接阿里云-创建云产品流转实现STM32与Android app通讯(1)
    前言本文章的内容为STM32通过ESP8266利用AT指令连接阿里云平台,并创建设备和创建云产品流转主题,来为实现Androidapp与STM32的发送接收数据做准备。Androidapp的实现由于篇幅不宜过长,将放到下一篇文章中。演示视频实现一个简单的app来控制stm32开关灯、蜂鸣器、门(舵机),显示温......
  • STM32开发环境配置记录——关于PlatformIO + VSCode + CubeMX的集成环境配置
    前言​ 为什么配置这样的一个环境呢?鄙人受够了Keil5那个简陋的工作环境了,实在是用不下去,调试上很容易跟CubeMX的代码产生不协调导致调试——发布代码不一致造成的一系列问题。CubeIDE虽说不错,但是它的代码辅助功能和构建系统实在不敢恭维,经常出现Makefile未同步导致符号定义冲突,......
  • 零基础STM32单片机编程入门(二十二) ESP8266 WIFI模块实战含源码
    文章目录一.概要二.ESP8266WIFI模块主要性能参数三.ESP8266WIFI模块芯片内部框图四.ESP8266WIFI模块原理图五.ESP8266WIFI模块与单片机通讯方法1.硬件连接2.ESP8266模块AT指令介绍六.STM32单片机与ESP8266WIFI模块通讯实验1.硬件准备2.软件工程3.软件主要代码4.实验......
  • 嵌入式Python、ROS、SLAM、WebSocket和Node.js:智能巡逻监控安防机器人设计流程(代码示
    项目概述随着智能技术的发展,智能巡逻机器人在安防、监控和巡逻等领域的应用越来越广泛。本文将介绍一个结合嵌入式系统、机器人技术和后端开发的智能巡逻机器人。该机器人能够自主导航,实时检测异常情况(如火灾或入侵者),并将数据发送到后端服务器,以实现高效的监控和应急响应。主......
  • 用户手册:智能家居系统
    用户手册:智能家居系统1.简介本手册旨在为用户提供关于智能家居系统的使用说明。该系统由以下组件组成:智能中控面板:控制所有智能设备的核心。智能灯光:可通过中控面板或语音控制进行开关和亮度调节。智能门锁:可通过指纹、密码或手机APP进行解锁。智能摄像头:可实时监控家......
  • Clion开发STM32——移植FreeModbus
    STM32型号:STM32H743VIT6FreeModbus版本:1.6使用工具:stm32cubeMX,Clion使用STM32作从机,模式:RTU网上用keil的比较多,用Clion的比较少,如果你也用Clion,那么希望本文可以给你提供些许参考。1下载官网源码官网地址:https://www.embedded-experts.at/en/freemodbus/about/dem......