51单片机与ESP8266WIFI模块控制灯的亮灭(细节描述)
前言:
通过这几天对ESP8266的学习,总结并记录一下整个学习的历程,给后学的小白提供一些避坑小妙招!
别问为啥是这个模组,问就是8266-01S烧坏了,下面有讲原因····
一.学习的步骤:
(1). 给自己下个决心,一定要学会(接二连三的踩坑,差点让我自闭了,所以决心很重要)
(2).巨坑一号:稍微看下ESP8266的规格书,主要看下引脚接线和供电要求和AT指令(尤其注意供电,建议3-3.3v,
别迷信3.3-4V这个区间,是真的会烧毁IC,本人亲测,痛失8266一枚)
我的模组直接插上4线USB即可,分离的可参考下面8266-01S的,是一样的接线.
这个是8266与USB烧录的接线方式
烧录事项:
1.接3V3前,建议最好用万用表测试一下电压
2.UTXD,URXD和其它的TXD,RXD交叉连接,URXD–TXD, UTXD–RXD
3.如果接错供电,WIFI模块会很烫,正常接的话,WIFI模块只会轻微发热
(3).接线好WIFI模块后,电脑安装CH340串口驱动,连接串口调试工具,推荐下面这个
(4).在电脑端串口调试工具操作AT指令,生成WIFI
AT指令那么多,是不是迷茫不知道要具体操作哪几个?别急,我都给你们整理好了操作指令内容,顺序,及各指令操作后的响应内容(本人也是小白,最懂小白的心思了~此处应该有掌声)
关于AT指令,有几点说明下:
1.因为版本不同,有可能会出现AT指令无效的,官方说要升级固件,因为我目前使用正常,所以就不写升级固件的步骤了,官方资料都有描述,很nice。
2.上图红色方框内的AT指令都是要用的,这里只说明一下模式设置,AP模式就是8266这个模块当成热点,手机去连接它的ip地址和端口
3.把 红色方框内的指令 从上往下依次执行,就可以在手机端看到这个热点WIFI名称,我这个开始WIFI 名称是 “FaryLink_8051CA”,但我改成了’ESP8266’.
(5).掏出全身最值钱的家当–手机。下载网络调试的APP,由于我的黑白诺基亚没这功能,只能祭出平板了(华为队友)
**巨坑二号:**特别注意,关闭数据网,然后把刷抖音的WIFI不要设置成自动连接,不然,还没来得及连接8266的WIFI,手机又自动连接了家里的WIFI(我在这里就踩了坑,当时手机的网络调试助手APP怎么都连接不上8266的IP端口)
这样,手机就连接上了8266的WIFI了,到这里基本成功一大半了。
(6).连接成功后,就能平板发送内容,然后电脑上串口助手就会收到内容
这是操作的AT指令界面
如图,已显示连接成功,这时,我们可以在手机上发送一些数字试下效果··
电脑上的串口工具显示如下:
+IPD,0,X: 这里的0表示设备id号,表示第0台设备发送过来的信息,然后X表示信息包含的字符数量。
至此,只剩3件事,第一,修改波特率,这个是重点,ESP8266出厂默认的是115200,因为51单片机工作在4800或者9600相对稳定一点;;第二写代码;;第三,调试看效果。
重置完波特率后,把上面的AT指令再走一遍,都返回ok即可。
**巨坑三号:**当时跟着规格书跑AT+UART_DEF=4800,8,1,0,3,,简直坑死人!这个设置后,也会提示OK,然后把串口改成4800,但是再发送AT指令就没响应了,换成其他波特率就是显示全部乱码,当时网上找了一下,说什么的都有,什么升级AT固件,重启,其实就是把3改成0就搞定了。
(7).程序(官方给的很多例程文件,大家可以根据需要自行修改,控制灯亮灭的基本是一样的)
#include <reg52.h>
#include "intrins.h"
sbit LED1=P1^0;
typedef unsigned int u16;
typedef unsigned char u8;
u8 receive[2];
u8 sign=0;
void delay1s(void) //?? 0us
{
u8 a,b,c;
for(c=46;c>0;c--)
for(b=152;b>0;b--)
for(a=70;a>0;a--);
_nop_(); //if Keil,require use intrins.h
}
//?????
void Init()
{
SCON = 0x50; //????1,????
TMOD = 0x20; //T1????2,????
PCON = 0x80; //?????
REN = 1;
//??????
//TH1 = 0xfa; //???9600(11.0592)
// TH1 = 0xf3; //???4800(12.0000)
TH1 = 0xf4; //???4800(11.0592)
TL1 = TH1;
RI=0;
EA = 1;
ES = 0;
TR1 = 1;
}
//????
void send(u8 value)
{
ES=0; //??????
TI=0; //????????????
SBUF = value; //??
while(!TI); //??????
TI=0; //????????????
ES=1; //??????
}
void wifi_init()
{
u8 j=0;
u8 a[]="AT+CWMODE=2\r\n"; //1=station 2=ap 3=station+ap
u8 b[]="AT+CIOBAUD=4800\r\n";//BAND
u8 d[]="AT+CIPMUX=1\r\n";
u8 e[]="AT+CIPSERVER=1,5000\r\n";
j=0;
while(a[j]!='\0')
{
send(a[j]);
j++;
}
j=0;
delay1s();
while(b[j]!='\0')
{
send(b[j]);
j++;
}
delay1s();
j=0;
while(d[j]!='\0')
{
send(d[j]);
j++;
}
delay1s();
j=0;
while(e[j]!='\0')
{
send(e[j]);
j++;
}
delay1s();
}
void wifi_data()
{
if(receive[0]=='A') LED1=0; //?
if(receive[0]=='B') LED1=1; //?
}
void main()
{
Init();
wifi_init();
while(1)
{
wifi_data();
}
}
//????,?????+IPD,x,x:????????receive???
void ZD() interrupt 4
{
if(RI)
{
RI=0;
if(sign==1)
{
receive[0]=SBUF;
sign=0; //??receive[0]???
}
if(SBUF==':') sign=1;
}
}
(8).将WIFI模块和51开发板连接在一起,注意供电3V3!注意供电3V3!注意供电3V3!注意供电3V3!注意供电3V3!注意供电3V3!
(9).我这里直接点亮和关闭一个LED,上视频看效果
附:手机端APP操作
安卓下载网络调试精灵
设置IP地址:192.168.4.1 和 端口号:5000
二 . 总结
好好学习,天天向上!