找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1801|回复: 0
打印 上一主题 下一主题
收起左侧

51单片机驱动esp8266代码,附相关测试软件

[复制链接]
跳转到指定楼层
楼主
ID:320164 发表于 2018-5-2 00:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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;   //初始化完成,串行口中断打开
}

//获取数据,数据格式示例:+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;
  }
}

德飞莱wifi模块配套的调试软件.rar

513.38 KB, 下载次数: 15, 下载积分: 黑币 -5

AT指令表-仅供参考,部分指令由于版本不同不能使用.pdf

1.01 MB, 下载次数: 5, 下载积分: 黑币 -5

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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