一、设计简介
STM32智能家居语音系统升级版。功能如下:
1)温湿度采集、烟雾监测、光照强度采集
2)窗帘控制:通过步进电机转动模拟窗帘控制
3)风扇控制:通过继电器和指示灯模拟风扇驱动
4)照明控制:通过继电器和指示灯模拟照明驱动
5)蜂鸣器报警:环境烟雾异常情况下蜂鸣器报警
6)OLED显示:显示温湿度、光照强度和烟雾浓度
7)APP功能:手动模式下使用机智云APP,包括功能有控制照明灯和风扇开关
8)自动模式:切换为自动模式,系统根据光强大小控制窗帘和LED灯的开闭,根据温度值控制风扇开关。
源代码原理图相关资料见文末
二、硬件选型
-
STM32微控制器:选择stm32F103c8t6最小系统板。
-
温湿度传感器:DHT11,用于采集室内温湿度数据。
-
烟雾传感器:MQ-2传感器,用于检测烟雾浓度。
-
光照强度传感器:BH1750,用于采集光照强度。
-
步进电机驱动:ULN2003步进电机驱动器,用于控制窗帘的步进电机。
-
继电器模块:用于控制风扇、照明灯的开关。
-
OLED显示屏:0.96英寸SSD1306 OLED,用于显示环境数据。
-
蜂鸣器:有源蜂鸣器,用于报警。
-
语音模块:SNR8016语音识别模块
-
Wi-Fi模块:ESP8266,用于连接机智云APP和STM32微控制器
三、软件环境
Keil5 MDK:stm32单片机源代码程序编写及下载代码
ST-Link 驱动程序:用于下载程序到 STM32。
机智云手机APP
四、所需硬件以及传感器模块
4.1 stm32f103c8t6(1个)
STM32F103C8T6单片机是一款非常用的单片机型号,可以方便灵活的进行嵌入式系统开发。首先,它的处理器基于Cortex-M3内核,最高工作频率达72MHz。STM32F103C8T6拥有64KB闪存和20KB SRAM,非常适合中小型单片机开发项目。
具有非常丰富的外设接口,如串口USART、SPI通信、I2C通讯、CAN通讯和USB,在与单片机外设通信方面非常方便。有多个GPIO通用IO口,定时器,中断系统,灵活配置为输入,输出、模拟输入或PWM输出,可以连接各类传感器和模块。
内部集成的12位逐次逼近型ADC和DAC,支持高精度模拟信号处理。STM32F103C8T6还支持低功耗模式,适合电池供电的应用场景。结合强大的STM32开发生态,包括库函数和工具链,可以让开发者很方便的完成单片机项目的开发。
4.2 wifi模块ESP8266(ESP01s)(1个)
一、基本信息
- ESP-01S是安信可出品的一款功能强大的Wi-Fi模块采用ESP8266处理器,ESP-01S模块需要与主控制器(如Arduino、STM32等)进行连接,通过串口通信UART接口与单片机进行数据传输。ESP-01S是一款功能强大、易于使用的Wi-Fi模块,适用于各种物联网和智能家居应用。
- Wi-Fi功能:支持标准的IEEE802.11 b/g/n协议和完整的TCP/IP协议栈,可以方便地与其他设备或网络进行通信。
- 工作模式:支持STA模式和AP模式。在STA模式下,可以通过路由器连接到互联网,使手机或电脑能够实现对设备的远程控制。在AP模式下,可以作为热点,使其他设备能够连接到它。
- AT指令支持:初始情况下,ESP-01S通常预装了Espressif提供的AT指令固件,这意味着可以通过发送简单的AT指令来控制模块的Wi-Fi连接和数据传输。
二、软件配置
- 固件烧录:用户可以根据需要进行固件烧录和配置,以满足特定的应用需求。
- 串口通信参数:通常ESP-01S默认波特率为115200,数据位为8位,停止位为1位,无校验。
4.3 MQ系列传感器(1个)
MQ-2、MQ-7和MQ-135都是MQ系列的气体传感器模块,
-
MQ-2气体传感器所使用的气敏材料是在清洁空气中电导率较低的二氧化锡(SnO2)。当传感器所处环境中存在可燃气体时,传感器的电导率随空气中可燃气体浓度的增加而增大。利用简单的电路即可将电导率的变化转换为与该传感器气体浓度相对应的输出信号。MQ-2气体传感器对液化气、丙烷、氢气的灵敏度高,对天然气和其他可燃蒸汽的检测也很理想。这种传感器可检测多种可燃性气体,是一款适合多种应用的低成本传感器。
-
-
引脚说明:
- VCC:电源正极接口,可外接3.3~5V供电电源。
- GND:电源负极接口,可外接电源负极或地线(GND)。
- DO:数字信号输出接口(0和1),可外接单片机的GPIO。
- AO:模拟信号输出接口,可外接单片机的ADC采样通道。
- MQ-7是一氧化碳传感器模块,属于气敏传感器检测报警模块。它能够灵敏地检测一氧化碳气体的浓度,并输出相应的电信号。MQ-7一氧化碳传感器模块广泛应用于家庭用气体泄漏报警器、工业用可燃气体报警器等领域,用于监测一氧化碳气体的浓度
4.4 BMP280气压传感器(1个)
BMP280是一款由博世公司推出的数字气压传感器,它采用了先进的APSM(Advanced Porous Silicon Membrane)工艺,具有小封装、低功耗的特点:
4.4.1 外观与引脚
BMP280传感器通常具有六个引脚,具体名称与功能如下:
- pin1(VCC):3.3V供电,切记不可以接5V,以避免烧毁。
- pin2(GND):接地。
- pin3(SCL):I2C通信模式时钟信号。
- pin4(SDA):I2C通信模式数据信号。
- pin5(CSB):SPI通信模式下用到的引脚,片选引脚,拉低后启用。
- pin6(SDO):传感器地址控制位。
有些BMP280传感器版本可能有8个引脚,但常用的仍是上述6个引脚。
4.4.2 功能与参数
BMP280传感器能够测量环境温湿度和大气压强,其主要参数如下:
-
温度测量:
- 测量范围:-40~85°C。
- 测量误差:±0.5℃。
- 分辨率:0.1℃。
-
湿度测量(部分型号支持):
- 测量范围:0%~100%。
- 湿度响应时间:大于1秒。
- 湿度测量误差:±2%。
- 分辨率:0.8%。
-
气压测量:
- 测量范围:300~1100hPa(百帕斯卡)。
- 测量误差:±1hPa。
- 分辨率:0.18Pa。
- 相对精度:±0.12hPa(相当于±1米)。
4.4.3 通信方式
BMP280支持I2C和SPI两种通信方式:
- I2C通信:通过SCL(时钟线)和SDA(数据线)进行数据传输,SDO用于设置传感器的I2C地址。
- SPI通信:通过SCL(时钟线)、SDI(数据输入线,三线模式下为双向数据线)和SDO(数据输出线,三线模式下无用)进行数据传输,CSB用于片选。
4.4.4 工作模式
BMP280传感器有三种工作模式:
- 睡眠模式:传感器不工作,功耗最低。
- 触发模式:执行单次测量后,传感器进入睡眠状态,以节省资源。
- 正常模式:传感器在活动测量周期和非活动待机周期之间自动循环。
4.4.5 应用与特点
BMP280传感器广泛应用于无人机定高、天气监控、增强GPS导航、室内导航、户外休闲和体育应用、天气预报、医疗保健(如肺活量测定)等领域。其特点包括:
4.4.6 使用注意事项
- 在使用BMP280传感器时,需要注意供电电压不能超过3.3V,以避免损坏传感器。
- 在进行数据采集之前,需要对传感器进行初始化,包括读取补偿参数、设置工作模式、配置过采样参数等。
- 在读取数据时,需要按照数据手册中的说明进行寄存器操作,以确保数据的正确性和稳定性。
五、原理图及设计流程图
六、程序代码
/* Includes ------------------------------------------------------------------*/
#include "stm32f10x.h"
#include "SysApp/AppSys.h"
/**
* name: RCC_Configuration
* brief: 系统时钟树配置
*/
void RCC_Configuration(void)
{
#if 1
ErrorStatus HSEStartUpStatus;
/* RCC 系统复位 */
RCC_DeInit();
/* 开启 HSE */
RCC_HSEConfig(RCC_HSE_ON);
/* 等待 HSE 准备好 */
HSEStartUpStatus = RCC_WaitForHSEStartUp();
if (HSEStartUpStatus == SUCCESS)
{
/* Enable Prefetch Buffer */
FLASH_PrefetchBufferCmd(FLASH_PrefetchBuffer_Enable);
/* Set 2 Latency cycles */
FLASH_SetLatency(FLASH_Latency_2);
/* PLLCLK = 8MHz * 9 = 72 MHz */
RCC_PLLConfig(RCC_PLLSource_HSE_Div1, RCC_PLLMul_9);
/* AHB clock = SYSCLK = 72 MHz */
RCC_HCLKConfig(RCC_SYSCLK_Div1);
/* APB2 clock = HCLK = 72 MHz */
RCC_PCLK2Config(RCC_HCLK_Div1);
/* APB1 clock = HCLK/2 = 36 MHz */
RCC_PCLK1Config(RCC_HCLK_Div2);
/* Enable PLL */
RCC_PLLCmd(ENABLE);
/* Wait till PLL is ready */
while(RCC_GetFlagStatus(RCC_FLAG_PLLRDY) == RESET);
/* elect PLL as system clock source */
RCC_SYSCLKConfig(RCC_SYSCLKSource_PLLCLK);
}
#else
SystemInit();
#endif
}
/**
*@brief NVIC_Configuration实现NVIC配置
*
*/
static void NVIC_Configuration(void)
{
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_1);
}
/******************************************************************************************************************/
/* ********************* Name: Smart Lock System ***************************************************************/
/************************ MCU: STM32F103C8T6 ***************************************************************/
/******************************************************************************************************************/
/**
* name: main
* brief: 主函数
*/
int main ( void )
{
/* 系统时钟树配置 */
RCC_Configuration();
/* 中断系统配置 */
NVIC_Configuration();
/* 初始化硬件延时, 使用滴答定时器完成 */
delay_init();
/* 板级初始化 */
app_BspInit( &SysParamHandle );
/* 主循环 */
Key2_long_press_down_handle();
while ( 1 )
{
app_Process( &SysParamHandle );
}
}