毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)

这篇具有很好参考价值的文章主要介绍了毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

智能家具系统分为两个不同版本系列:

①系列一:手机app远程控制、远程检测温湿度显示在app,(云平台)    ---------本文章

②系列二:语音识别控制                https://blog.csdn.net/m0_59113542/article/details/123742383

硬件采购链接:

步进电机及相关驱动 步进电机28BYJ48 uln2003驱动板器4相5线5V 12V减速电机马达模块-tmall.com天猫 第四个套餐
舵机 SG90 SG90PRO MG90S 9g舵机 固定翼航模遥控飞机 9克 马达航模-淘宝网 (taobao.com) 第一个
风扇 旗速5010风扇5V 50*50*10 5CM小电脑小风扇机箱风扇直流散热风扇-淘宝网 (taobao.com) 第二个
stm最小系统板 原装正品ARM 核心板 STM32F103C8T6开发板 最小系统板 STM32-淘宝网 (taobao.com)
esp-01s ESP8266串口WIFI 无线模块 WIF收发无线模块 ESP-01 ESP-01S-淘宝网 (taobao.com) 第二个
dht11 【优信电子】DHT11温度模块 湿度模块 温湿度模块 DHT11传感器-淘宝网 (taobao.com)

手机app及相关程序开源,百度网盘下载,放在最下方。

一、项目介绍

功能:1、手机app远程控制相应外设                             APP→单片机

           2、单片机采集温度远程发送到手机显示             单片机→APP

            3、 OLED显示万年历及外设的工作状态

实现:本设计由STM32驱动相关外设,ESP-01S(8266)连接云平台(巴法云),手机app也连接云平台,以此进行远程信息交互。

远程控制:手机app连接巴法云平台,esp-01s(esp8266)也连接平台,当手机按键按下时向云平台发送控制信息,esp8266接收到该信息,并传输给stm32,由stm32完成相应的控制功能。

温度显示:本项目使用esp-01s(esp8266)驱动dht11测温,然后直接上传云平台数据,手机订阅平台,从而显示温湿度。

(大白话就是:手机将数据放到云平台,stm32通过esp联网去云平台读数据)

OLED屏显示:本项目额外开发显示功能,屏幕具有两种显示:其一显示万年历,其二显示外设的工作状态,两种显示使用按键K0切换。

        ①显示万年历:上电后自动显示,当时间不对时,可点击K1按键进入时间设置界面,然后通过K2、K3按键进行时间修改。

        ②显示外设工作状态:当手机端发送控制指令时,STM32完成相关驱动后,屏幕会进入定时显示界面,待定时结束后进入通体显示界面。

1、总体展示图:

毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)

2、

毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)     毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)     毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)    毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)

       总体显示界面                    定时显示界面                万年历显示界面                时间修改界面

了解完工作过程,接下来就和闯关游戏一样,一关关的闯,打怪升级,消灭怪兽,营救公主,最终和公主殿下过上了幸福的生活。。。。。哈哈哈,扯远了,说正事、说正事。

开始闯关:

大家可以想一下万恶的新冠病毒的传播,传染源→传播途径→接收端感染人群。。。。病毒传染首先得有传染源吧,不可能和孙悟空一样从石头里蹦出来吧。(与本工程信号产生装置贴合,也就是手机app)    然后是传播途径(也就是远程传输 巴法云平台)   然后是接受端(也就是我们的stm32)

系统的开发分为以下三步:

1、手机app制作及如何向云平台发送信息。

2、联网(既然要远程控制,肯定是需要走网络的啊,让我们的信号通过网络“飞过去”,这是esp-01s的工作)

3、stm32接收到命令后的外设驱动

二、逐步闯关---分步实现

接下来就是具体的闯关打怪时间。

第一关:手机app制作及如何向云平台发送信息

闯关吗,肯定要有法宝啊,在这里向大家介绍一个很nice的"法宝",appinventor,一款麻省理工研发的开发安卓app的平台,是不是一听"麻省理工",感觉嘎嘎高大上,是我们能学会的吗!!!!,其实appinventor嘎嘎简单,比我们用的c语言简单一万倍。

大白话说说他的功能,就是将一些按键、文本框拖入手机界面,然后图形化编程当按键按下的时候实现什么功能就行。

毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)                        毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)

右边这个图像就是编程的,用模块化编程,拼积木都会吧,嘎嘎简单吧!!!!

然后如何让这个app联网呢,这就是另一个"法宝"  巴法云平台了。

毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)

 大家登录网站后,点击我标记的地方,这里有详细的介绍如何使用。

第二关:ESP-01s联网

esp-01s本来就是一个wifi模块,它是通过连接周围的wifi从而上网,连接巴法云平台的。

且esp-01s可以用AT指令进行配置,也可以用arduino进行二次开发,本人选择二次开发,我会将程序放在下面,大家直接简单修改几个参数就能用了。

毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)

 就修改这几个参数,就能用啦,而且以后想做远程控制的东西,都可以这么用。一劳永逸是不是YYDS。嘿嘿嘿

语言总是最无力的,说再多也不一定能解释清楚,楼主呕心沥血给大家找了一个4分钟的视频,讲解的嘎嘎清楚。https://www.bilibili.com/video/BV1zy4y1k7Mn?spm_id_from=333.337.search-card.all.click

 除此之外还有一个详细的介绍文章,用一句话说就是通透:

esp8266-01s接入巴法云,开源app远程控制,微信小程序控制 - 巴法云 - 博客园 (cnblogs.com)

第三关:stm32接收到命令后的外设驱动

esp8266-01s接收到平台数据后,通过串口发送给stm32,stm32要做的事就是解析命令,并驱动外设。

我们做的是智能家具的模型,不可能真的去改装家具,这里采用模拟的方式,用步进电机模拟窗帘,用舵机模拟开关门,led灯,风扇,继电器。

大家可以发挥自己的想象,用别的外设,这就需要大家自己探讨了。

三、程序实现

main.c

通过USART3与esp8266-01s连接,接受数据,在主函数中解析命令,并相关操作。

#include "delay.h"
#include "sys.h"
#include "usart.h"
#include "usart3.h"
#include "esp8266.h"
#include "Servo_motor.h"
#include "step_motor.h"
#include "string.h"
#include "timer.h"
#include "led.h"
#include <stdio.h>
#include <string.h>
/*
项目的主要内容:STM32配合ESP8266模块与服务器数据交互

ESP8266的连接:USART3(PB10、PB11)

如何判断数据接收完全?
1、出现了换行符;
2、如果超过10ms了都没有下一条数据(TIM7来进行10ms的定时)。
*/


  int main(void)
 {	
	u16 rlen=0;//保存接收到的数据长度
	// u16 t,len;//串口1调试
	 char data_tiqu[100];//将接收到的数据保存到该数组
	 u8 data[10];//最终提取的数据
	 int k=0,s=0;//保存cmd2开头的数据的下标
	 int i=0,j=0;
	 char cmd[]="msg";
	 int flag=1;//收到正确数据标志位,默认为1,
	u8 timex=0;//每200发送1次心跳包的标志位
  delay_init();	    	                        		//延时函数初始化	  
  NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置中断优先级分组为组2:2位抢占优先级,2位响应优先级
	
	LED_Init();
	servo_init();
	Step_Motor_GPIO_Init();
	uart_init(115200);	 	                          //串口初始化为115200
	usart3_init(115200);
	
	
	servo_angle(80);      														 //私服电机初始角度(关门状态)

	 while(1)
	{
		
		timex++;
	
			if(USART3_RX_STA&0X8000)		  //接收到一次数据了
			{ 
				rlen=USART3_RX_STA&0X7FFF;	//得到本次接收到的数据长度
				USART3_RX_BUF[rlen]=0;		  //添加结束符 
				//printf("%s",USART3_RX_BUF);	//发送到串口
				
				
				//数据提取
					if(strncmp(USART3_RX_BUF,"cmd=2",5)==0)
					{
						for(i=0;i<strlen(USART3_RX_BUF)+1;i++)
						{
							data_tiqu[s]=USART3_RX_BUF[i];
							s++;
						}
						printf("%s",data_tiqu);
						for(i=0;i<strlen(data_tiqu);i++)
						{
							
								if(data_tiqu[i]==cmd[0])
								{
									k=i;
									k++;
									for(j=1;j<strlen(cmd);j++)
									{
										if(data_tiqu[k]==cmd[j])
										{
											k++;
											flag=1;
										}
										else
										{
											flag=0;
										}
									}
								}			
						}
						s=0;
						//数据提取结束
						printf("\r\n\r\n");
						if(flag==1)
						{
								for(i=k+1;i<strlen(data_tiqu)+1;i++)   //此时 i为传输接受到数据的索引
								{
									data[s]=data_tiqu[i];
									s++;
								}
								printf("%s",data);
								printf("zaici");     //作用:程序定位
								printf("\r\n");
								
								
								//判断APP控制开关灯
								if(data[0]=='1'&&data[1]=='1')
								{
									GPIO_ResetBits(GPIOC,GPIO_Pin_13); //开LED0
									GPIO_SetBits(GPIOB,GPIO_Pin_7);  //关LED0
								}
								if(data[0]=='1'&&data[1]=='0')
								{
									GPIO_SetBits(GPIOC,GPIO_Pin_13);  //关LED0
									GPIO_ResetBits(GPIOB,GPIO_Pin_7); //开LED0
								}
								
								//判断APP控制开关风扇
								if(data[0]=='2'&&data[1]=='1')
								{
									FS=1;
								}
								if(data[0]=='2'&&data[1]=='0')
								{
								  FS=0;
								}
								
								//判断APP控制开关窗帘
								if(data[0]=='3'&&data[1]=='1')
								{
									motorNcircle(64,(bool)1);  //步进电机正传
								}
								if(data[0]=='3'&&data[1]=='0')
								{
									motorNcircle(64,(bool)0);  //步进电机反传
								}
								
								//判断APP控制开关门
								if(data[0]=='4'&&data[1]=='1')
								{
									servo_angle(175);
			            delay_ms(500);
								}
								if(data[0]=='4'&&data[1]=='0')
								{
									servo_angle(80);
			            delay_ms(500);
								}
								
						}
						
					}
					if(strncmp(USART3_RX_BUF,"cmd=0&res=1",11)==0)
					{
						printf("%s",USART3_RX_BUF);
					}
					
				USART3_RX_STA=0;
			}
		if((timex%200)==0)
		{
			u3_printf("cmd=0&msg=ping");//心跳包
			timex=0;
		}
		
	}
 
}

Servo_motor.c

舵机的驱动,舵机是用PWM的不同占空比来转动不同的角度

#include "Servo_motor.h"
#include "delay.h"

//高级定时器1pwm输出初始化
//arr:自动重装值(周期)  psc:时钟预分频数
void tim1_pwmInit(uint16_t arr, uint16_t psc)
{
  GPIO_InitTypeDef GPIO_InitStructure;
	TIM_TimeBaseInitTypeDef  TIM_TimeBaseStructure;
	TIM_OCInitTypeDef  TIM_OCInitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1, ENABLE); // 使能定时器1的外设时钟
 	RCC_APB2PeriphClockCmd(TIM1_CH1_GPIO_CLK, ENABLE);  //使能GPIO外设时钟使能                               	

   //设置该引脚为复用输出功能,输出TIM1 CH1的PWM脉冲波形
	GPIO_InitStructure.GPIO_Pin = TIM1_CH1_PIN; //TIM_CH1
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;  //复用推挽输出
	GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
	GPIO_Init(TIM1_CH1_PORT, &GPIO_InitStructure);
	
	TIM_TimeBaseStructure.TIM_Period = arr; //设置在下一个更新事件装入活动的自动重装载寄存器周期的值	 80K
	TIM_TimeBaseStructure.TIM_Prescaler = psc; //设置用来作为TIMx时钟频率除数的预分频值  不分频
	TIM_TimeBaseStructure.TIM_ClockDivision = 0; //设置时钟分割:TDTS = Tck_tim
	TIM_TimeBaseStructure.TIM_CounterMode = TIM_CounterMode_Up;  //TIM向上计数模式
	TIM_TimeBaseInit(TIM1, &TIM_TimeBaseStructure); //根据TIM_TimeBaseInitStruct中指定的参数初始化TIMx的时间基数单位

 
	TIM_OCInitStructure.TIM_OCMode = TIM_OCMode_PWM2; //选择定时器模式:TIM脉冲宽度调制模式2
	TIM_OCInitStructure.TIM_OutputState = TIM_OutputState_Enable; //比较输出使能
	//TIM_OCInitStructure.TIM_Pulse = 0; //设置待装入捕获比较寄存器的脉冲值
	TIM_OCInitStructure.TIM_OCPolarity = TIM_OCPolarity_Low; //输出极性:TIM输出比较极性低
	TIM_OC1Init(TIM1, &TIM_OCInitStructure);  //根据TIM_OCInitStruct中指定的参数初始化外设TIMx

  TIM_CtrlPWMOutputs(TIM1,ENABLE);	//MOE 主输出使能	
	
	TIM_Cmd(TIM1, ENABLE);  //使能TIM1
}



void servo_init(void)
{
  tim1_pwmInit(SERVO_TIM_ARR,SERVO_TIM_PSC);
  TIM_SetCompare1(TIM1,150);  //使舵机恢复到中间位置
}



//0.5ms--0°  2.5ms--180°
void servo_angle(uint16_t angle)
{
  uint16_t pulse;
  
  //针对舵机可转角度限辐
  if(angle <= 5)
    angle = 5;
  if(angle >= 175)
    angle = 175;
  //将角度值转换为脉冲值  
  pulse = (uint16_t)(50 + angle * 100/90.0);  //此转换公式需根据pwm的arr及psc配置来做相应变化
  TIM_SetCompare1(TIM1, pulse);
  
}



void servo_debug(void)
{
  uint8_t i;
  for(i = 0; i < 10; ++i)
  {
    delay_ms(500);
    servo_angle(80);  //中间位置
    delay_ms(500);
    servo_angle(175);

  }
}

开关灯与开关风扇就不用多说了,就是GPIO输出高低的问题,还有步进电机,在我另一篇博客上有详细介绍

stm32驱动步进电机

完整工程链接:https://item.taobao.com/item.htm?spm=a1z10.1-c.w4004-24450682672.14.7aa61b42erNczw&id=678372943522

  欢迎大家指正交流,有空可以一起讨论代码啊。

制作不易,感谢大家支持,感谢!!!!!!

  --------------一个正在努力的人文章来源地址https://www.toymoban.com/news/detail-408264.html

感觉未分享清楚、有疑惑

咨询问题、了解具体内容、需要帮助者 可私信联系

到了这里,关于毕业设计——基于STM32的智能家具控制系统(ESP-01S(8266)、手机app远程控制、远程显示温度)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 毕业设计 STM32单片机的智能家居环境监测控制系统

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月10日
    浏览(86)
  • STM32毕业设计——基于STM32+JAVA+Android的六足机器人控制系统设计与实现(毕业论文+程序源码)——六足机器人控制系统

    大家好,今天给大家介绍基于STM32+JAVA+Android的六足机器人控制系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦 文章目录: 本设计主

    2024年01月16日
    浏览(63)
  • 物联网毕业设计 STM32的wifi照明控制系统 - 智能路灯(物联网毕设分享)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年01月18日
    浏览(90)
  • 毕业设计——基于ESP32的智能家居系统(语音识别、APP控制)

    多种控制方式 ① 语音控制 ②APP控制 ③本地按键控制 ESP32嵌入式单片机实战项目演示  这一个基于esp32c3的智能家居控制系统,能实现语音、app和按键控制。有手动和自动两种模式,自动模式下会根据当前的光照强度控制灯的亮灭,当温湿度达到设定值之后报警器会响。而且

    2024年04月25日
    浏览(113)
  • STM32毕业设计——基于STM32+MQTT+WiFi技术的智能家居系统设计与实现(毕业论文+程序源码)——智能家居系统

    大家好,今天给大家介绍基于STM32+MQTT+WiFi技术的智能家居系统设计与实现,文章末尾附有本毕业设计的论文和源码下载地址哦。需要下载开题报告PPT模板及论文答辩PPT模板等的小伙伴,可以进入我的博客主页查看左侧最下面栏目中的自助下载方法哦 文章目录: 智能家居技术

    2024年02月10日
    浏览(76)
  • 毕业设计 基于stm32的智能婴儿车系统(源码+硬件+论文)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月08日
    浏览(120)
  • 毕业设计 基于STM32的智能宠物投喂系统(全套资料)

    🔥 这两年开始毕业设计和毕业答辩的要求和难度不断提升,传统的毕设题目缺少创新和亮点,往往达不到毕业答辩的要求,这两年不断有学弟学妹告诉学长自己做的项目系统达不到老师的要求。 为了大家能够顺利以及最少的精力通过毕设,学长分享优质毕业设计项目,今天

    2024年02月06日
    浏览(57)
  • 毕业设计|基于STM32单片机的语音识别控制智能停车场设计

    演示视频 https://www.bilibili.com/video/BV1bC4y1579d/?spm_id_from=333.999.0.0vd_source=0fb8a603c3cd84c0c72e5fa5d4201605 本系统采用stm32f103c8t6单片机+晶振电路+复位电路+电源电路+车位检测电路+OLED显示电路+继电器控制电路+语音识别电路构成。 1,通过红外对管模块实时检测车位是否占用,车位分为

    2024年02月04日
    浏览(86)
  • 【毕业设计】基于STM32的智能药箱系统设计与实现 - 物联网 单片机

    Hi,大家好,这里是丹成学长,今天向大家介绍一个学长做的单片机项目 基于STM32的智能药箱系统设计与实现 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/125409052 照顾老人, 特别是提醒老人准时吃药已经成

    2024年02月01日
    浏览(85)
  • [毕业设计] 基于单片机的智能快递柜设计与实现 - stm32 物联网

    Hi,大家好,这里是丹成学长,今天向大家介绍一个 单片机项目 基于单片机的智能快递柜设计与实现 大家可用于 课程设计 或 毕业设计 单片机-嵌入式毕设选题大全及项目分享: https://blog.csdn.net/m0_71572576/article/details/125409052 一般来说,传统快递服务方式是人对人,即快递员进

    2024年01月16日
    浏览(95)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包