C51单片机用esp8266点亮led灯(含源码)

大家好,我是一个单片机新手,也是一个兴趣者,我以前想用c51单片机用esp8266模块的热点控制led小灯的,实验,可是网上的资料很少,所以今天来给新生,老手也好,想出一个教程,希望给大家一点点帮助。

准备材料:

1.c51单片机开发板(最小系统板也可以,可是要自己准备led灯和小电阻,分好阳极和阴极)
2.esp8266模块(测试待一会儿讲)
3.ttl转usb线(开发板不需要ttl转换模块)

注意:以下一样接线,esp才能正常工作。

1.esp8266的管脚和接线:

esp8266模块管脚图
TXD-接单片机或ttl模块的RXD
RXD-接单片机或ttl模块的RXDvcc-接3.3v(接5v可能烧坏esp的mcu)
gnd-接地线,接单片机的GND或ttl的GNDgpio0-不用接
gpio1-不用接
ch_pd-默认为高电平,和3.3v短接即可

2.开发板接线图:

单片机开发板串口

提示:如图有红色标记的是,单片机的开发板串口。分别是:usb的串口和单片机的串口。

3.3v-接模块的3.3v(接5v会烧坏esp8266)
ch-pd-也接3.3v
GND-接GND
RXD-接TXDTXD-接RXD

3.ttl转usb线:

ttl转换模块
3.3v-接模块的3.3
vch-pd-也接3.3v
GND-接GND
RXD-接TXD
TXD-接RXD

4.最小系统板:(没有图片)

3.3v-接模块的3.3
vch-pd-也接3.3v
GND-接GND
RXD-接P3.0
TXD-接P3.1

测试wifi模块:

(关于AT指令,如果不会,去百度看看)
打开xcon软件,接好线,然后选择波特率。wifi模块的波特率一般在115200,选好波特率后点击打开串口,发送输入框,输入下命令并发送。

发送:AT(必须大写)
响应:ok(测试成功)
响应:error(很可能固件失效,重刷固件)
AT测试
回复ok,模块正常
在发送:AT+CIOBAUD=9600 (波特率改9600)

因为单片机的波特率跑不了那么高,所以改9600。
下次打开串口的时候波特率选9600

这次我们要看模块的ip地址:命令:AT+CIFSR成功图:
ip测试

测试手机通信:

(1)需要下载网络调式工具,百度搜出的一批,随便下一个。然后用xcon软件给esp发送建服务器命令
命令1:AT+CIPMUX=1(打开多连接服务)
响应:ok
命令2:AT+CIPSERVER=1,8080(开启服务器模式,端口号8080)
响应:ok
(2)连上esp模块的热点。打开网络调式软件点击tcp链接,然后输入模块ip和端口号,链接,链接成功xcon(串口调式软件)会有成功的字符。随便发个字符会出现电脑的软件上。
数据格式:+IPD,0,1:1测试成功。
tcp

单片机通信(程序编写和下载)

提示:下载完程序以后再接esp8266,然后单片机复位。

步骤:连上热点,打开网络调式软件发送1,灯亮,发送2,灯灭。代码块:


#include "public.h"	
#include "temp.h" 
sbit led1=P2^0;  //定义管脚
sbit led2=P2^1;
#define RELOAD_COUNT 0xFA //宏定义波特率发生器的载入值 9600
#if 
1u8 RecBuf[50];
u8 recFlagOK=0;
#endif
u8 tempData[9];
void UART_Init()
{
    
    	
SCON=0X50;			//设置为工作方式1	TMOD=0X20;			//设置计数器工作方式2	PCON=0X80;			//波特率加倍	TH1=RELOAD_COUNT;	//计数器初始值设置	TL1=TH1;	
ES=0;				//关闭接收中断	
EA=1;				//打开总中断	
TR1=1;				//打开计数器}
void UART_SendByte(u8 dat)
{
    
    	
ES=0; //关闭串口中断	
TI=0; //清发送完毕中断请求标志位	
SBUF=dat; //发送	
while(TI==0); 
//等待发送完毕	
TI=0; //清发送完毕中断请求标志位	
ES=1; //允许串口中断
}
void ESP8266_SendCmd(u8 *pbuf)
{
    
    	
while(*pbuf!='\0') //遇到空格跳出循环		
{
    
    		
UART_SendByte(*pbuf);		d
elay_10us(5);		
pbuf++;		
}	
delay_10us(5);	
UART_SendByte('\r');//回车	
delay_10us(5);	
UART_SendByte('\n');//换行	delay_ms(1000);}//ESP8266-WIFI模块工作模式初始化
void ESP8266_ModeInit(void)
{
    
    	


后续

ESP8266_SendCmd("AT+CWMODE=2");//设置路由器模式 1 staTIon模式 2 AP点 路由器模式 3 station+AP混合模式	ESP8266_SendCmd("AT+CWSAP=\"PRECHIN\",\"prechin168\",11,0"); //设置WIFI热点名及密码	ESP8266_SendCmd("AT+CIPAP=\"192.168.4.1\"");//重新启动wifi模块	ESP8266_SendCmd("AT+RST");//重新启动wifi模块	ESP8266_SendCmd("AT+CIPMUX=1");	//开启多连接模式,允许多个各客户端接入	ESP8266_SendCmd("AT+CIPSERVER=1,8080");	//启动TCP/IP 端口为8080 实现基于网络控制
	}
	void main()
	{
    
    		
	u16 i=0;	
	led1=led2=1;	
	UART_Init(); //串口初始化	
	ESP8266_ModeInit();	
	ES=1; //允许串口中断	
	while(1)	
	{
    
    	
	}		
}
#if 1
void Usart() interrupt 4
{
    
    	
static u8 i=0;	if(RI)	
{
    
    		
RecBuf[i++]=SBUF;	
if(RecBuf[i-1]=='\n')		
{
    
    			
i=0;			
recFlagOK=1;			
RecBuf[11]='\0';		
}				
if(recFlagOK==1)		
{
    
    			
recFlagOK=0;			
if(RecBuf[9]=='1')			
{
    
    						
led1=0;										
}					
if(RecBuf[9]=='2')					
{
    
    						
led1=1;									
}					
}				i
f(RecBuf[9]=='3')	//led控制				
{
    
    						
led2=0;											
}					
if(RecBuf[9]=='4')					
{
    
    						
led2=1;					
}					
RI=0;					
}				
}					
#endif

猜你喜欢

转载自blog.csdn.net/qq_32171385/article/details/109363279