基于STM32开发的智能门铃系统
目录
- 引言
- 环境准备工作
- 硬件准备
- 软件安装与配置
- 系统设计
- 系统架构
- 硬件连接
- 代码实现
- 初始化代码
- 控制代码
- 应用场景
- 家庭门铃系统
- 智能社区门禁管理
- 常见问题及解决方案
- 常见问题
- 解决方案
- 结论
1. 引言
智能门铃系统结合了传统门铃功能与现代技术,通过摄像头、麦克风、扬声器等组件,实现视频通话、远程监控、智能识别等功能。本文将介绍如何使用STM32微控制器设计和实现一个智能门铃系统。
2. 环境准备工作
硬件准备
- STM32开发板(例如STM32F103C8T6)
- 摄像头模块(例如OV7670,用于视频采集)
- 麦克风模块(用于音频采集)
- 扬声器模块(用于音频输出)
- 按钮模块(用于门铃按键)
- Wi-Fi模块(例如ESP8266,用于远程通信)
- OLED显示屏(用于显示门铃状态)
- LED和蜂鸣器(用于提示)
- 面包板和连接线
- USB下载线
软件安装与配置
- Keil uVision:用于编写、编译和调试代码。
- STM32CubeMX:用于配置STM32微控制器的引脚和外设。
- ST-Link Utility:用于将编译好的代码下载到STM32开发板中。
步骤:
- 下载并安装Keil uVision。
- 下载并安装STM32CubeMX。
- 下载并安装ST-Link Utility。
3. 系统设计
系统架构
智能门铃系统通过STM32微控制器连接摄像头、麦克风、扬声器、按钮和Wi-Fi模块,实现门铃按键触发、视频采集和远程通信。系统包括视频采集模块、音频处理模块、用户交互模块和远程通信模块。
硬件连接
- 将摄像头模块的VCC引脚连接到STM32的3.3V引脚,GND引脚连接到GND,数据引脚连接到STM32的GPIO和I2C引脚。
- 将麦克风模块的输出引脚连接到STM32的ADC引脚(例如PA0),VCC引脚连接到STM32的3.3V引脚,GND引脚连接到GND。
- 将扬声器模块的输入引脚连接到STM32的DAC引脚(例如PA4),VCC引脚连接到STM32的3.3V引脚,GND引脚连接到GND。
- 将按钮模块的一个引脚连接到STM32的GPIO引脚(例如PA1),另一个引脚连接到GND。
- 将Wi-Fi模块(例如ESP8266)的TX、RX引脚分别连接到STM32的USART引脚(例如PA9、PA10),VCC引脚连接到STM32的3.3V引脚,GND引脚连接到GND。
- 将OLED显示屏的VCC引脚连接到STM32的3.3V引脚,GND引脚连接到GND,SCL和SDA引脚连接到STM32的I2C引脚(例如PB6、PB7)。
- 将LED和蜂鸣器的引脚分别连接到STM32的GPIO引脚(例如PA2、PA3)。
4. 代码实现
初始化代码
#include "stm32f1xx_hal.h"
#include "camera.h"
#include "microphone.h"
#include "speaker.h"
#include "button.h"
#include "wifi.h"
#include "oled.h"
#include "led.h"
#include "buzzer.h"void SystemClock_Config(void);
static void MX_GPIO_Init(void);
static void MX_USART1_UART_Init(void);
static void MX_I2C1_Init(void);
static void MX_ADC1_Init(void);
static void MX_DAC_Init(void);int main(void) {HAL_Init();SystemClock_Config();MX_GPIO_Init();MX_USART1_UART_Init();MX_I2C1_Init();MX_ADC1_Init();MX_DAC_Init();Camera_Init();Microphone_Init();Speaker_Init();Button_Init();WiFi_Init();OLED_Init();LED_Init();Buzzer_Init();while (1) {if (Button_IsPressed()) {OLED_DisplayString("Doorbell Pressed");LED_On();Buzzer_On();HAL_Delay(1000);LED_Off();Buzzer_Off();Camera_Capture();Microphone_Record();WiFi_SendData();Speaker_Play();}HAL_Delay(500);}
}void SystemClock_Config(void) {// 配置系统时钟
}static void MX_GPIO_Init(void) {// 初始化GPIO__HAL_RCC_GPIOA_CLK_ENABLE();GPIO_InitTypeDef GPIO_InitStruct = {0};GPIO_InitStruct.Pin = GPIO_PIN_0 | GPIO_PIN_1 | GPIO_PIN_2 | GPIO_PIN_3 | GPIO_PIN_4;GPIO_InitStruct.Mode = GPIO_MODE_OUTPUT_PP;GPIO_InitStruct.Pull = GPIO_NOPULL;GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_LOW;HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
}static void MX_USART1_UART_Init(void) {// 初始化USART1用于Wi-Fi通信huart1.Instance = USART1;huart1.Init.BaudRate = 115200;huart1.Init.WordLength = UART_WORDLENGTH_8B;huart1.Init.StopBits = UART_STOPBITS_1;huart1.Init.Parity = UART_PARITY_NONE;huart1.Init.Mode = UART_MODE_TX_RX;huart1.Init.HwFlowCtl = UART_HWCONTROL_NONE;huart1.Init.OverSampling = UART_OVERSAMPLING_16;if (HAL_UART_Init(&huart1) != HAL_OK) {Error_Handler();}
}static void MX_I2C1_Init(void) {// 初始化I2C1用于OLED显示屏和摄像头通信hi2c1.Instance = I2C1;hi2c1.Init.ClockSpeed = 100000;hi2c1.Init.DutyCycle = I2C_DUTYCYCLE_2;hi2c1.Init.OwnAddress1 = 0;hi2c1.Init.AddressingMode = I2C_ADDRESSINGMODE_7BIT;hi2c1.Init.DualAddressMode = I2C_DUALADDRESS_DISABLE;hi2c1.Init.OwnAddress2 = 0;hi2c1.Init.GeneralCallMode = I2C_GENERALCALL_DISABLE;hi2c1.Init.NoStretchMode = I2C_NOSTRETCH_DISABLE;if (HAL_I2C_Init(&hi2c1) != HAL_OK) {Error_Handler();}
}static void MX_ADC1_Init(void) {// 初始化ADC1用于音频采集ADC_ChannelConfTypeDef sConfig = {0};hadc1.Instance = ADC1;hadc1.Init.ScanConvMode = ADC_SCAN_DISABLE;hadc1.Init.ContinuousConvMode = ENABLE;hadc1.Init.DiscontinuousConvMode = DISABLE;hadc1.Init.ExternalTrigConv = ADC_SOFTWARE_START;hadc1.Init.DataAlign = ADC_DATAALIGN_RIGHT;hadc1.Init.NbrOfConversion = 1;if (HAL_ADC_Init(&hadc1) != HAL_OK) {Error_Handler();}sConfig.Channel = ADC_CHANNEL_0;sConfig.Rank = ADC_REGULAR_RANK_1;sConfig.SamplingTime = ADC_SAMPLETIME_55CYCLES_5;if (HAL_ADC_ConfigChannel(&hadc1, &sConfig) != HAL_OK) {Error_Handler();}HAL_ADC_Start(&hadc1);
}static void MX_DAC_Init(void) {// 初始化DAC用于音频播放DAC_ChannelConfTypeDef sConfig = {0};hdac.Instance = DAC;hdac.Init.DAC_Trigger = DAC_TRIGGER_NONE;hdac.Init.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;if (HAL_DAC_Init(&hdac) != HAL_OK) {Error_Handler();}sConfig.DAC_Trigger = DAC_TRIGGER_NONE;sConfig.DAC_OutputBuffer = DAC_OUTPUTBUFFER_ENABLE;if (HAL_DAC_ConfigChannel(&hdac, &sConfig, DAC_CHANNEL_1) != HAL_OK) {Error_Handler();}HAL_DAC_Start(&hdac, DAC_CHANNEL_1);
}
控制代码
#include "camera.h"
#include "microphone.h"
#include "speaker.h"
#include "button.h"
#include "wifi.h"
#include "oled.h"
#include "led.h"
#include "buzzer.h"void Camera_Init(void) {// 初始化摄像头模块
}void Camera_Capture(void) {// 捕捉视频帧
}void Microphone_Init(void) {// 初始化麦克风模块
}void Microphone_Record(void) {// 录制音频
}void Speaker_Init(void) {// 初始化扬声器模块
}void Speaker_Play(void) {// 播放音频
}void Button_Init(void) {// 初始化门铃按钮
}bool Button_IsPressed(void) {// 检测门铃按钮是否按下
}void WiFi_Init(void) {// 初始化Wi-Fi模块
}void WiFi_SendData(void) {// 发送数据到服务器
}void OLED_Init(void) {// 初始化OLED显示屏
}void OLED_DisplayString(char *str) {// 在OLED显示屏上显示字符串
}void LED_Init(void) {// 初始化LED
}void LED_On(void) {// 打开LED
}void LED_Off(void) {// 关闭LED
}void Buzzer_Init(void) {// 初始化蜂鸣器
}void Buzzer_On(void) {// 打开蜂鸣器
}void Buzzer_Off(void) {// 关闭蜂鸣器
}
⬇帮大家整理了单片机的资料
包括stm32的项目合集【源码+开发文档】
点击下方蓝字即可领取,感谢支持!⬇
点击领取更多嵌入式详细资料
问题讨论,stm32的资料领取可以私信!
5. 应用场景
家庭门铃系统
本系统可以应用于家庭智能门铃,通过视频采集和语音通信,实现远程查看来访者和语音对讲,提升家庭安全性和便利性。
智能社区门禁管理
本系统还可以应用于智能社区门禁管理,住户可以通过手机或其他设备查看门铃视频,远程控制门禁开关,提升社区管理效率。
6. 常见问题及解决方案
常见问题
- 摄像头视频采集效果不佳
- Wi-Fi连接不稳定
- 按钮按下无响应
解决方案
- 调整摄像头位置和光线条件
- 确保摄像头位置适当,避免背光或光线不足的情况,必要时调整摄像头焦距和角度。
- 优化Wi-Fi设置
- 检查Wi-Fi信号强度和网络配置,确保Wi-Fi模块与路由器的连接稳定。
- 检查按钮连接
- 确认按钮与STM32的连接正确,检查电路的完整性,确保按钮按下时能够及时响应。
7. 结论
本文介绍了如何使用STM32微控制器和多种模块实现一个智能门铃系统,从硬件准备、环境配置到代码实现,详细介绍了每一步的操作步骤。通过本文的学习,读者可以掌握基本的嵌入式开发技能,并将其应用到智能家居和社区管理项目中。
相关文章:
基于STM32开发的智能门铃系统
目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 初始化代码控制代码应用场景 家庭门铃系统智能社区门禁管理常见问题及解决方案 常见问题解决方案结论 1. 引言 智能门铃系统结合了传统门铃功能与现代技术,通过摄像头、麦克风、…...
【WebRTC指南】远程视频流
远程视频流使用入门 RTCPeerConnection 连接到远程对等设备后,就可以在它们之间流式传输音频和视频。此时,我们会将从 getUserMedia() 收到的数据流连接到 RTCPeerConnection。媒体流包含至少一个媒体轨道,当我们想将媒体传输到远程对等设备时,它们会分别添加到 RTCPeerCo…...
前端构建URL的几种方法比对,以及函数实现
当我们在前端开发中处理 URL 时,可能会用到字符串拼接、ES6 模板语法 (template literals) 或者使用 new URL() 构造函数。这三者各有优劣,适用于不同的场景。 1. 字符串拼接与 ES6 模板语法 字符串拼接 和 ES6 模板语法 都是将不同的字符串片段组合在…...
场外个股期权如何发出行权指令?
场外期权行权指令也就是平仓指令的意思,一般场外个股期权交易有三种方式开仓和行权平仓指令,分别是市价,限价和半小时询价,跟普通股票的买卖和交易方式类似,唯一区别是手动发出场外个股期权的行权指令,下文…...
AH8681锂电升压3.7升5V升12V 2A可支持QC2.0 3.0
135.3806.7573在探讨AH8681这款专为3.7V升压5V至12V,并具备2A输出能力,同时兼容QC2.0与QC3.0快充协议的升压芯片时,我们不得不深入其技术细节、应用场景、设计优势以及市场定位等多个维度,以全面理解其在现代电子设备中的重要作用…...
那些年我们一起遇到过的奇技淫巧
EVAL长度限制突破技巧 PHP Eval函数参数限制在16个字符的情况下 ,如何拿到Webshell? 写一段限制长度在小于17位的字符,拿下webshell <?php highlight_file(__FILE__); $param $_REQUEST[param]; if (strlen($param) < 17 &&am…...
机器学习笔记:编码器与解码器
目录 介绍 组成结构 代码实现 编码器 解码器 合并编码器-解码器 思考 介绍 在机器翻译中,输入的序列与输出的序列经常是长度不相等的序列,此时,像自然语言处理这种直接使用循环神经网络或是门控循环单元的方法就行不通了。因此&#x…...
加密狗创新解决方案助力工业自动化
面临的挑战 早在1991年,COPA-DATA就认识到需要一个既能提供长期保护又能灵活应对的解决方案,以防止软件盗版并确保客户在各种复杂的工业环境下能够顺利使用其产品。这一解决方案不仅要兼容Windows系统,还必须在网络连接受限的情况下ÿ…...
浅谈文件缓冲区和翻译环境
文章目录 1、文件缓冲区2、程序环境A、翻译过程概述B、详解编译和链接a、编译b、链接 1、文件缓冲区 ANSIC 标准采用”文件缓冲系统“处理数据文件,即在文件的读写过程中会使用到文件缓冲区,而文件缓冲区分为输入缓冲区和输出缓冲区。 读写文件 写文件…...
《腾讯NCNN框架的模型转换x86/mips交叉编译推理》详细教程
NCNN的编译运行交叉编译 1.在Ubuntu上编译运行ncnn1)编译ncnn x86 linux2)测试ncnn x86 linux 2. 模型转换1)onnx2)pnnx 3.在x86上加载推理模型1)准备工作2)编写C推理代码3)编写Cmakelist编译 4.在MIPS上进行交叉编译推理1&#x…...
关于近期安卓开发书籍阅读观后感
概述 由于笔者是Java转Android,对于安卓相关知识欠缺,故找一些入门和进阶书籍观看。笔者搜到的相关的安卓推荐博客:【Android – 学习】学习资料汇总_android书籍强烈推荐-CSDN博客相对来说比较全面。 阅读历程 笔者先阅读的是郭霖老师的…...
Servlet——个人笔记
Servlet——个人笔记 文章目录 [toc]Servlet简介Servlet命名Servlet由来实现过程 Servlet 相对 CGI 的优势简要说说什么是CGI Servlet 在IDEA中开发流程Servlet注解方式配置WebServlet注解源码WebServlet注解使用 Servlet常见容器Servlet 生命周期简介测试 Servlet 方法init()…...
富格林:戳穿虚假交易保证安全
富格林指出,虚假交易亏损骗局一直以来都是投资者的诟病。不少投资者来到这个赛道的目的铁定是为了安全盈利增值财富,因此如何去杜绝虚假交易便成了当务之急。实际上,有不少投资技巧可以为保障我们的交易安全带来一些庇护。下面富格林就给大家…...
Linux学习——文本处理工具与正则表达式
目录 一,grep 1,grep介绍 2,grep的常用选项 3,grep使用演示 1,基本使用 直接查找字符串: 使用选项 2,使用正则表达式进行匹配 1,正则表达式介绍 2,使用范例 二&…...
大厂进阶四:React源码Fiber架构解析
本文主要内容: 1、React Concurrent 2、React15架构 3、React16架构 4、Fiber架构 5、任务调度循环和fiber构造循环区别 一、React Concurrent React在解决CPU卡顿是会用到React Concurrent的概念,它是React中的一个重要特性和模块,主要的…...
MongoDB的WiredTiger存储引擎
作者:太阳 从MongoDB 3.2 开始,MongoDB实例默认的存储引擎为WiredTiger,WiredTiger存储引擎具体以下几大优点: 文档级并发 将数据持久化到磁盘 快照和checkpoint 数据压缩 本地数据加密 一、文档级别并发 1、WiredTiger使…...
windows 版本Jenkins的Jenkinsfile中共享变量
场景 jenkins部署在windows服务器上的,需要在Jenkinsfile中获取命令执行的结果存入一个变量,然后在后续的执行中使用此变量 一开始想的是定义一个环境变量,如下所示, pipeline {agent anystages {stage(test) {steps {bat for /…...
Android-->产物收集(含apk文件重命名, aab文件重命名)
以前写过修改apk生成路径和文件名的文章, 如下: AS–›Gradle 7.0.0/4.1.0/4.0/3.3/3.0 修改APK生成路径和文件名(附AAR修改方式以及分析过程)_com.android.build.gradle.internal.api.libraryvaria-CSDN博客 这种方法入侵了gradle,破坏了原有的gradle环境, 经常会导致如下问…...
matlab实现迷宫最佳路径规划
在MATLAB中实现迷宫路径的最佳路径规划,我们可以使用多种算法,其中最常见和高效的是A搜索算法(A Search Algorithm)。A*算法结合了最佳优先搜索和Dijkstra算法的优点,通过启发式函数来评估每个节点的优先级,…...
【自用】Python爬虫学习(二):网页解析的三种方式(re、bs4、xpath)
Python爬虫学习(二) 网页解析的三种方式1.正则表达式-re解析常用表达:re常用函数:在html中的运用: 2.BeautifulSoup解析常用语法:用法举例: 3.xpath解析示例代码1:示例代码2…...
19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
零门槛NAS搭建:WinNAS如何让普通电脑秒变私有云?
一、核心优势:专为Windows用户设计的极简NAS WinNAS由深圳耘想存储科技开发,是一款收费低廉但功能全面的Windows NAS工具,主打“无学习成本部署” 。与其他NAS软件相比,其优势在于: 无需硬件改造:将任意W…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
CVPR 2025 MIMO: 支持视觉指代和像素grounding 的医学视觉语言模型
CVPR 2025 | MIMO:支持视觉指代和像素对齐的医学视觉语言模型 论文信息 标题:MIMO: A medical vision language model with visual referring multimodal input and pixel grounding multimodal output作者:Yanyuan Chen, Dexuan Xu, Yu Hu…...
从WWDC看苹果产品发展的规律
WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...
云启出海,智联未来|阿里云网络「企业出海」系列客户沙龙上海站圆满落地
借阿里云中企出海大会的东风,以**「云启出海,智联未来|打造安全可靠的出海云网络引擎」为主题的阿里云企业出海客户沙龙云网络&安全专场于5.28日下午在上海顺利举办,现场吸引了来自携程、小红书、米哈游、哔哩哔哩、波克城市、…...
解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八
现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…...
《通信之道——从微积分到 5G》读书总结
第1章 绪 论 1.1 这是一本什么样的书 通信技术,说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号(调制) 把信息从信号中抽取出来&am…...
k8s业务程序联调工具-KtConnect
概述 原理 工具作用是建立了一个从本地到集群的单向VPN,根据VPN原理,打通两个内网必然需要借助一个公共中继节点,ktconnect工具巧妙的利用k8s原生的portforward能力,简化了建立连接的过程,apiserver间接起到了中继节…...
成都鼎讯硬核科技!雷达目标与干扰模拟器,以卓越性能制胜电磁频谱战
在现代战争中,电磁频谱已成为继陆、海、空、天之后的 “第五维战场”,雷达作为电磁频谱领域的关键装备,其干扰与抗干扰能力的较量,直接影响着战争的胜负走向。由成都鼎讯科技匠心打造的雷达目标与干扰模拟器,凭借数字射…...
