esp8266中文资料汇总(esp8266引脚图_与单片机连接_串口wifi实例)

芯片引脚图

698人已加入

描述

  esp8266引脚图及功能

wifi模块
wifi模块
wifi模块

  ESP8266特性

  *802.11 b/g/n

  *内置低功耗32位CPU:可以兼作应用处理器

  *内置10 bit高精度ADC

  *内置TCP/IP协议栈

  *内置TR开关、balun、LNA、功率放大器和匹配网络

  *内置PLL、稳压器和电源管理组件

  *支持天线分集

  *STBC、1x1 MIMO、2x1 MIMO

  *A-MPDU、A-MSDU的聚合和0.4 s的保护间隔

  *WiFi @ 2.4 GHz,支持 WPA/WPA2 安全模式

  *支持STA/AP/STA+AP工作模式

  *支持Smart Config功能(包括Android和iOS设备)

  *SDIO 2.0、(H) SPI、UART、I2C、I2S、IR Remote Control、PWM、GPIO

  *深度睡眠保持电流为10 uA,关断电流小于5 uA

  *2 ms之内唤醒、连接并传递数据包

  *802.11b模式下+20 dBm的输出功率

  *待机状态消耗功率小于1.0 mW (DTIM3)

  *工作温度范围:-40°C - 125°C

  *通过 FCC, CE, TELEC, WiFi Alliance 及 SRRC 认证

  5V单片机与3.3V的ESP8266串口连接

wifi模块

  ESP8266最小系统与单片机最小系统连接

wifi模块

  在正常使用的时候,固件刷写开关不需要打开,如果需要热刷写固件,可以考虑将刷写固件的引脚与单片机的引脚相连。

  ESP8266内是一块单片机,也可以通过模块本身直接控制开关,本文仅使用模块的TCP透传功能,这里不再展开。

  单片机程序编写

  (1)首先定义如下变量/常量:

  /**********类型定义**************/

  #define u8 unsigned char

  #define u16 unsigned int

  #define u32 unsigned long

  #define code const

  /***********IO定义***************/

  //定义P5.5口 LED指示灯

  sbit LED=P2^4;

  /**********缓存变量**************/

  //串口接受缓存

  u8 xdata RX_buffer[tbuf];

  //接收计数变量

  u8 RX_num;

  /**********预定义字符串**************/

  //握手连接指令,返回“OK”

  u8 code esp_at[]=“AT ”;

  //设置ESP8266的工作模式1 Station,返回“OK”或者“no change”

  u8 code esp_cwmode[]=“AT+CWMODE=1 ”;

  //连接到WiFi热点或无线路由上,NXP为无线路由名称,12345678为密码;连接成功返回“OK”

  u8 code esp_cwjap[]=“AT+CWJAP=”NXP“,”123456789“ ”;

  //本机IP地址查询指令

  u8 code esp_cifsr[]=“AT+CIFSR ”;

  //连接到TCP服务器,返回“Linked”

  //192.168.0.149为服务器IP地址 6000为服务器端口号 不同电脑不同软件可能会不一样的

  u8 code esp_cipsta[]=“AT+CIPSTART=”TCP“,”192.168.0.149“,6000 ”;

  // 设置发送数据长度

  u8 code esp_cipsend[]=“AT+CIPSEND=5 ”;

  //设置多链接

  u8 code esp_DuoLianjie []=“AT+CIPMUX=1 ”;

  //设置端口号

  u8 code esp_Port []=“AT+CIPSERVER=1,3122 ”;

  //查询模块自身IP,返回IP地址

  u8 code esp_IP []=“AT+CIFSR ”;

  //服务器发送 握手数据

  u8 code esp_Woshou []=“:test”;

  //服务器发送 LED检测数据

  u8 code esp_test_LED []=“:LED”;

  //服务器发送 打开LED

  u8 code esp_LED_ON []=“:LED ON”;

  //服务器发送 关闭LED

  u8 code esp_LED_OFF []=“:LED OFF”;

  //复位重启

  u8 code esp_Rst []=“AT+RST ”;

  //发送数据长度

  u8 code esp_DATA []=“AT+CIPSEND=1024 ”; 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152

  接下来是缓存字符串比较函数,用于判断返回值中是否含有OK等来自ESP8266模块的工作标识。如需用到更复杂的匹配,可以将之替换为正则表达式引擎。

  //指定字符串与缓存数组数据进行数据比较

  //*p 要比较的指定字符串指针数据

  //返回:1 数据一致 0 数据不一致

  u8 Data_compare(u8 *p)

  {

  if(strstr(RX_buffer,p)!=NULL)

  return 1;

  else

  return 0;

  }12345678910

  程序的变量已经定义完,接下来是介绍主程序的部分。

  (2)端口初始化

  51单片机部分无需初始化端口,另一部分需要初始化端口才能使用:

  //针对 IAP15W4K61S4 STC15W4K56S4 系列 IO口初始化

  //io口初始化 P0 P1 P2 P3 P4 为准双向IO口

  //注意: STC15W4K32S4系列的芯片,上电后所有与PWM相关的IO口均为

  // 高阻态,需将这些口设置为准双向口或强推挽模式方可正常使用

  //相关IO: P0.6/P0.7/P1.6/P1.7/P2.1/P2.2

  // P2.3/P2.7/P3.7/P4.2/P4.4/P4.5

  void IO_init(void)

  {

  P0M0 = 0X00;

  P0M1 = 0X00;

  P1M0 = 0X00;

  P1M1 = 0X00;

  P2M0 = 0X00;

  P2M1 = 0X00;

  P3M0 = 0X00;

  P3M1 = 0X00;

  P4M0 = 0X00;

  P4M1 = 0X00;

  }1234567891011121314151617181920212223

  串口配置及中断配置:

  void UartInit(void)

  {

  S2CON = 0x50; //8位数据,可变波特率

  AUXR |= 0x04; //定时器2时钟1为FOSC,即1T

  T2L=(65536-(11059200/4/115200)); //设置定时初值

  T2H=(65536-(11059200/4/115200))》》8; //设置定时初值

  AUXR |= 0x10; //启动定时器2

  }

  //串口2发送串口数据(字节)

  void Uart2SendByte(u8 ch)

  {

  S2BUF = ch; //写数据到UART2数据寄存器

  while(!(S2CON&S2TI));

  S2CON&=~S2TI;

  }

  //串口2发送字符串

  void Uart2SendStr(u8 *s)

  {

  IE2 = 0x00;

  while (*s) //检测字符串结束标志

  {

  Uart2SendByte(*s++); //发送当前字符

  }

  IE2 = 0x01;

  }

  //串口2中断

  void Uart2() interrupt 8 using 1

  {

  IE2 = 0x00; //关闭串口2中断

  if (S2CON & S2RI)

  {

  S2CON &= ~S2RI;

  RX_buffer[RX_num] = S2BUF;

  RX_num++;

  if(RX_num》tbuf) RX_num = 0;

  }

  if (S2CON & S2TI)

  {

  S2CON &= ~S2TI;

  }

  IE2 = 0x01; //开启串口2中断

  }

  1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950

  调用这一段代码中的UartInit(void) 函数初始化串口。

  全部初始化完毕后,就可以使用代码对ESP8266配置了。

  // 1 发送AT 进行握手

  while(1)

  {

  Uart2SendStr(esp_at); //串口2对wifi模块发送握手指令 即AT

  if(Data_compare(“OK”))break;

  else Uart1SendStr(“ERROR1,some problems with ESP8266 ”);

  delay1ms(600);

  }

  Uart1SendStr(“OK,mcu connection success with ESP8266! ”);

  memset(RX_buffer, 0, tbuf);//清缓存数据

  RX_num=0; //接收计数变量清0

  // 2 配置wifi工作模式为SA模式

  while(1)

  {

  Uart2SendStr(esp_cwmode); //串口2对wifi模块工作模式进行设置

  if(Data_compare(“OK”)||Data_compare(“no change”))break;

  delay1ms(600);

  }

  memset(RX_buffer, 0, tbuf);//清缓存数据

  RX_num=0; //接收计数变量清0

  // 3 连接热点wifi wifi名 密码 如果失败 延时继续连接

  while(1)

  {

  Uart2SendStr(esp_cwjap); //串口2发送 指点wifi名 密码 等待模块连接

  if(Data_compare(“OK”))break;

  delay1ms(3000);

  }

  memset(RX_buffer, 0, tbuf);//清缓存数据

  RX_num=0; //接收计数变量清0

  // 4 设置多链接

  while(1)

  {

  Uart2SendStr(esp_DuoLianjie); //设置多链接

  if(Data_compare(“OK”))break;

  delay1ms(3000);

  }

  memset(RX_buffer, 0, tbuf);//清缓存数据

  RX_num=0; //接收计数变量清0

  // 5 设置端口号

  while(1)

  {

  Uart2SendStr(esp_Port); //设置端口号

  if(Data_compare(“OK”))

  {

  delay1ms(3000);

  break;

  }

  delay1ms(3000);

  }

  Uart1SendStr(“OK,Succeed esp_Port ”);

  memset(RX_buffer, 0, tbuf);//清缓存数据

  RX_num=0; //接收计数变量清0

  esp8266串口wifi实例

wifi模块

  引脚连接:

  GND:接地

  GPIO16:其实是RST,低电平复位,所以为了正常工作,直接连接VCC即可

  VCC:接3.3V,看过其他教程说不能接5V,不过小编有试过直接用5V来把玩,玩了一段时间都没啥问题,可以正常使用。但是有个问题就是芯片很烫,所以用久了可能会烧坏模块,而且wifi模块一过热,连接会很慢。所以,尽量用3.3V。

  UTXD、URXD:前者接单片机或USB转串口模块的RXD,后者接TXD。这两个可以和5V单片机的RXD、TXD连接,经测试通信正常,无需5V转3,3V

  GPIO2、GPIO0:悬空

  CH_PD:看一些教程说可以直接接VCC,但经测试不行,电流太大了,所以要经电阻连接到VCC,也就是串联个电阻然后电阻再接到VCC,电阻的阻值:数k。小编用4.7k,其实这个没什么严格限制

  调试:

  调试用的是USB转串口模块,根据上面的引脚连接配合面包板进行连接。然后就可以插电脑开串口助手来调试了。波特率的话得自己试,有可能是9600或115200,甚至是其他的。小编有一块是9600一块是115200。怎么试呢?在串口助手勾发送新行,然后发送AT+RST,如果先出现一堆乱码最后带个ready则说明试对了。然后说明该模块正常是什么大问题了,还不放心的话还可以尝试其他AT指令配合TCP调试工具来测试。

wifi模块

  示例:

  用单片机通过该模块和上位机通信的例子(AP模式)

  code uchar at_1[14]={‘A’,‘T’,‘+’,‘C’,‘I’,‘P’,‘M’,‘U’,‘X’,‘=’,‘1’,0x0D,0x0A,‘’};

  code uchar at_2[17]={‘A’,‘T’,‘+’,‘C’,‘I’,‘P’,‘S’,‘E’,‘R’,‘V’,‘E’,‘R’,‘=’,‘1’,0x0D,0x0A,‘’};

  经过上一步的调试,测试后觉得该模块没问题,就可以直接根据引脚连接和单片机连接了。

  在单片机的初始化程序中要发这两个字符串到wifi模块,先发at_1[14],延时100ms,再发at_2[17]。当然不一定要在初始化程序中发这两串,也可以在按键中断中发送,需要建立连接的时候按下按键行了。

  这两个AT指令就当做是在创建连接就行。发送完这两句之后就可以用上位机连接wifi模块了。

  wifi模块的IP为:192.168.4.1 端口号:333 ;

  ESP8266的出产设置都这个IP和端口,一般不会出错。如果不放心

  可以用串口调试发AT+CIFSR=? ,会返回模块的IP和端口号。

  PS:后面的0x0d,0x0a相当于发送新行的功能,不加的话AT指令无效!

  做完这几步就可以和上位机进行wifi连接了!

  注意:关于单片机接收来自上位机的字符串,由于wifi会自动在接收的内容前面自动加“+IPD,x,x:“的字符,所以接收的时候记得加个判断,截掉”:“前面的字符,留下后面的就是来自上位机的内容了。

  补:常用的几个AT指令

  AT+CWMODE=3 :STA+AP模式

  AT+RST :复位

  AT+CIPMUX=1 :多连接

  AT+CIPSERVER=1 :建立服务器

  AT+CIFSR :查询模块IP端口

  AT+CIPSERVER=1,6000 :建立服务器的同时顺便设端口号

  AT+CIPMUX=0 :单连接

  AT+CIPSEND=0,1 :向连接序号为0的连接发1个字节

 
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分