51单片机连接ESP8266串口WiFi模块

原创 2017年01月18日 15:53:57

烧录固件

引脚连接

WiFi 51单片机
VCC 3.3V (5V连接时间过长可能会烧坏WiFi模块)
GND GND
CH_PD 3.3V
GPIO0 GND
UTXD TXD
URXD RXD

烧录固件

  1. 打开烧录软件,选择配置选项卡,点击第二栏的小齿轮图标 - 加载固件地址
    配置选项卡
  2. 点击其他选项的选择栏,取消选中,只选择第二个选项(固件地址)
    配置固件位置
  3. 返回操作选项卡,选择正确COM端口,点击一键烧写
  4. 模块重新上电,下载开始,等待下载完成
    成功样图

串口助手测试ESP8266串口WiFi模块

引脚连接

WiFi 51单片机
VCC 3.3V (5V连接时间过长可能会烧坏WiFi模块)
GND GND
CH_PD 3.3V
UTXD TXD
URXD RXD

注:此时连接状态 WiFi模块–>51单片机–>串口助手(PC),由于WiFi模块和单片机的TXD和RXD处于正接状态,单片机和WiFi模块并不通信,相当于WiFi模块直连串口助手。

AT常用指令

ESP8266串口WiFi模块分为三种工作模式:Station模式(类似无线终端),AP模式(提供无线接入服务),AP模式兼Station模式。

通过串口助手测试WiFi模块时,

测试

发送指令:AT

响应:OK

重启模块

发送命令:AT+RST

响应 :OK

设置模块

发送指令:AT+CWMODE = <mode>

说明:需重启后生效(AT+RST)

<mode>:1-Station模式,2-AP模式,3-AP兼Station模式。

响应:OK

配置AP参数

发送命令:

指令:AT+ CWSAP= <ssid>,<pwd>,<chl>, <ecn>

说明:指令只有在AP模式开启后有效

<ssid>:字符串参数,接入点名称 
<pwd>:字符串参数,密码最长64字节,ASCII
<chl>:通道号 
<ecn>:加密模式,0-OPEN,1-WEP,2-WPA_PSK,3-WPA2_PSK,4-WPA_WPA2_PSK  

示例:AT+CWSAP=”TEST”,”123456123456”,1,3

响应:OK

开启多连接模式

发送命令:AT+CIPMUX=<mode>

说明:<mode> :0-单路连接模式,1-多路连接模式

响应:OK

创建服务器

发送命令:AT+CIPSERVER=<mode>,<port>

说明:AT+ CIPMUX=1时才能开启服务器;关闭server模式需要重启。开启server后自动建立server监听,当有client接入会自动按顺序占用一个连接。

<mode>:0-关闭server模式,1-开启server模式       
<port>:端口号,缺省值为333 

响应:OK

通过51单片机初始化WiFi模块

通过串口助手测试AT指令可以发现,部分AT指令断电不会保存,因此需要在代码中进行初始化设置。

引脚连接

WiFi 51单片机
VCC 3.3V (5V连接时间过长可能会烧坏WiFi模块)
GND GND
CH_PD 3.3V
UTXD RXD
URXD TXD

注:此时连接状态 WiFi模块–>51单片机–>串口助手(PC),由于WiFi模块和单片机的TXD和RXD处于正接状态,单片机和WiFi模块可以进行串口通信。

实现代码

#include<reg52.h>               //51单片机常用的头文件
#define uchar unsigned char     //宏定义一个无符号的char类型
#define uint unsigned int       //宏定义一个无符号的int类型

//发送一字节
void sendByte(uchar b)
{
  SBUF = b;
  while(!TI);
  TI=0;
}

//发送字符串
void sendString(uchar *s)
{
  while(*s != '\0') //字符串默认结尾'\0',以此来判断字符串的结束
  {
    sendByte(*s);
    s++;
  }
}

//初始化ESP8266WiFi模块
void initEsp()
{
  uint a;
  SCON = 0x50;    //8位数据,可变波特率
  TMOD = 0x20;    //设置定时器1位16位自动重装模式
  TL1 = 0xfd;     //设置定时器初值,波特率为9600
  TH1 = 0xfd;
  ET1 = 0;        //禁止定时器1中断
  TR1 = 1;        //启动定时器1
  EA = 1;

  for (a=0; a<50000; a++);      //延时几秒,让模块有时间启动
  sendString("AT+CWMODE=2\n");  //设置为softAP和station共存模式

  //WiFi热点不能通过代码设置,可使用串口助手进行设置,该设置断电不丢失
  /*
  for (a=0; a<20000; a++);
  sendString("AT+CWSAP='TEST','12345678',1,3\n"); //建立WiFi热点
  */

  for (a=0; a<50000; a++);    
  sendString("AT+CIPMUX=1\n"); //启动多连接

  for (a=0; a<20000; a++);
  sendString("AT+CIPSERVER=1,333\n");//建立server,端口为333

  for (a=0; a<20000; a++);
  sendString("AT+CIPSTO=50\n");     //服务器超时时间设置

  RI=0;
  ES=1;   //初始化完成,串行口中断打开
}

//主函数  
void  main()  
{  
  initEsp();
}      

注:代码中波特率应和串口助手的波特率相符,且部分AT命令如重启模块,设置WiFi热点等指令无法使用。

获取WiFi传输的数据

ESP8266WiFi模块作为TCP服务器接受来自客户端的信息前默认会加上+IPD,n,<string.length>:这样的字符,处理时应注意。

实现代码

//获取数据,数据格式示例:+IPD,0,14:"time":"11:11"
void getData()
{
  uint a;
  if(receiveFlag)
  {
    for(i=0; i<2; i++)
    {
      Hour[i]=Buffer[17+i];
    }
    Hour[2]='\0';

    for(i=0; i<2; i++)
    {
      Minute[i]=Buffer[20+i];
    }
    Minute[2]='\0';

    //将获取到的数据发送到串口助手上显示
    for (a=0; a<10000; a++);    //需要延时,负责会造成数据错乱导致丢包
    sendString(Hour);
    for (a=0; a<10000; a++);
    sendString(Minute);

    receiveFlag=0;
    count=0;
    for(i=0; i<22; i++)
    {
      Buffer[i]=0;
    }
  }
}

//主函数
void main()
{
  initEsp();            //初始化WiFi模块
  receiveFlag = 0;      //receiveFlag判断执行getData() 的标志
  count = 0;            //count缓冲区RXDdata[count]的索引  
  while(1)
  { 
    getData();
  }
}

//利用中断接收信息,且舍弃无效信息
void uart() interrupt 4  
{
  if(RI == 1)   
  {
    ES = 0;     //关闭串行中断
    RI = 0;     //清除串口接收标志位
    temp = SBUF; //从串口缓冲区取得数据

    if(count<20)    //满足需接收的信息长度,将数据存入缓冲区
    { 
      Buffer[count]=temp;
      count++;
      if(Buffer[0]=='+')  //判断是否为无效数据,由于WiFi模块会自动加上"+PID.."开头的字符串
      {
        receiveFlag = 1; 
      }
      else
      {
        receiveFlag = 0;
        count = 0;
      }
    } 
    ES = 1; 
  }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

关于51单片机+ESP8266

前言:这个题目是我在单片机课程设计《基于ESP8266的物联电梯系统》中用到的,其实本质上就是实现了单片机对esp8266进行初始化,再将手机连上esp8266的WiFi,然后再通过手机端发送指令,e...
  • sherry_qin
  • sherry_qin
  • 2016年03月02日 11:52
  • 21330

使用ESP8266和51单片机的智能开关/智能灯

本文章所介绍的智能开关为在局域网内实现手机开关的简单方法,功能能简单,仅供参考。 如果对ESP8266模块不了解,请阅读以下两篇文章: ESP8266与电脑连接 ESP8266基础功能调试一、软件...
  • xiaohupashu
  • xiaohupashu
  • 2017年03月29日 11:04
  • 5900

串口wifi模块 51单片机整个工程源代码.

  • 2010年04月29日 12:40
  • 16KB
  • 下载

串口WiFi的调试心得

物联网WiFi的使用,配置等分享
  • xiaofei558008
  • xiaofei558008
  • 2015年03月02日 13:47
  • 2695

ESP8266模块使用完整教程

在我入门ESP8266小黄板的过程中,过程是艰难的,因为网络上的资料太多太乱,官网上的资料不算太完备,而在技术交流群里面的就更乱了,所以想按自己学习所总结到的经验来分享给大家。资源链接:http://...
  • sherry_qin
  • sherry_qin
  • 2016年03月16日 11:29
  • 47073

51单片机控制esp8266

  • 2015年06月14日 18:48
  • 3KB
  • 下载

串口wifi模块51单片机代码

  • 2013年06月09日 19:50
  • 40KB
  • 下载

WIFI 串口 UDP调试助手

  • 2016年05月17日 14:23
  • 1000KB
  • 下载

ESP8266 WiFi串口模块的学习与使用(一)

ESP8266 wifi模块的学习与实验
  • bigmagic123
  • bigmagic123
  • 2016年02月29日 20:25
  • 29022

Uart-WiFi模块ESP8266把玩记

Uart-WiFi模块ESP8266把玩记   由于只是一个模块,并不是完整的开发板,所以需要自己连接外围电路。试用的过程中遇到了很多麻烦,这里统统记录。   1.确认硬件版本 由于ESP8266版本...
  • kangear
  • kangear
  • 2014年10月23日 10:41
  • 109276
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:51单片机连接ESP8266串口WiFi模块
举报原因:
原因补充:

(最多只允许输入30个字)