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

news2024/11/26 9:46:22

目录

一、前言

二、项目简介

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 );
	    }
    }
}

六、实验效果 

七、资料内容

项目分享

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1797115.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C51学习归纳6 --- UART串口数据通信

这一部分我认为是十分重要的&#xff0c;没有了数据的传输&#xff0c;我们做的很多事情将是没有意义的。我们一般利用串口做两件事&#xff0c;一是单片机向电脑发送信息&#xff0c;二是单片机接收电脑的信息。 一、UART原理 TXD:发送信息通道,RXD: 接收信息通道。我发送你接…

鸿蒙轻内核M核源码分析系列九 互斥锁Mutex

多任务环境下会存在多个任务访问同一公共资源的场景&#xff0c;而有些公共资源是非共享的临界资源&#xff0c;只能被独占使用。鸿蒙轻内核使用互斥锁来避免这种冲突&#xff0c;互斥锁是一种特殊的二值性信号量&#xff0c;用于实现对临界资源的独占式处理。另外&#xff0c;…

问题:律师会见委托人的方式包括团体会见和( )。 #职场发展#笔记#学习方法

问题&#xff1a;律师会见委托人的方式包括团体会见和&#xff08; &#xff09;。 参考答案如图所示

Linux常见故障处理之df命令卡住不输出

一、背景说明 朋友咨询Linux系统下输入df -h命令后没有任何输出结果&#xff0c;博主的第一反应是/根分区磁盘空间满了&#xff0c;朋友说cd等其他命令可以执行。博主又猜测可能是有人误定义了命令别名&#xff0c;进一步确认命令卡住在等待输出页面。事后博主想起来可能是共享…

CAN总线学习笔记-CAN帧结构

数据帧 数据帧&#xff1a;发送设备主动发送数据&#xff08;广播式&#xff09; 标准格式的11ID不够用了&#xff0c;由此产生了扩展格式 SOF&#xff1a;帧起始&#xff0c;表示后面一段波形为传输的数据位 ID&#xff1a;标识符&#xff0c;区分功能&#xff0c;同时决定优…

手机直连SpaceX星链,一场“酱油比鸡贵”的营销游戏

手机能支持卫星通话&#xff0c;在今天已经不算什么新闻。但手机直连卫星&#xff0c;近期确实引起了不少消费者的好奇。 最近有新闻爆出&#xff0c;马斯克的SpaceX利用运营商T-Mobile的网络&#xff0c;首次完成了通过星链&#xff08;Starlink&#xff09;卫星发送短信、视频…

Java——break、continue和return

一、break break语句用于立即终止最内层的循环或switch语句。它是一种控制流语句&#xff0c;能够在满足特定条件时跳出循环或结束switch块的执行。 1、在循环中使用 1&#xff09;一般的 break break语句可以用于for、while和do-while循环中。当在循环中遇到break语句时&a…

IP质量不够好,可以使用高质量的代理IP吗?

在当今互联网时代&#xff0c;IP代理是一个不可或缺的工具&#xff0c;但许多人可能对它的原理和应用感到困惑。IP代理涉及IP地址的使用和切换&#xff0c;旨在提供更好的隐私保护和访问控制。本文将介绍IP代理的工作原理以及为什么选择高质量的代理IP。 一、IP代理的基本原理…

LeetCode LRU缓存

题目描述 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&#xff0c;…

CarSim车辆运动轨迹绘制

CarSim车辆运动轨迹绘制 CarSim中与车辆位置有关的信息分别为Xo和Yo 输出到Simulink中 导入到工作空间中保存&#xff0c;low_carsim_path.mat &#xff0c;绘制结果曲线&#xff0c;low_carsim_path_comp.m data csvread(low_two_path.csv,1,0); low_two_path_x data(:,1)…

电商数据驱动的决策智慧:深度解析数据采集与应用||电商API接口接入与应用

引言 在数字化时代&#xff0c;数据已成为电商企业最宝贵的资产之一。通过有效的数据采集&#xff0c;企业能够洞察市场动态、理解消费者需求、优化运营策略&#xff0c;从而在激烈的市场竞争中脱颖而出。本文将深入探讨电商数据采集的重要性、常用方法以及应用实践。 一、电商…

教程 | Navicat 17 管理连接新方法

Navicat 17 提供了比以往更多的连接数据库实例的方式。除了传统的连接字符串方式以外&#xff0c;Navicat 17 还支持 URI 连接&#xff0c;无论身在何处&#xff0c;都可以轻松地通过 URI 访问对象。另外&#xff0c;还有一个新的管理连接功能&#xff0c;即允许你通过一个以用…

在github上创建(上传、关联)自已的项目

目录 创建一个github项目并进行开发。 1.github创建空项目 2. git clone 项目 3. 将项目关联 创建一个github项目并进行开发。 1.github创建空项目 右边的New 然后按步创建就行 2. git clone 项目 复制这个连接 然后在终端&#xff1a;git clone [刚才复制的连接] 3. 将…

【代码随想录】【算法训练营】【第27天】 [39]组合总和 [40] 组合总和II [131]分割回文串

前言 思路及算法思维&#xff0c;指路 代码随想录。 题目来自 LeetCode。 day26&#xff0c; 休息的周末~ day 27&#xff0c;周一&#xff0c;库存没了&#xff0c;哭死~ 题目详情 [39] 组合总和 题目描述 39 组合总和 解题思路 前提&#xff1a;组合的子集问题&…

[matlab]折线图之多条折线如何绘制实心圆作为标记点

使用MarkerFaceColor是标记点填充的颜色&#xff0c;b&#xff0c;表示blue&#xff0c;蓝色 plot(x, a, d--, MarkerFaceColor, b); % 绘制仿真结果的曲线如果一张图多条曲线那么每条曲线需要单独调用一次plot&#xff0c;每个plot间用hold on 连接 plot(x, a, d--, MarkerF…

基于pytorch的车牌识别

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 一、导入数据 from torchvision.transforms import transforms from torch.utils.data import DataLoader from torchvision import datase…

VMware ESXi 8.0U2c macOS Unlocker OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版

VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动 Marvell AQC 网卡定制版 VMware ESXi 8.0U2c macOS Unlocker & OEM BIOS 集成网卡驱动和 NVMe 驱动 (集成驱动版) 发布 ESXi 8.0U2 集成驱动版&#xff0c;在个人电脑上运行企业级工作负载 请访问原文链…

Python Virtualenv:创建独立的 Python 开发环境

在当今软件开发的世界中&#xff0c;Python 是一种备受欢迎的编程语言&#xff0c;其简洁、易读和强大的特性吸引了无数开发者。然而&#xff0c;随着项目的增多和复杂度的提高&#xff0c;有效地管理 Python 项目所需的各种依赖项和库变得越来越重要。在这种情况下&#xff0c…

【机器学习】医疗AI的突破:深度学习在医学影像诊断中的惊人表现

&#x1f525; 个人主页&#xff1a;空白诗 文章目录 一、引言二、深度学习在医学影像诊断中的突破1. 技术原理2. 实际应用3. 性能表现 三、深度学习在医学影像诊断中的惊人表现1. 提高疾病诊断准确率2. 辅助制定治疗方案 四、深度学习对医疗行业的影响和推动作用 一、引言 随着…

k8s——安全机制

一、安全机制说明 Kubernetes作为一个分布式集群的管理工具&#xff0c;保证集群的安全性是其一个重要的任务。API Server是集群内部各个组件通信的中介&#xff0c; 也是外部控制的入口。所以Kubernetes的安全机制基本就是围绕保护API Server来设计的。 比如 kubectl 如果想…