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图 

五、程序设计 

#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);	//数据上传至机智云					
	}
}

六、实验效果 

七、资料内容

项目分享

### ASRPROSTM32的相关资料及教程 #### 关于ASRPRO模块 ASRPRO是一款基于图形化编程的语音识别模块,其主要特点包括开发方式简单、语音识别率高以及操作便捷[^1]。该模块适用于多种嵌入式应用场景,尤其适合需要快速原型设计和产品化的项目。 #### STM32简介及其适用场景 STM32系列微控制器由STMicroelectronics公司生产,广泛应用于工业自动化、消费电子等领域。它具有高性能ARM Cortex-M内核、丰富的外设接口以及强大的生态系统支持。尽管ESP32-C3提供了另一种选择[^2],但在某些特定需求下,STM32仍然是许多开发者的第一选择。 #### ASRPROSTM32的集成方案 目前官方并未提供直接针对ASRPROSTM32联合使用的具体教程或开发文档。然而,可以通过以下方法实现两者的协同工作: 1. **硬件连接** 将ASRPRO模块通过UART或其他通信协议(如I2C/SPI)与STM32相连。具体的引脚定义需参照各自的数据手册完成电路设计。 2. **软件配置** 利用STM32的标准库或者HAL库编写驱动程序来解析来自ASRPRO模块的数据流。例如,在接收到语音指令后触发相应的动作逻辑处理。 3. **固件更新与调试工具链设置** 如果涉及到自定义功能扩展,则可能还需要考虑如何下载最新的固件本至目标板卡上;同时也要准备好必要的IDE环境搭建好整个项目的编译流程。 以下是简单的代码片段展示如何初始化串口用于接收来自ASRPRO的消息: ```c #include "stm32f4xx_hal.h" UART_HandleTypeDef huart2; void MX_USART2_UART_Init(void){ huart2.Instance = USART2; huart2.Init.BaudRate = 9600; // 设置波特率为9600bps huart2.Init.WordLength = UART_WORDLENGTH_8B; huart2.Init.StopBits = UART_STOPBITS_1; huart2.Init.Parity = UART_PARITY_NONE; huart2.Init.Mode = UART_MODE_TX_RX; HAL_UART_Init(&huart2); } uint8_t buffer[50]; int main(){ MX_USART2_UART_Init(); while(1){ if(HAL_UART_Receive(&huart2,buffer,sizeof(buffer),HAL_MAX_DELAY)==HAL_OK){ /* Process received data */ } } } ``` #### 注意事项 当尝试将不同厂商的产品组合在一起时,请务必仔细阅读双方的技术规格书并确认兼容性问题。此外还需关注实时性能表现是否满足预期要求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值