STM32项目分享:智能家居语音系统(ASRPRO版)

目录

一、前言

二、项目简介

1.功能详解

2.主要器件

三、原理图设计

四、PCB硬件设计

PCB图

五、程序设计

六、实验效果

七、资料内容

项目分享


一、前言

项目成品图片:

哔哩哔哩视频链接:

STM32智能家居语音系统(ASRPRO版)

(资料分享见文末)

二、项目简介

1.功能详解

基于STM32的智能家居语音系统(ASRPRO版)

功能如下:

  1. 基于STM32F103C8T6主控芯片
  2. 检测功能:系统检测周围 温湿度数据、烟雾浓度、光照强度
  3. 显示功能:将检测到的数据显示在oled屏幕上
  4. 手动模式:按键控制LED灯、风扇、窗帘、加湿器的开关
  5. 自动模式:温湿度、烟雾、光照阈值控制灯、窗帘、风扇、加湿器开关以及报警,
  6. 语音控制:系统也可以通过语音指令控制,LED灯、风扇、窗帘(步进电机模拟)、加湿器的运行。
  7. PWM调光/速:系统中的LED灯和风扇都支持PWM调节
  8. 阈值调节:系统传感器阈值大小可以通过按键自行设置调节
  9. 接入云平台:系统通过ESP8266 WIFI模块连接网络,接入机智云服务器
  10. 远程控制:可以通过APP查看传感器数据,以及远程控制

2.主要器件

  • STM32F103C8T6单片机
  • OLED 屏幕
  • DHT11温湿度传感器
  • MQ-2烟雾传感器
  • BH1750光照传感器
  • ESP8266-01S(WIFI模块)
  • ASRPRO语音模块
  • 有源蜂鸣器
  • 风扇模块
  • 大功率LED灯模块
  • 加湿器模块
  • 继电器

三、原理图设计

四、PCB硬件设计

PCB图

五、程序设计

cpp 复制代码
#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);	//从指定页的地址读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)
		{
			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 *)&currentDataPoint);	//数据上传至机智云					
	}
}

六、实验效果

七、资料内容

项目分享

相关推荐
雷门大师姐2 小时前
14.DS18B20温度传感器
单片机·嵌入式硬件
触角010100014 小时前
OLED屏幕开发全解析:从硬件设计到物联网显示实战 | 零基础入门STM32第五十二步
驱动开发·stm32·单片机·嵌入式硬件·物联网
蓑衣客VS索尼克4 小时前
无感方波开环强拖总结
经验分享·单片机·学习
傍晚冰川6 小时前
【江协科技STM32】ADC数模转换器-学习笔记
笔记·科技·stm32·单片机·嵌入式硬件·学习
Whappy0018 小时前
第三节:基于Winform框架的串口助手小项目---串口操作《C#编程》
linux·单片机·c#
爱吃奶酪的松鼠丶9 小时前
51单片机之蓝牙模块的使用
单片机·嵌入式硬件·51单片机
盐析大白兔10 小时前
STM32G431RBT6--(3)片上外设及其关系
stm32·单片机·嵌入式硬件
与光同尘 大道至简11 小时前
中国嵌入式单片机就业形势分析
arm开发·python·单片机·嵌入式硬件·github·硬件工程
青云交14 小时前
Java 大视界 -- Java 大数据在智能家居能源管理与节能优化中的应用(120)
java·大数据·智能家居·数据处理·能源管理·节能优化·行为预测