相关链接和资料下载:数组
我的博客网络
资料下载函数
Step1:配置ESP8266spa
经过USB转TTL模块把ESP8266模块和电脑链接起来,如图:3d
把ESP8266模块的VCC,GND,CH_PD,UTXD,URXD口分别接USB转TTL模块的3.3v,地,3.3v,RXD,TXD调试
链接好后,就准备用电脑用串口调试助手向ESP8266发送AT指令。code
串口调试助手下载地址:百度云盘 blog
设置好串口调试助手的串口和波特率,ESP8266默认波特率为115200,把串口调试助手的波特率调为115200,勾选左下角的发送新行
。在输入框中输入 AT+RST 而后点击发送:
教程
若是前面的配置都没错的话,串口调试助手会接收到esp8266返回的信息,AT+RST是复位命令,ESP8266会返回一堆乱码,这时候就说明ESP8266配置成功了。索引
配置好ESP8266以后就能够更改模块的信息了,按照如下顺序向模块发送AT指令:
AT+CWMODE=2
AT+CWSAP="esp8266","0123456789",11,3 //更改wifi名称,名字最好不要乱改,有些特别的名字是显示不出来的。
AT+RST //配置完AT+CWMODE要重启如下模块使配置生效
AT+CIPMUX=1
AT+CIPSERVER=1,8080 //8080为端口号,以后手机和单片机进行通信要用到,能够本身修改。
前面三条绿色的指令配置一次就够了,断电重连配置的信息也不会改变,后面两条红色的指令要每次重启模块以后都要配置一遍。
按顺序配置完以后就能够用手机进行链接,若是手机发现wifi而且输入密码成功链接了,就证实上面的配置成功了。
下载手机网络调试助手:手机网络调试助手
打开手机网络调试助手,把协议类型设置为"TCP Client",IP地址设置为用AT+CIFSR指令查询到的ESP8266的IP,端口号就是前面设置的端口号。
配置好以后点链接(手机要链接好ESP8266的wifi),而后输入任意信息(如:123),点击发送。和ESP8266链接的电脑上的串口调试助手就会收到信息:+IPD,0,3:123(不一样的ESP8266收到信息的格式可能会不一样)从左到右的数字中,0是表明客户的索引,3是表明收到信息的大小,至因而字节数仍是什么的就不清楚了,冒号后面是收到的信息,到时候把ESP8266链接到单片机上面的时候,单片机收到的和电脑同样的字符串,咱们须要编写程序解析字符串,把其中须要的信息提取出来(如:+IPD,0,3:123,把123提取出来,单片机就能够得知手机发送了123,就能够在程序里面进行对应的动做)
Step2:链接单片机和ESP8266
上面的配置只是电脑和ESP8266的链接,确保ESP8266运行正常,如今要进行单片机和ESP8266的链接了。
由于51单片机通信的波特率为9600,因此ESP8266要与单片机进行链接通信,就要先用电脑吧ESP8266的波特率设置为9600;
AT+CIOBAUD=9600 发送一下指令就能够设置ESP8266波特率为9600了,AT+RST重启一下ESP8266,不要忘了把电脑串口调试助手的波特率也改成9600了,否则电脑链接ESP8266就会出现错误的了。
以前说过ESP8266有些指令配置一次就能够,有些重启以后要从新配置,这些指令是下面这两条:
AT+CIPMUX=1
AT+CIPSERVER=1,8080 //8080为端口号,以后手机和单片机进行通信要用到,能够本身修改。
这些指令以前是用电脑给ESP8266发送的,但如今ESP8266和单片机链接起来的,这时要用单片机向ESP8266发送AT指令了。
在单片机程序中加入如下代码:
1 void connect_init() 2 { 3 char *a="AT+CIPMUX=1\r\n"; 4 char *b="AT+CIPSERVER=1,8080\r\n"; 5 while(*a!='\0') 6 { 7 SBUF=*a; //写入要发送的字符 8 while(!TI); //等待发送完成 9 TI=0; //发送 10 a++; 11 } 12 //这里添加延时函数,延时5ms左右,给ESP8266反应时间 13 while(*b!='\0') 14 { 15 SBUF=*b; 16 17 while(!TI); //等待发送完成 18 TI=0; 19 b++; 20 } 21 }
在程序的开头,配置串口链接函数的后面加入上面的代码,就可让单片机每次开机的时候都向ESP8266发送一次指令,若是不会配置单片机串口的话,就百度一下教程,配置串口中断是51单片机基础的知识,这里就很少说了。
烧录好程序以后,而后把ESP8266模块和单片机链接起来,接线方式跟以前的差很少,VCC,GND,CH_PD,UTXD,URXD口分别接3.3v,地,3.3v,单片机芯片的RXD,单片机芯片的TXD,其中,要和单片机共地。
确保链接好ESP8266和烧录好程序,复位一下单片机,此时单片机应该向ESP8266完成发送AT指令了,打开手机的wifi,是否能链接上模块发出的wifi
热点,若是能链接上,证实单片机发送AT指令进行初始化的代码块没问题,若是失败了,检查一下连线和程序是否有问题。
如今已经完成了单片机与ESP8266的链接与初始化了,以后就进行对ESP8266向单片机发送的信息的解析。
1 void Uart() interrupt 4 2 { 3 char res; 4 res=SBUF; //取出接受到的数据 5 RI=0; //清除接受中断标志位 6 if(res==':'||i>0) //i是全局变量 7 { 8 receive[i]=res; //receive数组也是全局变量 9 i++; 10 if(res=='\n') 11 { 12 i=0; 13 //添加对收到信息的处理代码 14 memset(receive,0,50); 15 } 16 } 17 }
由于单片机每产生一次串口中断,只是接收一个字符,单片机要接收+IPD,0,3:123的话,就会产生屡次中断,单片机的中断程序里面就要进行对收到的信息进行筛选和提取。上面代码中 if(res==':'||i>0) 目的是排除掉+IPD,0,3 我不须要用的信息,而后i>0是确保以后程序能运行到if里面, 以后if(res=='\n')就是判断ESP8266发送完成一条信息没有,进入if(res=='\n')里面以后此时数组里面的信息是:123,而后就能够添加相关的处理函数了(如:LED=0),处理完以后要调用memset(receive,0,50);把数组清空,以便下次使用。
把程序向单片机进行烧录,链接好ESP8266(链接着ESP8266的时候烧录会失败,应该拔下ESP8266的TX和RX端),复位单片机,而后用手机链接上wifi,打开手机网络调试助手,发送本身设定好的信息,看看单片机有没作出对应的处理(如:LED从灭到亮),成功的话就能够在原先的程序上加上本身项目须要的代码就能够进行手机操控单片机了。