ESP80266WiFi通信模块连接51单片机实现双向通信

做毕设需要用到WiFi通信,选用了ESP8266WiFi通信模块,这个小芯片功能强大,有AP、STA和混合通信三种模式,简单说下三种模式是什么意思:
AP模式相当于8266是一个热点,由独立的WiFi信号,其它设备可以连接到这个热点上来实现通信,做多支持5个设备接入;
STA模式就是8266去连接公用WiFi网络,其他设备通过WiFi网络来实现和8266通信,这种模式下可以进行透传;
混合模式就是AP+STA模式,既能当热点也能连WiFi。
刚买来的8266一般都是直接刷好固件的,如果没有就要到官网上去下载固件,刷固件需要使用烧录器,或者使用USB转TTL烧录线。
三种模式下的AT指令为
ESP8266WiFi模块AP模式建立服务器模式

  1. 设置AP模式 AT+CWMODE=2
  2. 复位生效 AT+RST
  3. 配置热点 AT+CWSAP=“test”,“12345678”,1,3
  4. AT+CIPMUX=1
  5. 设置端口号 AT+CIPSERVER=1,8086
  6. AT+CIFSR
    服务器向客户端发送信息格式 AT+CIPSEND=0,4
    1234(四位数据) 服务器模式不支持透传

ESP8266作为客户端连接服务器支持透传

  1. AT+CWMODE=3
  2. AT+RST
  3. AT+CWJAP=“360WiFi-0F605E”,“123456789”
  4. AT+CIPMUX=0
  5. AT+CIPSERVER=1,8086
  6. AT+CIPMODE=1
  7. AT+CIFSR
  8. AT+CIPSTART=“TCP”,“192.168.0.14”,8086
  9. AT+CIPSEND
    AT+CWJAP=“360WiFi-0F605E”,“123456789”

ESP8266 STA模式 单连接透传
AT+CWMODE=1 设置工作模式为STA模式
AT+RST 模块重启(生效工作模式)
AT+CWJAP=“360WiFi-0F605E”,“123456789” 连接WiFi
AT+CIPMUX=0 设置单路连接模式
AT+CIPSTART=“TCP”,“192.168.0.14”,8086 IP地址为手机的地址
AT+CIPMODE=1 开启透传模式
AT+CIPSEND 进入透传模式,开始传输数据
+++ 退出透传模式,取消发送新行

AT+CWLAP 查看无线网络
可以先在电脑上面用串口助手和手机进行通信

单片机连接8266
在这里插入图片描述

#include "reg52.h"			 //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16;	  //对数据类型进行声明定义
typedef unsigned char u8;

sbit k1=P3^5;	 //定义P35口是k1
sbit k2=P3^4;
sbit k3=P3^3;
sbit k4=P3^2;
sbit led1=P1^0;	 //定义P10口是led1
sbit led2=P1^1;
sbit led3=P1^2;
sbit led4=P1^3;
u8 dat;

void Init(void);//串口初始化函数
void Delay_ms(u16 n);//延时子函数
void Sent_ZF(u8 dat);//发送一个字节
void AT_Send_String(u8 *string);//发送字符串
void ESP8266_Init();//ESP8266初始化
void fasong();
void shuju();

void Init(void)		//串口初始化函数
{
 
	TMOD=0x20;	//定时器工作方式2,8位自动重载(0010 0000)
	TL1=0xfd;		//装入初值
	TH1=0xfd;		
	TR1=1;	//启动定时器1
	REN=1;    //允许串行口接收数据
	SM0=0;    //工作方式1,10位异步收发
	SM1=1;   
	EA=1;   //打开全局中断控制
	ES=1;     //打开串行口中断
}
/*******************************************************************************
* 函 数 名         : delay
* 函数功能		   : 延时函数,i=1时,大约延时10us
*******************************************************************************/
void Delay_ms(u16 i)
{
	while(i--);	
}

/*******************************************************************************
* 函 数 名         : keypros
* 函数功能		   : 按键处理函数,判断按键K1是否按下
*******************************************************************************/
void keypros1()		  //按键1
{
	if(k1==0)		  //检测按键K1是否按下
	{	
		Delay_ms(1000);   //消除抖动 一般大约10ms
		if(k1==0)	 //再次判断按键是否按下
		{
			led1=~led1;	  //led状态取反
			ESP8266_Init();	//8266初始化,设置为STA模式,连接WiFi
		}
		while(!k1);	 //检测按键是否松开
	}		
}
void keypros2()		   //按键2
{
	if(k2==0)		  //检测按键K2是否按下
	{	
		Delay_ms(1000);   //消除抖动 一般大约10ms
		if(k2==0)	 //再次判断按键是否按下
		{
			led2=~led2;	  //led状态取反
		     fasong();	//接入服务器
		}
		while(!k2);	 //检测按键是否松开
	}		
}
void keypros3()		   //按键2
{
	if(k3==0)		  //检测按键K2是否按下
	{	
		Delay_ms(1000);   //消除抖动 一般大约10ms
		if(k3==0)	 //再次判断按键是否按下
		{
			led3=~led3;	  //led状态取反
		     shuju();	//发送数据
		}
		while(!k3);	 //检测按键是否松开
	}		
}

/*******************************************************************************
* 函 数 名       : main
* 函数功能		 : 主函数
* 输    入       : 无
* 输    出    	 : 无
*******************************************************************************/
void main()
{	
	Init();
	P1=0Xff;
	while(1)
	{	
		keypros1();  //按键处理函数1
		keypros2();
		keypros3();	
	}		
}

 void Sent_ZF(u8 dat)  //发送一个字节
{
	ES=0;	 //关闭串行口中断
	TI=0;	 //关闭发送中断标志位
	SBUF=dat;
	while(!TI);
    TI=0;
    ES=1;	//打开串行口中断
}
void AT_Send_String(u8 *string)  //发送字符串
{
  while(*string!='\0')
  {
    Sent_ZF(*string);
	string++;
	Delay_ms(1000);
  }

}
void ESP8266_Init()   //ESP8266初始化
{	
    AT_Send_String("AT+CWMODE=1\r\n");  //重启模块
	Delay_ms(1000000);
	Delay_ms(1000000);
	AT_Send_String("AT+RST\r\n");  //重启模块
	Delay_ms(1000000);
	Delay_ms(1000000);
	AT_Send_String("AT+CIFSR\r\n");  //重启模块
	Delay_ms(1000000);
	Delay_ms(1000000);
	AT_Send_String("AT+CWJAP=\"360WiFi-0F605E\",\"123456789\"\r\n");  //重启模块
	Delay_ms(100000000);
	Delay_ms(100000000);
	
   
}

void fasong()
{
AT_Send_String("AT+CIPMUX=0\r\n");  //设置为单连接模式,启动模块
	Delay_ms(1000000);
	Delay_ms(1000000);
  AT_Send_String("AT+CIPSTART=\"TCP\",\"192.168.0.14\",8086\r\n"); //服务器的设置端口
  	Delay_ms(1000000);
	Delay_ms(1000000);
	 AT_Send_String("AT+CIPMODE=1\r\n"); //开启透传
  	Delay_ms(1000000);
	Delay_ms(1000000);
   AT_Send_String("AT+CIPSEND\r\n"); //进入透传模式
  	Delay_ms(1000000);
	Delay_ms(1000000);
	AT_Send_String("OK"); //发送OK
  	Delay_ms(1000000);
	Delay_ms(1000000);

}

void shuju()
{
AT_Send_String("niuwentao\r\n"); //服务器的设置端口
  	Delay_ms(1000000);
	Delay_ms(1000000);
} 

void InterruptUART() interrupt 4  //控制小灯开关 
{ 
        RI=0;        //清零
        dat= SBUF;    //收到的数据占存到SBUF中
	  {
         if(dat=='o')
				 {
					 led4=0;    
				 }
		 if(dat=='f')  
				 {						 
				    led4=1; 
				 }
}
 }
  • 3
    点赞
  • 70
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值