STM32项目分享:智能家居语音系统

时间:2024-06-13 12:13:46

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB打板焊接图:

五、程序设计 

六、实验效果 

七、包含内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

https://www.bilibili.com/video/BV1K94y1H7mk/?share_source=copy_web&vd_source=097fdeaf6b6ecfed8a9ff7119c32faf2

(资料分享见文末) 

二、项目简介

1.功能详解

基于STM32的智能家居语音系统

功能如下:

  1. 温湿度采集:系统通过DHT11模块采集温湿度
  2. 烟雾监测:通过MQ-2模块采集环境中烟雾浓度
  3. 光照强度采集:通过BH1750传感器采集环境光照强度
  4. 窗帘控制:通过步进电机转动模拟窗帘控制
  5. 风扇控制:通过继电器和指示灯模拟风扇驱动
  6. 照明控制:通过继电器和指示灯模拟照明驱动
  7. 蜂鸣器报警:环境烟雾异常情况下蜂鸣器报警
  8. OLED显示:显示温湿度、光照强度和烟雾浓度
  9. APP功能:使用机智云APP,包括功能有控制照明灯和风扇开关、显示当前温湿度信息
  10. 自动模式:烧录自动模式程序,系统根据光强大小控制窗帘和LED灯的开闭,同时禁止手动模式的APP控制

2.主要器件

  • STM32F103C8T6最小系统板
  • DHT11温湿度传感器
  • OLED显示屏(4针I2C协议)
  • WiFi模块(ESP8266-01s)
  • MQ-2烟雾传感器
  • BH1750光照强度传感器
  • 28BYJ51步进电机
  • 继电器
  • 蜂鸣器
  • LED灯

三、原理图设计

四、PCB硬件设计

1.PCB图 

2.PCB打板焊接图:

五、程序设计 

int main ( void )
{ 
	/* 系统时钟树配置 */
	RCC_Configuration();
	/* 中断系统配置 */
	NVIC_Configuration();
	/* 初始化硬件延时, 使用滴答定时器完成 */
	delay_init();
    /* 板级初始化 */
	DEBUG_UART_Config( );
	DEBUG_LOG("Bsp init\n");
	/* 上电延时,等待各个模块运行稳定 */
	delay_ms( 200 );
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_AFIO|RCC_APB2Periph_GPIOB|RCC_APB2Periph_GPIOF, ENABLE); //使能相应接口的时钟,以及RCC_APB2Periph_AFIO
	GPIO_PinRemapConfig(GPIO_Remap_SWJ_JTAGDisable, ENABLE); //禁用JTAG
	/* 初始化定时器3, 中断频率 1000hz */
    FML_TIME_Init();
    FML_TIME_Register(Sys_timer_handle, 1);	//系统时间片,1tick = 1ms
    FML_TIME_Start(Sys_timer_handle); //开启定时 
	/* 配置按键引脚 */
	//Key_GPIO_Config(p_SysParamHandle->p_keyhandle);	
	/* LED Fan IO 初始化 */
	LED_Init( );
	BEEP_Init();
	Moto_Init();
	/* dht11 初始化 */
	DHT11_Init();
	/* 语音模块初始化 */
	ld3322_init( );
	RegisterLd3322(p_SysParamHandle->psLdHandle, CmdList, CMD_NUM);	/*!< 注册指令参数表 */
	Switch_GPIO_Config( );
	/* 机智云SDK初始化 */
	Gizwits_Init();
	/* 0.96OLED初始化 */
	OLED_Init();
	BH1750_Init();
	ADC_Sensor_Init();
	/*!< 延时确保初始页面错误 */
	delay_ms(300);
	/* OLED显示初始画面 */
	OLED_InitPage( ); 
    while ( 1 )
	{ 
    /* 传感器数据 */
       	if (p_SysParamHandle->u32SensorTim == 0)
	    {
		p_SysParamHandle->u32SensorTim = 200;
		p_SysParamHandle->u16Lightness = bh_data_read( );	//!< 读取光照强度
		get_mq2_value( &p_SysParamHandle->fMqValue );	//!< 读取烟雾浓度
		DHT11_Read_TempAndHumidity( p_SysParamHandle->psDHT11DataHandle );//!< 读取温湿度
	    }
        /* ld3320语音识别模块 */ 
	    uint16_t index;
	    if (psLdHandle->bl_rev_cmd_flg == CMD_REV_OK)
	    {
	    	psLdHandle->bl_rev_cmd_flg = CMD_REV_NO_OK;
	    	for (index=0; index<psLdHandle->u16_cmd_num; index++)
		    {
			    if (!strcmp(psLdHandle->pCmdTable[index].cmd_str, psLdHandle->pu8_rev_cmd_buf))
			    {
				    psLdHandle->pCmdTable[index].funCallback();
				    DEBUG_LOG("Ld3322 check OK\n");
				    break;
			    }
		    }
		    if (index == psLdHandle->u16_cmd_num)
		    {
			    DEBUG_LOG("Ld3322 Erorr\n");
		    }
		    User_MemSet(psLdHandle->pu8_rev_cmd_buf, 0x0, 30);
	    }
        /* 机智云云端协议处理 - 任务 */
	    gizwitsHandle( p_SysParamHandle->p_DataPoint );
	    /* 机智云数据同步 - 任务 */
	    app_SyncData_Task( p_SysParamHandle );
        /* oled参数更新 - 任务 */
	    char str[16] = {0};
	    if (p_SysParamHandle->u32LcdUpdateTim == 0)
	    {
		    /* 任务时间重装载 */
		    p_SysParamHandle->u32LcdUpdateTim = 1000;
		    sprintf(str, "%d", p_SysParamHandle->psDHT11DataHandle->temp_int);
		    OLED_ShowCnAndAsciiStr(40, 		0,		str, 2);
		    sprintf(str, "%d", p_SysParamHandle->psDHT11DataHandle->humi_int);
		    OLED_ShowCnAndAsciiStr(40, 		2,		str, 2);
		    sprintf(str, "%d", p_SysParamHandle->u16Lightness);
		    OLED_ShowCnAndAsciiStr(80, 		4,		str, 2);
		    sprintf(str, "%.2f", p_SysParamHandle->fMqValue);
		    OLED_ShowCnAndAsciiStr(80, 		6,		str, 2);
		    /* 机智云事件处理 - 线程 */ 
	        app_GizwitsDataEvent_Handle( p_SysParamHandle );
	    }
    }
}

六、实验效果 

七、资料内容

项目分享