项目八 51单片机WIFI控制继电器

news2025/8/3 0:09:23

前言:作者想要帮助一些童鞋和爱好者进行项目构建,但自知能力有限,不喜可论,创作不易,勿喷。

系统由STC89C51单片机、4路继电器、wifi esp8266模块及电源组成。
可以说是一个非常简单的设计,但这里我来说明一些内容。
第一,项目第一步我们应该干什么?
画图?写程序?还是画仿真?这些都不是。我认为第一步应该清楚我们需要干什么,这是画图,写程序之前需要理解的。
第二,我们做这些需要用到什么?这其中包括软件需要用到什么硬件需要用到什么,还有相应的单片机端口应该怎样选择?
第三,如果我们想要做成这个东西,那么我们中间遇到问题应该怎么办?需要哪些平台?

针对这三个问题,我一一来解答,对于这个系统来说:
第一,我们需要干什么?
从设计要求来看,就是利用WIFI模块来控制4个继电器的开断。
好,那么问题就来了。WIFI是否能够直接控制继电器,如同esp8266一样?答案显然是不能的。那么WIFI要通过单片机控制继电器。现在我们就有一个很简单的一个模型。

手机WIFI (通信) ==> 板载WIFI (通信) ==> STC89C51单片机(控制) ==>继电器;
当然继电器模型后面还可以跟其他外设,但是我们这里就不继续添加,理解好电气原理即可。
第二,我们需要用到什么?
软件方面
编程软件 keil4
烧录软件 stc-isp-15xx-v6.86q.exe
链接:https://pan.baidu.com/s/1hsGnfBAvfWlGXgPjhYXsyg
提取码:6666
画图软件 AD20
链接:https://pan.baidu.com/s/1Fyxh-PHZftNI1HIAMSTZPw
提取码:6666
这个工程无法仿真模拟,所以没有仿真
硬件方面
在这里插入图片描述

购买器件可以选择淘宝、立创商城等。
打板子
可以在嘉立创或捷配。(两家都行,仁者见仁)
第三 遇到了问题可以参考csdn、51黑电子论坛等。当然如果在学校老师是不二之选。

第一步树立思路已经好了,第二步就是画图,刚刚说了,画图用AD20,但是有一些库我们是没有的,除了自己构建库之外,以下两个网站也是很好的途径。
PCBlib
AD官网
在这里插入图片描述
在这里插入图片描述
那么第三步就开始要写程序了。

 /********************************************************************/ 
#include <REGX51.H>
#define uint unsigned int 
#define uchar unsigned char   
sbit LED0=P2^0;  	//红灯
sbit LED1=P2^3;		//黄灯
sbit LED2=P2^6;	    //绿灯

/*****************相关变量**************/ 
uchar Receive,i,qj,yz,zz,ht;                              
uint n;  
uchar Recive_table[40];  		//用于接收wifi模块反馈到MCU上的数据  

/******************************************************************* 
名称:延时函数  作用:毫秒级延时,微妙级延时函数,为数据收发完成作等待.......  
********************************************************************/ 
void ms_delay(uint t) 
{  
	uint i,j;  
	for(i=t;i>0;i--)   
	for(j=110;j>0;j--); 
}   

void us_delay(uchar t) 
{  
	while(t--); 
}         

void Uart_Init()				//使用定时器1作为波特率发生器(STC89C52、STC89C51、AT89C51等均可) 
{  
    TMOD = 0x20;
    SCON = 0x50;		 		//设置串行方式
    TH1 = 0xFD;			 		//波特率9600
    TL1 = TH1;
    PCON = 0x00;
    EA = 1;						//总中断打开 
    ES = 1;						//开串口中断  
    TR1 = 1;					//启动定时器1
} 

/******************************************************************** 
名称:串口发送函数  功能:MCU向无线WIFI模块ESP8266发送数据  
********************************************************************/ 
void Send_Uart(uchar value) 
{  
	ES=0;  						//关闭串口中断  
	TI=0;   					//清发送完毕中断请求标志位   
	SBUF=value; 				//发送  
	while(TI==0); 				//等待发送完毕   
	TI=0;   					//清发送完毕中断请求标志位   
	ES=1;  						//允许串口中断  
}  

/******************************************************************** 
名称:WIFI模块设置函数  作用: 启动模块,以便可以实现无线接入和控制  
********************************************************************/ 

void ESP8266_Set(uchar *puf) 	// 数组指针*puf指向字符串数组                
{    
	while(*puf!='\0')    		//遇到空格跳出循环  
	{   
		Send_Uart(*puf);  		//向WIFI模块发送控制指令。   
		us_delay(5);   
		puf++;    
	}  
	us_delay(5);  
	Send_Uart('\r'); 			//回车  
	us_delay(5);  
	Send_Uart('\n');   			//换行  
} 

/******************************************************************** 
名称:主函数  作用:程序的执行入口  
********************************************************************/ 

void main() 
{  	
	Uart_Init();											//波特率发生器 
	ms_delay(2000);
	ESP8266_Set("AT+CWMODE=2"); 							//设置路由器模式1 station,模式2 AP,模式3 station+AP混合模式   
	ms_delay(2000);
//	ESP8266_Set("AT+RST"); 									//重新启动wifi模块            
//  ms_delay(2000);
	ESP8266_Set("AT+CWSAP=\"wifi_yuan\",\"123456789\",11,4");  	//AT+CWSAP="wifi_yuan","123456789",11,4  设置模块SSID:WIFI, PWD:密码 及安全类型加密模式(WPA2-PSK) 
	ms_delay(2000);
	ESP8266_Set("AT+CIPMUX=1");								//开启多连接模式,允许多个各客户端接入 
	ms_delay(2000);
	ESP8266_Set("AT+CIPSERVER=1,5000");  					//启动TCP/IP 实现基于网络//控制 	ESP8266_Set("AT+CIPSERVER=1,5000");  
	ms_delay(2000);
	ESP8266_Set("AT+CIPSTO=0"); 							//永远不超时
	ES=1;           										//允许串口中断 		
	qj=1;
	zz=1;
	yz=1;
	ht=1;
	LED0=1;
	LED1=1;
	LED2=1;
	while(1)   
	{    
		if((Recive_table[0]=='+')&&(Recive_table[1]=='I')&&(Recive_table[2]=='P'))//MCU接收到的数据为+IPD时进入判断控制0\1来使小灯亮与灭    
		{           
			if((Recive_table[9]=='G')&&(Recive_table[10]=='P'))            
			{      
				if(Recive_table[15]=='0')      
				{       
					LED0=0; 			//红灯亮			  
				}                                
				else 
				if (Recive_table[15]=='1')      
				{              
					LED0=1; 			//红灯灭
				} 
				else 
				if (Recive_table[15]=='2')      
				{              
                    LED1=0;            //黄灯亮           
				} 
				else 
				if (Recive_table[15]=='3')      
				{              
	                LED1=1; 		   //黄灯灭
				}
				else 
				if (Recive_table[15]=='4')      
				{              
	                LED2=0;       		//绿灯亮
				}  
				else 
				if (Recive_table[15]=='5')      
				{              
	                LED2=1;       		//绿灯灭
				}  								 											  
			}  
		}
  	}    
}    

/*********************************************************************  
名称:串行通讯中断  作用:发送或接收结束后进入该函数,对相应的标志位软件清0,实现模块对数据正常的收发。  
********************************************************************/ 

void Uart_Interrupt() interrupt 4         
{    
	static uchar i=0;  
	if(RI==1)  
	{   
		RI=0;   
		Receive=SBUF;        						//MCU接收wifi模块反馈回来的数据       
		Recive_table[i]=Receive;   
		if((Recive_table[i]=='\n'))
		{		     
			i=0;
		}    
		else i++;  										//遇到换行 重新装值  
	}   
	else TI=0;   
}  

代码书写完成后,通过烧录软件烧录hex文件,可以进行板子运行。
第四步手机WIFI连接,下载我所上传的WIFI软件。即可匹配板载WIFI。通过相应指令进行WIFI信息通信,进而控制继电器。

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

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

相关文章

(六)笔记.net core学习之泛型、逆变/协变、泛型缓存

1.泛型&#xff1a;延迟声明&#xff1a;不指定参数类型&#xff0c;调用是才指定&#xff0c;把参数类型的声明推迟到调用 2.泛型包含&#xff1a;泛型类、泛型方法、泛型接口、泛型委托、逆变/协变、泛型缓存 3.泛型约束 1.接口约束 Where T : 接口 2.基类约束 Where…

i++的错误使用

文章目录问题题目完整代码问题 在执行以下代码之前&#xff0c;i的值为8&#xff0c;length的值为10。 while (i < length) {tempArray[i] middle[i]; }我预想中的结果应该是tempArray[8] middle[8];&#xff0c;然后i。 结果tempArray[8]没有被赋值&#xff1a; 反倒是…

树/二叉树/森林之间的相互转换 与遍历

森林就是多棵树的集合&#xff0c;但是森林也可以只有一棵树&#xff0c;二叉树是一种特殊的树&#xff0c;固定的度为2&#xff0c;这是基本前情提要&#xff5e; 树常见的存储方式有三种&#xff1a; &#xff08;1&#xff09;双亲表示法 仅用定义一个结点对象&#xff0…

windows添加node环境

参考&#xff1a;npm和cnpm&#xff08;windows&#xff09;安装步骤_李疆~的博客-CSDN博客_cnpm一、什么是npm和cnpmnpm&#xff08;node package manager&#xff09;&#xff1a;nodejs的包管理器&#xff0c;用于node插件管理&#xff08;包括安装、卸载、管理依赖等&#…

YRCloudFile V6.9.0 加速企业在大数据应用技术创新

近日&#xff0c;焱融科技发布分布式文件存储产品 YRCloudFile 6.9.0 版本。该版本在功能和性能方面有多项技术性突破&#xff0c;主要包括大数据应用无缝对接 Hadoop &#xff0c;为大数据应用提供高性能存储平台&#xff1b;独有的 Dataload 功能和智能分层细粒度化&#xff…

查询不为空的字段

数据&#x1f4ca; idnameparent_id1党组织02陕西党委1314Null25渭南党委Null 实验⁉️ 查询int类型不为空的字段 select * from org where parent_id <> ""❌mybatis 中的 if判断会把整形中的 0 识别为false(空) select * from org where parent_id ! &quo…

体会多态的好

目录 继承和组合&#xff1a; 区别和联系 1.安全性角度&#xff08;封装性&#xff09; 2.灵活性角度&#xff08;牵一发动全身&#xff09; 多态&#xff1a; 一.怎样实现多态 1.完成向上转型 直接赋值&#xff1a;​​​​​​​ 方法传参 方法的返回值 2.完成方法重…

零基础数据科学学习 Python 的 4 个阶段

前言 如果你一直在自学 Python&#xff0c;那么你可能看过无数教程并遵循许多指南来获得这项技能&#xff0c;但是你怎么知道自己走在正确的道路上来掌握这项数据科学的基本技能&#xff1f; &#xff08;文末送读者福利&#xff09; Python 是一种实用的编程语言&#xff0c…

获取CSV文件,转成Excel格式的文件供用户从浏览器下载

前言 最近这十几天每天都很充实&#xff0c;刚完成了几个小需求&#xff1b;今天简单记录一下其中一个&#xff1a;从某系统获取csv文件&#xff0c;然后处理成可供用户在浏览器中下载的Excel文件&#xff1b; 这其中有解除到新的内容&#xff0c;也有利用项目已有的部分功能…

智慧图书馆解决方案-最新全套文件

智慧图书馆解决方案-最新全套文件一、建设背景二、思路架构三、建设方案四、获取 - 智慧图书馆全套最新解决方案合集一、建设背景 现下&#xff0c;传统图书馆已经难以适应时代的发展&#xff0c;图书盘点繁琐、管理模式落后、阅读时间和场地受限等问题&#xff0c;迫使传统图…

148. SAP UI5 表格数据如何导出成 Excel 文件(Table Export As Excel)

本教程前一步骤,我们在介绍 SAP UI5 SmartTable 时,提到了它的 Excel 导出功能。如果将 iseExportToExcel 设置为 true,就可以启用 Excel 导出功能,将 Table 控件显示的数据,导出成本地 Excel 文件。 我们仍然秉承本教程一贯从易到难的学习思路,先暂时不去碰 Smart Table…

30天消化MyBatis源码解析笔记,吊打面试官,offer接到手软

MyBatis 是一个优秀的 Java 持久化框架&#xff0c;SSM 框架组合&#xff08;Spring SpringMVC Mybatis&#xff09;&#xff0c;依赖 MyBatis 搭建的项目更是数不胜数&#xff0c;在互联网公司的使用中&#xff0c;占据了大片江山&#xff0c;你在使用 MyBatis 吗&#xff1…

嵌入式开发:RTOS调试——处理计时问题

毫无疑问&#xff0c;当你开始在嵌入式开发中使用实时操作系统(RTOS)时&#xff0c;会有一个学习曲线。你将在更高的抽象层次上工作&#xff0c;使用或多或少的并行任务&#xff0c;而不仅仅是子例程&#xff0c;并且你需要考虑你的任务应该如何彼此共享数据和处理器时间。你需…

一个系统五个场景,vivo的IoT能否以“慢”取胜?

近年来物联网声浪喧嚣尘上&#xff0c;但其实从移动互联网到IoT只有一步之遥。原因在于手机可以很好的完成“控制中枢”的作用&#xff0c;以手机为核心在IoT领域“开枝散叶”是目前行业的主流选择&#xff0c;这也是小米、华为等手机巨头在IoT领域如鱼得水、产品众多的重要原因…

企业如何防备密码攻击

在身份安全周&#xff0c;了解密码在网络安全中的重要性很有必要&#xff0c;如果您不小心&#xff0c;密码很容易被泄露。ManageEngine ADSelfService Plus如何帮助强化密码并增强企业组织安全性的呢&#xff1f; 现在是 2022 年——密码在今天仍然适用吗&#xff1f; 技术…

Docker(九)—— Docker 网络

我们之前通过端口映射实现过外部主机对容器的访问&#xff0c; 那如果想要实现两个容器之间的通信怎么办&#xff1f;用已有的经验&#xff0c;是像图中蓝色的线那样走吗&#xff1f; 一、Docker0网络 我们运行一个容器&#xff0c;进入容器内部后发现容器也有自己的IP地址。 而…

磁盘占用高问题如何排查?三步教你搞定

作者简介&#xff1a;杨嘉力&#xff0c;OceanBase开源内核高级工程师。 通常情况下&#xff0c;数据库对磁盘的占用量会随着业务的接入时间和业务数据量大增而不断上升&#xff0c;导致磁盘空间不足&#xff0c;进而发生数据无法写入、数据库无法重启等问题。这时我们就需要排…

CENTOS上的网络安全工具(十三)搬到Docker上(1)?

鉴于在集群上构建安全工具的情况越来越频繁&#xff0c;并且现在一些安全工具也提供了Docker形式的部署&#xff0c;再停留在虚拟机yum的部署方式似乎已经不太合时宜了。所以在再一次碰到一个安全工具需要使用docker安装的时候&#xff0c;我们毅然&#xff08;被逼&#xff09…

[附源码]SSM计算机毕业设计中小企业人事管理系统JAVA

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

[附源码]Python计算机毕业设计安庆师范大学校园互助平台

项目运行 环境配置&#xff1a; Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术&#xff1a; django python Vue 等等组成&#xff0c;B/S模式 pychram管理等等。 环境需要 1.运行环境&#xff1a;最好是python3.7.7&#xff0c;…