项目成品图片:
哔哩哔哩视频链接:
https://www.bilibili.com/video/BV1zVwLeTEDx/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2
(资料分享见文末)
01
—
项目简介
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灯模块
-
加湿器模块
-
继电器
02
—
原理图设计

03
—
PCB硬件设计
PCB图


04
—
程序设计
SensorModules sensorData; //声明传感器模块的结构体变量
SensorThresholdValue Sensorthreshold; //声明传感器阈值结构体变量
SystemState systemState; //声明系统状态结构体变量
uint8_toledPages =1; //系统显示页面
intmain(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); //从指定页的地址读FLASH
Sensorthreshold.humiValue =FLASH_R(FLASH_START_ADDR+2); //从指定页的地址读FLASH
Sensorthreshold.luxValue =FLASH_R(FLASH_START_ADDR+4); //从指定页的地址读FLASH
Sensorthreshold.smokeValue =FLASH_R(FLASH_START_ADDR+6); //从指定页的地址读FLASH
Sensorthreshold.flameValue =FLASH_R(FLASH_START_ADDR+8); //从指定页的地址读FLASH
GENERAL_TIM_Init();
userInit(); //完成机智云初始赋值
gizwitsInit(); //开辟一个环形缓冲区
gizwitsSetMode(WIFI_AIRLINK_MODE);
Delay_ms(1000);
while(1)
{
IWDG_ReloadCounter(); //使能重装载寄存器计数
SensorScan(); //获取传感器数据
switch(oledPages)
{
caseDISPLAY_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;
}
elseif((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;
caseSETTINGS_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); //数据上传至机智云
}
}
05
—
实验效果


资料分享(百度网盘)
https://pan.baidu.com/s/1zHsarNp6l3Myh9laqpiwWA?pwd=qdcb 提取码: qdcb
