基于51单片机+ESP-01WIFI模块LED灯的控制

  • 1、前期准备
  • 2、ESP-01与USB-TTL接线图
  • 3、ESO-01的调试
  • 4、单片机软件程序的设计
  • 5、感想


1、前期准备

提前了解ESP-01WIFI模块的AT指令,了解串口调试助手的基本使用方法,准备一个USB-TTL模块工具,准备一块C51单片机开发板,当然也可以自己制作一个简单的开发板,这个根据个人的情况,手机上下载一个网络调试助手,前期的工作基本准备就绪。

2、ESP-01与USB-TTL接线图

esp32单片机小制作 esp-01与单片机配置_wifi

esp32单片机小制作 esp-01与单片机配置_IP_02

ESP-01wifi模块中供电电压一般是3.0~3.6v之间,所以在选择电压时要选择3.3的电压,否则芯片会发烫甚至会烧坏。ESP-01wifi模块需要接GND、TXD、RXD、VCC、EN这5个端口。EN端是高电平触发,所以要接3.3V电压。在ESP-01wifi模块与USB-TTL时,注意TXD和RXD接法,ESP-01wifi模块的TXD、RXD与USB-TTL的RXD、TXD对应相接。具体的连接如下图所示:

esp32单片机小制作 esp-01与单片机配置_初始化_03

3、ESO-01的调试

个人总结了ESP-01WIFI模块的设置步骤和指令,供大家参考:

1、AT+UART=9600,8,1,0,0 进行波特率的设置。

2、AT 查看wifi模块是否正常工作。

3、AT+RST 重启wifi模块。

4、AT+CWSAP=“HZ”,“12345678”,1,4 wifi账号和密码,这个配置掉电可以保存。

5、AT+CIPMUX=1 设置连接方式(0单连接,1多连接),该设置为多连接。

6、AT+CIPAP=“192.168.4.1” 设置IP地址。

7、AT+CIPSERVER=1,8086 设置端口号。

到了这一步设置基本上已经完成,wifi模块可以正常使用了。AT+CIFSR 查询IP地址,AT+CIPSEND=0,18 wifi模块的发送指令,从串口调试助手发送手机上接收。下图为调试设置成功图如下:

esp32单片机小制作 esp-01与单片机配置_IP_04

esp32单片机小制作 esp-01与单片机配置_初始化_05


esp32单片机小制作 esp-01与单片机配置_单片机_06


如果没有成功可能会出现因为以下原因:1、串口通信波特率没有选对,一般的wifi模块,通过手册可以查询到初始波特率,一般为115200。2、USB-TTL模块与WIFI模块的对应端口连接不对。3、如果手机与wifi模块连接失败,查看wifi模块的EN端看是否连接,或者电压是否正确。4、查看设置的IP地址和端口是否正确。5、串口号没有选择正确,或着没有开启。这个是自己在操作时所遇到的,应该还会有其它的原因,希望大家多多补充。本次操作手机使用的是-有人网络助手。

4、单片机软件程序的设计

本实验的目标是通过手机输入控制8个LED灯的亮灭,输入0单片机的8个LED灯全部亮,输入1全部灭。并且结果反馈到手机上。单片机的程序设计主要有下面几个主要程序。
首先是串口初始化:

void UsartInit()  
{
	SCON=0X50;			//设置为工作方式1
	TMOD=0X20;			//设置计数器工作方式2
	PCON=0X80;			//波特率加倍
	TH1=0XF3;				//计数器初始值设置,注意波特率是4800的
	TL1=0XF3;
	ES=1;						//打开接收中断
	EA=1;						//打开总中断
	TR1=1;					//打开计数器
}

字符串发送程序:

void ESP8266_Set(uchar *puf) 	// 用来发送字符串的函数            
{    
	while(*puf!='\0')    		
	{   
		Send_Uart(*puf);  		 
		us_delay(10);   
		puf++;    
	}  
	us_delay(10);  
	Send_Uart('\r'); 			
	us_delay(10);  
	Send_Uart('\n');   			 
}

wifi模块初始化:

void wifi_Init()//初始化
{
	 ESP8266_Set("AT");
	 us_delay1(4000);
	 ESP8266_Set("AT+CWMODE=2");
		 us_delay1(4000);
	 ESP8266_Set("AT+RST");
		 us_delay1(4000);
	 ESP8266_Set("AT+CIPMUX=1");
		 us_delay1(4000);
	 ESP8266_Set("AT+CIPSERVER=1,8086");
		 us_delay1(4000);
	 ESP8266_Set("AT+CIPSTO=0");
	
}

wifi接收模块:

void wifi_recive()    interrupt 4 
{
   static uchar i=0;  
	if(RI==1)  
	{   
		RI=0;   
		Receive=SBUF;        					
	receiveTable[i]=Receive;   
		if((receiveTable[i]=='\n'))
		{		     
			i=0;
		}    
		else i++;  										
	}   
	else TI=0;   
	
}

wifi发送模块:

void wifi_send()
{
	ESP8266_Set("AT+CIPSEND=0,10");
	us_delay1(200);
	if(P2 == 0x00)
	ESP8266_Set("LED打开");
	else
	ESP8266_Set("LED关闭");
}

wifi数据的解析:

void wifi_ZX()
{
	if((receiveTable[0]=='+')&&(receiveTable[1]=='I')&&(receiveTable[2]=='P'))//
	{
				if(receiveTable[9]=='0' ) 
				{       
			     P2 = 0x00;
           wifi_send();					
				}
				if(receiveTable[9]=='1' ) 
				{       
		       P2 = 0xff;
					wifi_send();
				}
	}

}

通过实验操作,实现了上述的操作目标。

5、感想

从拿到wifi模块,到一点一点熟悉,通过查询资料和参考各个博主的博客,用了两天的时间完成了整个操作过程并且效果也得到了实现。这是第一次写博客,里面会有很多不足的地方,以后慢慢的补充学习,还希望大家能够多多提供意见!