1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > ESP80266WiFi通信模块连接51单片机实现双向通信

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

时间:2018-07-27 10:25:33

相关推荐

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

做毕设需要用到WiFi通信,选用了ESP8266WiFi通信模块,这个小芯片功能强大,有AP、STA和混合通信三种模式,简单说下三种模式是什么意思:

AP模式相当于8266是一个热点,由独立的WiFi信号,其它设备可以连接到这个热点上来实现通信,做多支持5个设备接入;

STA模式就是8266去连接公用WiFi网络,其他设备通过WiFi网络来实现和8266通信,这种模式下可以进行透传;

混合模式就是AP+STA模式,既能当热点也能连WiFi。

刚买来的8266一般都是直接刷好固件的,如果没有就要到官网上去下载固件,刷固件需要使用烧录器,或者使用USB转TTL烧录线。

三种模式下的AT指令为

ESP8266WiFi模块AP模式建立服务器模式

设置AP模式 AT+CWMODE=2复位生效 AT+RST配置热点 AT+CWSAP=“test”,“12345678”,1,3AT+CIPMUX=1设置端口号 AT+CIPSERVER=1,8086AT+CIFSR

服务器向客户端发送信息格式 AT+CIPSEND=0,4

1234(四位数据) 服务器模式不支持透传

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

AT+CWMODE=3AT+RSTAT+CWJAP=“360WiFi-0F605E”,“123456789”AT+CIPMUX=0AT+CIPSERVER=1,8086AT+CIPMODE=1AT+CIFSRAT+CIPSTART=“TCP”,“192.168.0.14”,8086AT+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口是k1sbit k2=P3^4;sbit k3=P3^3;sbit k4=P3^2;sbit led1=P1^0; //定义P10口是led1sbit 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;//启动定时器1REN=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); //消除抖动 一般大约10msif(k1==0) //再次判断按键是否按下{led1=~led1; //led状态取反ESP8266_Init();//8266初始化,设置为STA模式,连接WiFi}while(!k1); //检测按键是否松开}}void keypros2() //按键2{if(k2==0) //检测按键K2是否按下{Delay_ms(1000); //消除抖动 一般大约10msif(k2==0) //再次判断按键是否按下{led2=~led2; //led状态取反fasong();//接入服务器}while(!k2); //检测按键是否松开}}void keypros3() //按键2{if(k3==0) //检测按键K2是否按下{Delay_ms(1000); //消除抖动 一般大约10msif(k3==0) //再次判断按键是否按下{led3=~led3; //led状态取反shuju();//发送数据}while(!k3); //检测按键是否松开}}/******************************************************************************** 函 数 名 : main* 函数功能 : 主函数* 输 入 : 无* 输 出: 无*******************************************************************************/void main(){Init();P1=0Xff;while(1){keypros1(); //按键处理函数1keypros2();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"); //发送OKDelay_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; }}}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。