目录
一、前言
二、项目简介
1.功能详解
2.主要器件
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
六、实验效果
七、资料内容
项目分享
一、前言
项目成品图片:
哔哩哔哩视频链接:
STM32智能家居语音系统(ASRPRO版)
(资料分享见文末)
二、项目简介
1.功能详解
基于STM32的智能家居语音系统(ASRPRO版)
功能如下:
- 基于STM32F103C8T6主控芯片
- 检测功能:系统检测周围 温湿度数据、烟雾浓度、光照强度
- 显示功能:将检测到的数据显示在oled屏幕上
- 手动模式:按键控制LED灯、风扇、窗帘、加湿器的开关
- 自动模式:温湿度、烟雾、光照阈值控制灯、窗帘、风扇、加湿器开关以及报警,
- 语音控制:系统也可以通过语音指令控制,LED灯、风扇、窗帘(步进电机模拟)、加湿器的运行。
- PWM调光/速:系统中的LED灯和风扇都支持PWM调节
- 阈值调节:系统传感器阈值大小可以通过按键自行设置调节
- 接入云平台:系统通过ESP8266 WIFI模块连接网络,接入机智云服务器
- 远程控制:可以通过APP查看传感器数据,以及远程控制
2.主要器件
- STM32F103C8T6单片机
- OLED 屏幕
- DHT11温湿度传感器
- MQ-2烟雾传感器
- BH1750光照传感器
- ESP8266-01S(WIFI模块)
- ASRPRO语音模块
- 有源蜂鸣器
- 风扇模块
- 大功率LED灯模块
- 加湿器模块
- 继电器
三、原理图设计
四、PCB硬件设计
PCB图
五、程序设计
#include "stm32f10x.h" // Device header
#include "oled.h"
#include "adcx.h"
#include "sensormodules.h"
#include "dht11.h"
#include "key.h"
#include "tim2.h"
#include "tim3.h"
#include "flash.h"
#include "motor.h"
#include "pwm.h"
#include "usart.h"
#include "iwdg.h"
#include "relay.h"
#include "usart3.h"
#include "BH1750.h"
#include "fan.h"SensorModules sensorData; //声明传感器模块的结构体变量
SensorThresholdValue Sensorthreshold; //声明传感器阈值结构体变量
SystemState systemState; //声明系统状态结构体变量#define FLASH_START_ADDR 0x0801f000 //写入的起始地址uint8_t oledPages = 1; //系统显示页面int main(void)
{OLED_Init();DHT11_Init();Key_Init();MOTOR_Init();Buzzer_Init();Relay_Init();Init_BH1750();LED_Init();Fan_Init();ADCX_Init();Timer2_Init(9, 14398);Uart2_Init(9600);Uart1_Init(115200);IWDG_Init();Uart3_Init();PWM_Init(100 - 1, 720 - 1);Sensorthreshold.tempValue = FLASH_R(FLASH_START_ADDR); //从指定页的地址读FLASHSensorthreshold.humiValue = FLASH_R(FLASH_START_ADDR+2); //从指定页的地址读FLASHSensorthreshold.luxValue = FLASH_R(FLASH_START_ADDR+4); //从指定页的地址读FLASHSensorthreshold.smokeValue = FLASH_R(FLASH_START_ADDR+6); //从指定页的地址读FLASHSensorthreshold.flameValue = FLASH_R(FLASH_START_ADDR+8); //从指定页的地址读FLASHGENERAL_TIM_Init();userInit(); //完成机智云初始赋值gizwitsInit(); //开辟一个环形缓冲区gizwitsSetMode(WIFI_AIRLINK_MODE);Delay_ms(1000);while (1){IWDG_ReloadCounter(); //使能重装载寄存器计数SensorScan(); //获取传感器数据switch (oledPages){case DISPLAY_PAGE1:OLED_Menu1(); //显示主页面1固定信息SensorDataDisplay1();//显示传感器1数据/* 手动模式下按键控制执行器的运行 */if (!systemState.mode){LED_PWM_KEY(); //LED按键控制Fan_PWM_KEY(); //风扇按键控制/* 按键控制步进电机的运行 */if(KeyNum == KEY_4 && systemState.motorCommand.motorLocation == motorLocation_OFF){KeyNum = 0;systemState.motorCommand.motorAnterogradeFlag = 1;}else if ((KeyNum == KEY_4 && systemState.motorCommand.motorLocation == motorLocation_ON)){KeyNum = 0;systemState.motorCommand.motorReversalFlag = 1;}}/*按键按下时切换模式*/if (KeyNum == KEY_1){KeyNum = 0;systemState.mode = !systemState.mode;if (!systemState.mode){Buzzer_OFF();Relay_OFF();}}/*按键按下时进入阈值设计界面*/if (KeyNum == KEY_Long1){KeyNum = 0;oledPages = SETTINGS_PAGE;OLED_Clear();}Asrpro(); //语音控制MotorOperation(); //步进电机控制break;case SETTINGS_PAGE:OLED_Option(SetSelection()); //实现阈值设置页面的选择功能OLED_SetInterfacevoid(); //显示阈值设置界面1的固定内容ThresholdModification(SetSelection()); //实现阈值调节功能 //判断是否退出阈值设置界面if (KeyNum == KEY_2){KeyNum = 0;oledPages = DISPLAY_PAGE1; //跳转到主界面OLED_Clear(); //清屏//存储修改的传感器阈值至flash内 FLASH_W(FLASH_START_ADDR, Sensorthreshold.tempValue,Sensorthreshold.humiValue,Sensorthreshold.luxValue, Sensorthreshold.smokeValue, Sensorthreshold.flameValue);}break;default: break;}userHandle(); //更新机智云数据点变量存储的值gizwitsHandle((dataPoint_t *)¤tDataPoint); //数据上传至机智云 }
}
六、实验效果
七、资料内容