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

2023-05-16

烧录固件

引脚连接

WiFi51单片机
VCC3.3V (5V连接时间过长可能会烧坏WiFi模块)
GNDGND
CH_PD3.3V
GPIO0GND
UTXDTXD
URXDRXD

烧录固件

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

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

引脚连接

WiFi51单片机
VCC3.3V (5V连接时间过长可能会烧坏WiFi模块)
GNDGND
CH_PD3.3V
UTXDTXD
URXDRXD

注:此时连接状态 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指令断电不会保存,因此需要在代码中进行初始化设置。

引脚连接

WiFi51单片机
VCC3.3V (5V连接时间过长可能会烧坏WiFi模块)
GNDGND
CH_PD3.3V
UTXDRXD
URXDTXD

注:此时连接状态 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");	//设置为AP模式

  //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; 
  }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

51单片机连接ESP8266串口WiFi模块 的相关文章

  • 从头开始写STM32F103C8T6驱动库(四)——编写延时函数,详解Systick

    系列文章目录 Github开源地址 从头开始写STM32F103C8T6驱动库 xff08 一 xff09 STM32CubeMX创建并调整工程结构 从头开始写STM32F103C8T6驱动库 xff08 二 xff09 编写系统初始化程序
  • 【ROS】在 Ubuntu 20.04 安装 ROS 的详细教程

    ROS安装指南 目录 ROS安装指南 前言 一 配置Linux清华镜像源1 1 介绍1 2 开始配置 二 安装ROS2 1 ROS的介绍2 1 开始安装 xff1a 配置公钥2 2 系统更新2 3 安装ROS 三 配置ROS3 1 初始化r
  • 京东业务增长10倍背后的敏捷开发秘籍【案例+分析】

    需求又要改 xff1f 项目上线时间又提前了 xff1f 老板还嫌增长不够 xff1f 团队都开始灰心丧气了 xff1f 来看看京东内部是如何解决这些让人焦头烂额的棘手问题 1 两次失败之后成功支持双11活动 京东每年两次大的的促销活动中都
  • 串口调试助手源程序

    目次 xff1a 1 建立项目 2 在项目中插入MSComm控件 3 利用ClassWizard定义CMSComm类控制变量 4 在对话框中添加控件 5 添加串口事件消息处理函数OnComm 6 打开和设置串口参数 7 发送数据 8 发送十
  • 【统计计算之非均匀分布随机数的生成】

    在学习统计计算这门课中 xff0c 学习到了非常多的算法 xff0c 个人觉得非常有趣 xff0c 希望可以和大家总结分享一下 持续更新中 我们用的课本 xff1a 统计计算 李东风 非均匀分布随机数 1 变换法 变换法主要分为两种 xff
  • Ubuntu 18.04在 VMware中启动时一直停留在Starting Update UTMP about System Runlevel Changes

    环境 Ubuntu 18 04 安装在VMware中 问题 启动时一直停留在Starting Update UTMP about System Runlevel Changes 解决思路 由于本人的虚拟机磁盘空间所剩无几 xff0c 怀疑是
  • linux零碎知识点

    源码包安装的 Apache 默认伪用户 xff1a daemonTCP IP是一个工业标准而非国际标准TCP IP可以用于同一主机上不同进程之间的通信Linux 由 Kernel Shelll 应用程序 组成网络协议三要素 xff1a 语义
  • 算法小知识

    一个数如果恰好等于它的因子之和 xff0c 这个数就称为 完数 例如6 61 1 xff0b 2 xff0b 3 xff0c 再如8的因子和是7 xff08 即1 43 2 43 4 xff09 xff0c 8不是完数回文数是指正序 xff
  • 启动 tomcat ,一直停在com.alibaba.druid.pool.DruidDataSource:init

    启动 tomcat 一直停在com alibaba druid pool DruidDataSource init clean一下就可以了
  • Win10 触摸屏 快捷键操作

    Win10 触摸板 快捷键操作 在 Windows 10 笔记本电脑的触摸板上试用这些手势 xff1a 快捷键 选择项目 xff1a 点击触摸板右键单击效果 xff1a 两根手指点击一次应用滚动 xff1a 将两个手指放在触摸板上 xff0
  • JCE cannot authenticate the provider BC

    JCE cannot authenticate the provider BC 解决办法 xff1a 修改 JAVA HOME jre lib security java security 文件 添加如下内容 security provid
  • Docker命令之:load命令

    作用 xff1a Load span class hljs operator an span image span class hljs built in from span span class hljs operator a span
  • Docker命令之: tag命令

    作用 xff1a span class hljs operator span class hljs keyword Create span a tag TARGET IMAGE that refers span class hljs key
  • installshield中增加BDE组件

    在C Program Files Common Files Borland Shared BDE下面有一个bdeinst cab xff0c 把它解压开后有一个bdeinst dll xff0c 把他打包到你的安装程序 xff0c 然后选择
  • intellij idea 合并分支到主分支,主分支代码同步到某一分支

    将gith或者Gitee上的项目clone到本地 git span class hljs keyword clone span https span class hljs comment xxxx span 打开intellij idea
  • springboot项目 intellij idea 找不到或者无法加载主类

    试了很多种网上的方法 xff0c 例如清除缓存 xff0c 指定module path 重启等都没有起作用 最后发现是 project structure project settings project project compiler
  • Vivado综合running时间太长

    cancel后查看log日志 xff0c 出现警告warnning PID not specified xff0c 解决办法 xff1a 新建一个工程 xff0c 导入原工程源文件 xff0c 重新进行综合 xff0c 就可以了
  • 使用putty和ssh登录时进不去

    我的是win10系统 初步理解ssh是一个协议 xff0c putty是一个使用这个协议连接本地电脑和远程服务器的开源软件 我知道连接ssh有两种方式 xff1a 第一种 xff1a 电脑左下角搜索界面输入 terminal 打开命令行cm
  • 联想win10安全模式进入以及退出

    进入安全模式的办法 xff1a 1 按住shift再点击重启 疑难解答 可进入带命令提示符的安全模式 进去后仅命令行一个窗口 xff0c 关闭后会出现黑屏 xff0c 仅有一个光标 2 桌面运行win 43 r 勾选安全引导 可直接进入安全
  • Linux网络编程之tcpdump抓包分析TCP三次握手过程

    使用TCP协议进行网络通讯时 xff0c 通信的两端首先需要建立起一条连接链路 xff0c 当然这并不表示使用UDP通信不需要 连接链路 xff0c 这里说的连接链路指的是通信协议范畴的东东 xff0c 并不是物理介质或者电磁波信号 xff

随机推荐