找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 41228|回复: 84
收起左侧

ESP8266 wifi模块与51单片机通信入门教程,模块出厂固件烧录

  [复制链接]
ID:479008 发表于 2019-5-9 23:11 | 显示全部楼层 |阅读模式
前段时间在某宝买了个ESP8266模块,用来实现和51单片机的通信,现在将大致过程分享一下,希望能帮助到那些想学习的小白
三部分内容:配置模块、模块与51单片机简单通信、出厂固件的烧录
附件里有pdf教程,跟帖子内容一样的,浏览体验可能会更好一点

我买的是8266-01,引脚图如下

50e81a93228c22f9d31af1896ef0eeed.png

    引脚说明:
    •   VCC接3.3v,接5v时间长了可能会烧
    •   UTXD,URXD和其它的TXD,RXD接时注意交叉接就行了
    •   CH_PD要给高电平模块才工作
    •   GPIO0一般不用管,烧录固件时要接地
    •   RST低电平复位,高电平工作(默认高)
    •   GPIO2必须为高电平,内部默认已拉高,不用管

一、配置模块:
一般接线如下,图为模块与usb转ttl模块的接线,与单片机的接线也类似

6a9349404d6d7f80bd656b80526aca5d.png

下图为我的连接图,我这个usb转ttl模块的VCC引脚是输出3.3v的

1f01af3a7f59ac5a7ecc06be7c3eff0.jpg

接到电脑usb口,打开串口调试助手,wifi模块买回来的时候波特率应该都是115200,所以要把串口助手的波特率设置为115200,然后点击打开串口。

用到的AT指令如下:
•   AT(返回ok表示通信成功)
•   AT+CIOBAUD=X(改模块的波特率,X为要改成的波特率,因单片机达不到太高的波特率所以要更改一下波特率,因为我学习板上的晶振是12MHZ的,所以我这里改成4800,原因后面会说到,一般改9600就行,改完之后记得把串口助手的波特率也设置成新波特率,再发AT,有ok表明通信成功)
批注 2019-05-07 203505.png

•   AT+CWMODE=X(设置工作模式指令,X可以是1、2、3,具体如下:
1:Station模式
2:AP模式
3:Station+AP模式
Station可理解为让wifi模块去连接路由器或热点,此时模块作为客户端
AP模式可理解为模块本身是一个热点,手机或电脑可以连接这个热点,此时模块作为服务器。
这里讲的是AP模式,Station模式不讲,可以自己去了解。
•   AT+RST(重启指令,设置新的工作模式后需重启才能生效。发送完这条指令后再发送其它指令可能会显示串口无效,需要退出串口调试助手再重新进入。)

批注 2019-05-07 203714.png

•   AT+CWSAP=<ssid>,<pwd>,<chl>,<ecn>(设置AP模式下的参数,简单点说就是设置热点的名字,密码之类的,例如AT+CWSAP=”8266”,“66666666”,0,3)

批注 2019-05-08 203214.png

这里我不设置,用默认的
•   AT+CWSAP?(可以查看当前AP模式下模块热点的具体信息)
•   AT+CIFSR(查看IP地址,好像都是192.168.4.1)
•   AT+CIPMUX=1(开启多连接,貌似最多可以有5台设备连接这个模块,设备id分别分配为0到4)
•   AT+CIPSERVER=1,X(1表示开启服务器,X为自己设置的端口号,一般设3或4位。也可以只开启服务器而不设置端口号,默认端口是333好像)
注:倒数的这两条指令在模块掉电后需要重新配置,其它那几条配置过一次不用再重新配置了。

批注 2019-05-07 204334.png

批注 2019-05-07 204842.png
到这里拿出手机,打开wifi并连接上模块的热点,如果搜不到热点可以试一下拔了重插,再重新发那两条指令。

Screenshot_2019-05-07-20-46-42-385_comandroidse.png

连接热点成功后打开网络调试助手这个软件,右滑进入设置,协议设置为TCP Client,即客户端模式,IP地址为192.168.4.1,端口为刚才设置的,然后点连接,连接成功后就能通信了。

Screenshot_2019-05-07-20-47-19-770_com.network.de.png

这里发送了hello和hello66666666,可以看到电脑上的串口调试助手显示到手机发送过去的信息,这里注意到信息前还附带了+IPD,0,X:这里的0表示设备id号,表示第0台设备发送过来的信息,然后X表示信息包含的字符数量。

123.jpg

二、模块与51单片机通信
程序比较简单,实现的功能:手机发一个A,学习板上的灯亮,发B灭灯,简单地测试一下。下图是我的连线,很乱,主要注意接对就行了,学习板没有3.3v,接了一个降压模块给模块供电。

IMG_20190508_183359.jpg

程序:
  1. #include <reg52.h>
  2. #include "intrins.h"
  3. sbit LED1=P2^0;
  4. typedef unsigned int u16;
  5. typedef unsigned char u8;
  6. u8 receive[2];
  7. u8 sign=0;
  8. void delay1s(void)   //误差 0us
  9. {
  10.     u8 a,b,c;
  11.     for(c=46;c>0;c--)
  12.        for(b=152;b>0;b--)
  13.            for(a=70;a>0;a--);
  14.     _nop_();  //if Keil,require use intrins.h
  15. }
  16. //初始化串口
  17. void Init()
  18. {
  19.        SCON = 0x50;      //串口模式1,允许接收
  20.        TMOD = 0x20;    //T1工作模式2,自动重装
  21.        PCON = 0x80;      //波特率倍增
  22.        REN = 1;
  23.                                          //根据实际选择
  24. //  TH1 = 0xfa;          //波特率9600(11.0592)
  25.        TH1 = 0xf3;          //波特率4800(12.0000)
  26. //  TH1 = 0xf4;          //波特率4800(11.0592)
  27.        TL1 = TH1;
  28.        RI=0;
  29.        EA = 1;
  30.        ES = 0;
  31.        TR1 = 1;
  32. }
  33. //发送字符
  34. void send(u8 value)
  35. {
  36.        ES=0; //关闭串口中断
  37.        TI=0; //清发送完毕中断请求标志位
  38.        SBUF=value; //发送
  39.        while(!TI); //等待发送完毕
  40.        TI=0; //清发送完毕中断请求标志位
  41.        ES=1; //允许串口中断
  42. }
  43. //单片机向模块发送AT指令
  44. void wifi_init()
  45. {
  46.        u8 j=0;
  47.    u8a[]="AT+CIPMUX=1\r\n";     //那两条掉电要重新配置的指令
  48.    u8b[]="AT+CIPSERVER=1,6666\r\n";
  49.    while(a[j]!='\0')
  50.    {
  51.            send(a[j]);
  52.            j++;
  53.    }
  54.        j=0;                        //清零准备发第二条指令
  55.        delay1s();                    //延时一下
  56.        while(b[j]!='\0')
  57.    {
  58.            send(b[j]);
  59.            j++;
  60.    }
  61.        delay1s();
  62. }
  63. void wifi_data()
  64. {
  65.        if(receive[0]=='A')     LED1=0;    //亮
  66.        if(receive[0]=='B')    LED1=1;    //灭
  67. }   
  68. void main()
  69. {
  70.        Init();
  71.        wifi_init();
  72.        while(1)
  73.        {
  74.                 wifi_data();
  75.        }
  76. }
  77. //中断程序,此程序只把+IPD,x,x:后的有用数据存进receive数组里
  78. void ZD() interrupt 4
  79. {
  80.        if(RI)
  81.        {
  82.                 RI=0;
  83.                 if(sign==1)
  84.                 {
  85.                         receive[0]=SBUF;
  86.                         sign=0;                    //保存receive[0]的数据
  87.                 }
  88.                 if(SBUF==':')       sign=1;
  89.        }
  90. }
复制代码


上面提到的波特率问题,简单地说,11.0592是最适合通信的,如果用12的话会有误差,12的晶振在波特率为4800且加倍时(即SMOD为1),误差会比较小,所以这也是我设置波特率为4800的原因,详细可以看一下下面这张图。

批注 2019-05-09 230934.png

三、烧录出厂AT固件
刚接触8266模块的时候,有些地方不是很懂,一顿乱操作之后啥也没搞成,当时烧录了一个我也不知道有什么用的固件,然后经常傻傻的,有很多奇怪的情况,后来烧录了出厂固件功能就正常了,在这也写一下具体操作。

接线方面,如下图,主要是绿色那条,GPIO0接低电平时为下载模式。

6a9349404d6d7f80bd656b80526aca5d6.png

电脑打开烧写软件

批注 2019-05-07 232327.png

选中文件夹里面bin后缀的固件

批注 2019-05-07 232249.png

按下图配置好,选择对应串口,点击START即可烧写

批注 2019-05-08 224915.png

瞎说一些:
•   本人小白一个,也有很多不懂的地方,说的可能不是很对
•   如想了解更多,链接: wiki.ai-thinker点com/esp8266
•   对于不会java和安卓开发之类的又想弄个小app来实现控制硬件的,可以去了解一下E4A,中文编程,软件里面有很多例程,例如客户端,服务器之类的例程,可以参考一下然后自己整一个app,这个比较容易上手,有兴趣的可以去学习一下。
批注 2019-05-09 233808.png

全部资料51hei下载地址:
所有资料.zip (14.59 MB, 下载次数: 1196)

评分

参与人数 3黑币 +72 收起 理由
lydsgy527 + 12 很给力!
西西弗 + 10 很给力!
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

ID:1 发表于 2019-5-10 05:00 | 显示全部楼层
好资料,51黑有你更精彩!!!
回复

使用道具 举报

ID:302325 发表于 2019-5-10 08:52 | 显示全部楼层
感谢分享   CH_PD要给高电平模块才工作  这条很 有用   以前一直不知道
回复

使用道具 举报

ID:158956 发表于 2019-5-10 16:55 来自手机 | 显示全部楼层
感谢分享,正好在研究这个
回复

使用道具 举报

ID:366617 发表于 2019-6-23 03:17 | 显示全部楼层
太棒了,真是了不起
回复

使用道具 举报

ID:499701 发表于 2019-7-5 12:42 | 显示全部楼层
楼主,CH_PD脚我是没接的,也能正常工作,应该是默认上电高电平的
回复

使用道具 举报

ID:66302 发表于 2019-7-6 22:36 | 显示全部楼层
感谢分享~~~~~~~~~~~~~~~~~~~~~
回复

使用道具 举报

ID:282095 发表于 2019-7-7 10:33 | 显示全部楼层
wift模块和6395串口进行通信
回复

使用道具 举报

ID:479008 发表于 2019-7-10 10:44 | 显示全部楼层
终极小馒头啦 发表于 2019-7-5 12:42
楼主,CH_PD脚我是没接的,也能正常工作,应该是默认上电高电平的

CH_PD没接的话只能看到红色灯亮,但是发AT指令是没有反应的,wifi模块应该没有工作,CH_PD接高电平,插到电脑usb口时会看到蓝色的灯闪烁,发AT指令正常。
回复

使用道具 举报

ID:584036 发表于 2019-7-16 11:25 | 显示全部楼层
我喜欢
回复

使用道具 举报

ID:471817 发表于 2019-7-16 13:48 来自手机 | 显示全部楼层
学习学习,感谢分享
回复

使用道具 举报

ID:574338 发表于 2019-7-30 20:09 来自手机 | 显示全部楼层
资料不错,我已经制作成功了
回复

使用道具 举报

ID:586578 发表于 2019-8-5 10:45 | 显示全部楼层
请问波特率更改不成功是怎么回事呢?手机也连接不上
回复

使用道具 举报

ID:479008 发表于 2019-8-5 14:48 | 显示全部楼层
zk_2019 发表于 2019-8-5 10:45
请问波特率更改不成功是怎么回事呢?手机也连接不上

你是指发更改波特率的AT指令返回的是error吗?可以刷一下固件看看行不行
回复

使用道具 举报

ID:439613 发表于 2019-8-8 16:27 | 显示全部楼层
怎么让单片机发给手机上
回复

使用道具 举报

ID:602358 发表于 2019-8-21 14:41 | 显示全部楼层
谢谢分享!!!尝试
回复

使用道具 举报

ID:577696 发表于 2019-8-22 18:53 | 显示全部楼层
我用的是8266MOD的板子,只需要连RX/TX和GND,已经成功了
回复

使用道具 举报

ID:446113 发表于 2019-8-23 10:26 | 显示全部楼层
good 谢谢分享
回复

使用道具 举报

ID:581300 发表于 2019-8-24 15:56 | 显示全部楼层
为什么usb-ttl转换器插到电脑上串口有警告?
回复

使用道具 举报

ID:164963 发表于 2019-8-24 21:32 | 显示全部楼层
收藏下…………………………
回复

使用道具 举报

ID:282095 发表于 2019-8-25 07:29 | 显示全部楼层
涨知识了 不错不错 感谢分享
回复

使用道具 举报

ID:479008 发表于 2019-8-25 07:54 | 显示全部楼层

RE: ESP8266 wifi模块与51单片机通信入门教程,模块出厂固件烧录

Immortal盲点 发表于 2019-8-24 15:56
为什么usb-ttl转换器插到电脑上串口有警告?

这个,,,你usb-ttl的驱动装了吗,如果装了的话可能是电脑串口的某些问题吧,我也不太清楚。
回复

使用道具 举报

ID:581300 发表于 2019-8-25 16:20 来自手机 | 显示全部楼层
为什么连上单片机之后手机没办法连接8266而且下载不了程序到单片机上呢
回复

使用道具 举报

ID:427492 发表于 2019-8-25 20:22 | 显示全部楼层
感谢楼主分享,很不错
回复

使用道具 举报

ID:198493 发表于 2019-10-15 17:09 | 显示全部楼层
帮大忙了,十分感谢
回复

使用道具 举报

ID:252935 发表于 2019-10-16 08:43 | 显示全部楼层
大学见人用串口,蓝牙,ZIGBEE做过,
但是WIFI还是第一次
回复

使用道具 举报

ID:89591 发表于 2019-10-16 09:24 | 显示全部楼层
这个不错啊
回复

使用道具 举报

ID:643340 发表于 2019-11-16 20:36 | 显示全部楼层
请问楼主,为啥要烧固件呀?
回复

使用道具 举报

ID:643340 发表于 2019-11-24 00:51 来自手机 | 显示全部楼层
q1914702038 发表于 2019-8-8 16:27
怎么让单片机发给手机上

这得需要服务器,可以去用阿里云服务器,学生好像有优惠
回复

使用道具 举报

ID:677072 发表于 2020-1-15 10:33 | 显示全部楼层
感谢楼主分享!特别是代码方面的 对我的实现很有意义
回复

使用道具 举报

ID:686631 发表于 2020-1-16 13:41 | 显示全部楼层
感谢分享!再加一个手机APP就完美了
回复

使用道具 举报

ID:680501 发表于 2020-1-16 14:39 来自手机 | 显示全部楼层
感谢楼主分享
回复

使用道具 举报

ID:434663 发表于 2020-3-6 10:15 | 显示全部楼层
用AT指令改过波特率,热点名字,密码,IP地址,工作模式 之后就永久有效了吗? 还是用一次改一次?
回复

使用道具 举报

ID:94449 发表于 2020-3-9 12:06 | 显示全部楼层
好资料,已经刷好原厂固件,可以改波特率了。
回复

使用道具 举报

ID:347467 发表于 2020-3-9 14:37 | 显示全部楼层
谢谢分享。
回复

使用道具 举报

ID:315554 发表于 2020-3-9 16:23 | 显示全部楼层
学习了,谢谢楼主,说明很详细;
回复

使用道具 举报

ID:697407 发表于 2020-3-23 00:38 | 显示全部楼层
请问接usb转ttl上的3.3v可以吗,普中的板
回复

使用道具 举报

ID:686739 发表于 2020-3-23 11:33 来自手机 | 显示全部楼层
谢谢分享
回复

使用道具 举报

ID:69408 发表于 2020-4-16 15:40 | 显示全部楼层
非常详细的资料,谢谢楼主分享!
回复

使用道具 举报

ID:608007 发表于 2020-4-17 09:21 | 显示全部楼层
值得学习 感谢楼主的分享
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表