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

发布者:清新时光最新更新时间:2019-10-16 来源: 51hei关键字:ESP8266  wifi模块  51单片机  固件烧录 手机看文章 扫描二维码
随时随地手机看文章

前段时间在某宝买了个ESP8266模块,用来实现和51单片机的通信,现在将大致过程分享一下,希望能帮助到那些想学习的小白

三部分内容:配置模块、模块与51单片机简单通信、出厂固件的烧录

附件里有pdf教程,跟帖子内容一样的,浏览体验可能会更好一点


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


 


    引脚说明:

    •   VCC接3.3v,接5v时间长了可能会烧

    •   UTXD,URXD和其它的TXD,RXD接时注意交叉接就行了

    •   CH_PD要给高电平模块才工作

    •   GPIO0一般不用管,烧录固件时要接地

    •   RST低电平复位,高电平工作(默认高)

    •   GPIO2必须为高电平,内部默认已拉高,不用管


一、配置模块:

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


 


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


 


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


用到的AT指令如下:

•   AT(返回ok表示通信成功)

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

 


•   AT+CWMODE=X(设置工作模式指令,X可以是1、2、3,具体如下:

1:Station模式

2:AP模式

3:Station+AP模式

Station可理解为让wifi模块去连接路由器或热点,此时模块作为客户端

AP模式可理解为模块本身是一个热点,手机或电脑可以连接这个热点,此时模块作为服务器。

这里讲的是AP模式,Station模式不讲,可以自己去了解。

•   AT+RST(重启指令,设置新的工作模式后需重启才能生效。发送完这条指令后再发送其它指令可能会显示串口无效,需要退出串口调试助手再重新进入。)


 


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


 


这里我不设置,用默认的

•   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好像)

注:倒数的这两条指令在模块掉电后需要重新配置,其它那几条配置过一次不用再重新配置了。


 


 

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


 


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


 


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



二、模块与51单片机通信

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


 


程序:

#include

#include "intrins.h"

sbit LED1=P2^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; //允许串口中断

}

//单片机向模块发送AT指令

void wifi_init()

{

       u8 j=0;

   u8a[]="AT+CIPMUX=1rn";     //那两条掉电要重新配置的指令

   u8b[]="AT+CIPSERVER=1,6666rn";

   while(a[j]!='')

   {

           send(a[j]);

           j++;

   }

       j=0;                        //清零准备发第二条指令

       delay1s();                    //延时一下

       while(b[j]!='')

   {

           send(b[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;

       }

}

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


 


三、烧录出厂AT固件

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


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


 


电脑打开烧写软件


 


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


 


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


 


瞎说一些:

•   本人小白一个,也有很多不懂的地方,说的可能不是很对

•   如想了解更多,链接: wiki.ai-thinker点com/esp8266

•   对于不会java和安卓开发之类的又想弄个小app来实现控制硬件的,可以去了解一下E4A,中文编程,软件里面有很多例程,例如客户端,服务器之类的例程,可以参考一下然后自己整一个app,这个比较容易上手,有兴趣的可以去学习一下。


关键字:ESP8266  wifi模块  51单片机  固件烧录 引用地址:ESP8266 wifi模块与51单片机通信入门教程,模块出厂固件烧录

上一篇:单片机PWM控制舵机由浅入深各模块源代码(单路与8路)
下一篇:基于单片机的简易计算器proteus仿真和源代码

推荐阅读最新更新时间:2024-11-11 14:24

C-51单片机动态显示01234567
上一章用静态显示1234.5,无需循环语句 比较简单,这次用动态显示01234567 直接给参考程序:使用Keil uVision5编程,Proteus 8 Professional进行仿真。 #include reg51.h #include intrins.h #define uchar unsigned char #define uint unsigned int uchar code DSY_CODE ={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90}; void delay(uchar x) { uchar i; while(x--) {
[单片机]
C-<font color='red'>51单片机</font>动态显示01234567
51单片机入门案列-一个按键实现点亮LED和开启蜂鸣器
通过一个特殊按键s1实现2个功能,一个是点亮led 灯,一个是开启蜂鸣器,也可以增加其他的功能,比如num=3时同时点亮LED灯和开启蜂鸣器 工具:Keil U3 + STC-SP(v6.86)+BST-v51单片机开发板 晶振:11.0592MHZ 实现代码如下: #include reg52.h #include intrins.h #define uchar unsigned char uchar num = 0; //switch中的选项 sbit led = P1 ^ 0; //LED灯 sbit s1 = P3 ^ 4; //特殊按键 sbit beep = P2 ^ 3
[单片机]
简述51单片机延时函数
C程序中可使用不同类型的变量来进行延时设计。经实验测试,使用unsigned char类型具有比unsigned int更优化的代码,在使用时应该使用unsigned char作为延时变量。 以某晶振为12MHz的单片机为例,晶振为12MHz即一个机器周期为1us。扩展阅读:汇编延时程序算法详解 一. 500ms延时子程序 程序: void delay500ms(void) { unsigned char i,j,k; for(i=15;i 0;i--) for(j=202;j 0;j--) for(k=81;k 0;k--); } 计算分析: 程序共有三层循环 一层循环n:R5*2
[单片机]
51单片机P3口介绍
P3.0 P3.7为P3口的8位双向口线,第一功能为基本输入/输出;各脚第二功能见下表: P3口内部结构及其功能描述 如图是P2口内部1位的电路结构。 当P3端口使用第一功能(通用I/O口)输出数据时, 第二输出功能 信号应保持高电平,使与非门开锁,此时端口数据锁存器的输出端Q可以控制P3.x引脚上的输出电平; 当P3端口使用第二输出功能时,P3端口对应位的数据锁存器应置1,使与非门开锁,此时 第二输出功能 输出的信号可控制P3.x引脚上的输出电平; 当P3端口作为输入端口时,无论输入的是第一功能还是第二功能的信号,相应位的输出锁存器和 第二输出功能 信号都应保持为1,使下拉驱动器截止;
[单片机]
51单片机入门教程(5)——定时器中断
写在开头:中断是包括单片机在内的所有微处理器很重要的功能之一,初学单片机必须这一部分的知识。 一、中断的概念 先看百度百科是怎么定义中断的: 中断是指计算机运行过程中,出现某些意外情况需主机干预时,机器能自动停止正在运行的程序并转入处理新情况的程序,处理完毕后又返回原被暂停的程序继续运行。 —— 百度百科 那么怎么理解中断?看下面的例子。 关于中断: 小A正在学习。这时,他的朋友小B叫他一块儿吃鸡,小A停止学习,转去玩吃鸡游戏。玩了几局后,关掉游戏,继续学习。 关于中断优先级: 小A正在学习。这时,他的朋友小B叫他一块儿吃鸡,小A停止学习,转去玩吃鸡游戏,(吃鸡过程中,小A女朋友打来电话,于是挂机游戏,去接电话
[单片机]
<font color='red'>51单片机</font>入门教程(5)——定时器中断
如何使用AT89C51单片机控制LED显示屏的电路设计
LED显示屏广泛应用于工矿企业、学校、商场、店铺、公共场所等进行图文显示,广告宣传,信息发布。本文设计一种由4个16×16点阵LED模块组成的显示屏,由单片机作控制器,平滑移动显示任意多个文字或图形符号,本电路可级联扩展实现由任意多个16×16点阵LED模块组成的显示屏。 1 电路设计 控制电路由AT89C51单片机作控制器,显示屏由4个16×16点阵LED模块组成,每个16×16点阵LED模块由4个8×8点阵LED模块组成,用户可根据需要扩展增加任意多个16×16点阵LED模块。8×8点阵LED模块结构如图1所示,共8行8列,每个发光二极管放置在行线和列线的交叉点上,共64个发光二极管。当某一列为高电平,某一行为低电平时,则
[单片机]
如何使用AT89C<font color='red'>51单片机</font>控制LED显示屏的电路设计
51单片机连接24C02-C语言测试代码
我总结3点需要注意的地方 1.关闭非IIC通信器件,比如我的开发板SDA和SCL也连接了DS1302,造成干扰会没有结果。 2.IIC通信的应答,发送端在SCL为0时将SDA置1,等待接收端拉低SDA;接收端在拉低SDA持续一个周期后,应将SDA置1释放总线。 主机作为发送端等待应答 SDA=1; SCL=1; while(SDA); SCL=0; 主机作为接收端,进行应答或不应答 SDA=0; //不应答则为1 SCL=1; SCL=0; SDA=1; 3.24C02在写入周期完成后还有有内部写入时间Twr,所以可以查手册加入适当时间的延时函数,或者使用查询应答的方式进行延时等待。 总之,关键是注意
[单片机]
MCS_51单片机与8255A的接口设计
所谓可编程的接口芯片是指其功能可由微处理机的指令来加以改变的接口芯片,利用编程的方法,可以使一个接口芯片执行不同的接口功能。目前,各生产厂家已提供了很多系列的可编程接口,MCS-51单片机常用的两种接口芯片是8255以及8155。 8255和MCS-51相连,可以为外设提供三个8位的I/O端口:A口、B口和C口,三个端口的功能完全由编程来决定。 1.  8255的内部结构和引脚排列 下图7为8255的内部结构和引脚图。 (1)A口、B口和C口。A口、B口和C口均为8位I/O数据口,但结构上略有差别。A口由一个8位的数据输出缓冲/锁存器和一个8位的数据输入缓冲/锁存器组成。B口由一个8位的数据输出缓冲/锁存器和一个8位的
[单片机]
MCS_<font color='red'>51单片机</font>与8255A的接口设计
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved