[TOC]
# **WIFI模组设计**
## **ESP8266介绍**
ESP8266 提供 度集成的 Wi-Fi 解决 案,具有低功耗、设计紧凑、性能可靠等特 点。
ESP8266是 个完整且 成体系的 Wi-Fi 络解决 案,能够独 运 ,也可以作为从 机搭载于其他主机 MCU 运 。ESP8266 在搭载应 并作为设备中唯 的应 处 时,能够直接从外接 Flash 中启动。内置的 速缓冲存储 有 于提 系统性能,并减少 内存需求。
当 ESP8266 负责 线上 接 承担 Wi-Fi 适配 的任务时,可以将其添加到任何基于 微控制 的设计中,连接简单 ,只需通过 SPI/SDIO 接 或 I2C/UART 即可。
除 Wi-Fi 功能,ESP8266还集成 Tensilica L106 钻 系 的 32-bit 处 和 上 SRAM,拥有强 的 上处 和存储能 。ESP8266 可通过 GPIO 集成传感 及其他 设备,降低前期的开发成本,并在运 中最少地占 系统资源。乐鑫提供的软件开发包 (SDK) 包含多种应 的示 代码。
ESP8266 度 内集成,包括天线开关,射频 balun,功率放 ,低噪声接收放 ,滤波 和电源管 模块。因此整个解决 案仅需极少的外部电 ,并且所占的 PCB 空间达到最低。
## **WIFI模组的特点**
采用 ESP8266 WIFI模组 系统表现出来的领先特征有:
• 节能在睡眠/唤醒模式之间的快速切换
• 配合低功率操作的 适应 线电偏置
• 前端信号的处 功能
• 故障排除
• 消除蜂窝/蓝 /DDR/LVDS/LCD 扰的 线电系统共存特性
## **ESP8266最小系统**
ESP8266工作原理
![](https://box.kancloud.cn/383155b86f5fd3d9ebb25f29ff5bd6e7_767x409.png)
ESP8266原理说明:
![](https://box.kancloud.cn/6f569e4f8af85f2b67272f1d69c4310b_702x832.jpg)
ESP8266开关模式
![](https://box.kancloud.cn/182acc7209d6059e2c4a72a2e6f40be5_708x127.png)
## **电路图设计**
ESP8266EX 模组的 件只需要 10 个以内电阻电容电感、1 个 源晶振及 1 个 SPI Flash 组成。射频部分实现全内部集成,并且内部带有 动校准功能。ESP8266EX 度集成的 特点,使得其外围设计 常简单容 。为 能够 好的确保 ESP8266EX 模组的 作性 能,下 将详细介绍 ESP8266EX 的原 图设计与布局设计。
ESP8266EX 模组的整体电 如图所示。
![](https://box.kancloud.cn/7496f1d549a0d9ec01e5f6907825ee0e_727x495.png)
ESP8266EX 模组的电 图设计主要包括六部分:
• 电源部分
• 上电时序与复位
• Flash
• 晶振
• 射频
• 外置电阻
### **电源**
1.数字与 IO 电源
ESP8266EX 只有 Pin11 和 Pin17 两个数字电源管脚。数字电源 需在电 中增加滤波电
容。数字电源 作电压范围:1.8V ~ 3.3V。
![](https://box.kancloud.cn/bfcce6e8d248c5754d8beba78c90143d_709x269.png)
2.模拟电源
ESP8266EX 有 5 个模拟电源管脚,其中 Pin1、Pin3、Pin4 给内置的 PA 和 LNA 供电,
Pin28、Pin29 给内置的 PLL 供电。模拟电源管脚的 作电压为 1.8V ~ 3.3V。
在模拟电源部分需要注意的是当 ESP8266EX 作在 Tx 时,瞬间电流会加 ,往往引起 电源的轨道塌陷,所以在设计时在模拟电源电 上增加 个 0603 或 0805 封装的 10 μF 电容。此电容可与 0402 封装的 0.1 μF 电容搭配。
![](https://box.kancloud.cn/cd31f4e64f07acaa98676ef30f227324_480x461.png)
### **上电时序与复位**
1.上电时序
ESP8266EX 使 3.3V 作为统 的系统电源,所以上电时序上只要遵循:
ESP8266EX 的 Pin7 CH_EN 使能管脚上电要晚于系统电源 3.3V 上电,延时时间 (T) 可由 RC 参数计算 得出。
2.复位
ESP8266EX 的 Pin32 为 RST 管脚,此管脚内部有上拉( 使 时也可悬空处 ),此管 脚低电平有效。为防 外界 扰引起重启, 般要求 RST 引脚的引线需尽 短 些,且 最好加上拉电阻和对地电容。
ESP8266EX 的 Pin7 CH_EN 使能管脚也可作为复位管脚来使 。当 CH_EN 为低电平时, 通常要求输 电平应低于 0.6V,并持续 200 μs 以上,则 ESP8266EX 会下电。
### **FLASH**
前 ESP8266EX 采 的 demo Flash 为 SPI Flash,ROM :2 MB,封装为 SOIC_8 (SOP_8)。
其中在 Pin21 SD_CLK 管脚上 联 个 0402 封装的电阻连接到 Flash CLK 管脚上。此电 阻的作 主要为降低驱动电流,减 扰和外部 扰,调节时序等。初始 联电阻 为 200Ω。
![](https://box.kancloud.cn/dd4a14d2f557427934dbc5f85345b096_406x186.png)
### **晶振**
前晶体 40M,26M 及 24M均 持,使 时请注意在下载 具中选择对应晶体类型。晶 振输 输出所加的对地调节电容 C1、C2 可 设为固定值,该值范围在 6 pF ~ 22 pF,具 体值需要通过对系统测试后进 调节确定。基于 前市场中主流晶振的情况, 般 26 Mhz 晶振的输 输出所加电容 C1、C2 在 10 pF 以内; 般 40 MHz 晶振的输 输出所加 电容 10 pF < C1、C2 < 22 pF。
选 的晶振 身精度需在 ±10 PPM。晶振的 作温度为 -20°C ~ 85°C。
### **射频**
![](https://box.kancloud.cn/114d4dcf02ad9c042ebfd0b66ec74cbf_400x216.png)
### **外置电阻12k**
ERS12K (Pin31) 需外接 12K 对地电阻,该电阻作为芯 bias 控制电流的电阻对精度的要
求是 较 的,建议采 12K ± 1% 精度的电阻。
![](https://box.kancloud.cn/00c5ad7716d2fc411c47b37060d36be6_408x109.png)
## **ESP8266编程代码**
我们通过手机APP对其ESP8266端口进行收发数据,因此需要对ESP8266进行编程,代码如下:
~~~
#include "sta_tcpclent_test.h"
#include "SysTick.h"
#include "usart.h"
#include "esp8266_drive.h"
#include
#include
volatile u8 TcpClosedFlag = 0;//定义失去连接标志
void ESP8266_STA_TCPClient_Test(void)
{
u8 res;
u32 ul=0;
char str[100]={0},*links,*UserCmd;//links为检测连接字符串变量,usercmd为用户命令字符串变量
printf ( "\r\n正在配置8266\r\n" );//向串口1发消息
links="STATUS:3";//STATUS=2表示无连接,=3为有连接
ESP8266_CH_PD_Pin_SetH;//设置CH_PD为高电平
ESP8266_AT_Test();//AT测试
ESP8266_Net_Mode_Choose(STA_AP);//选择模式
while(!ESP8266_JoinAP(User_ESP8266_SSID,User_ESP8266_PWD));//连接外部wifi,
ESP8266_Enable_MultipleId (ENABLE );//设置多链接
while(!ESP8266_StartOrShutServer ( ENABLE, "8266", "2000" ));//开启服务器和端口
printf ( "\r\n配置ESP8266 OK\r\n" );
while (1)//无限循环
{
ESP8266_Send_AT_Cmd ( "AT+CIPSTATUS", "ok", 0, 1000 );//查看链接状态
if(strstr ( ESP8266_Fram_Record_Struct .Data_RX_BUF, links))//如果有链接
{
printf ( "\r\n有客户端连接\r\n" );
UserCmd="mhmx";//客户端发来的命令字符串,可以是中文“开启”,“关闭”等
if(ESP8266_QL(UserCmd))//如果命令字符串匹配执行下列代码
{
printf ( "\r\n接收到指令\r\n" );//
//这里可以添加自己需要的代码,比如打开LED,或某个引脚的电平
sprintf (str,"智能家居启动完成\r\n" );
ul = strlen ( str );
ESP8266_SendString ( DISABLE, str, ul, Multiple_ID_0 );//向客户端发数据
delay_ms (1000);
}
else//接收到的字符串不匹配
{
printf ( "\r\n无有效命令\r\n" );
}
}
else//没有链接
{
printf ( "\r\n无客户端连接\r\n" );
}
//以下代码为检测是否和wifi失去连接,如果丢失连接,就重新连接。
if(TcpClosedFlag) //检查标志位
{
//ESP8266_ExitUnvarnishSend(); //退出透传模式,如有需要去掉//
do
{
res = ESP8266_Get_LinkStatus(); //获取链接状态
}
while(!res);//如果为0,获取状态失败,一直获取
if(res == 4) //4表示失去连接
{
printf ( "\r\n正在重新连接\r\n" );
while(!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD ) );
while(!ESP8266_Enable_MultipleId (ENABLE ));
while(!ESP8266_StartOrShutServer ( ENABLE, "8266", "500" ));
//while (!ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0 ) );//如果8266是client模式,去掉//启用此代码
printf ( "\r\n重新连接成功\r\n" );
}
//while(!ESP8266_UnvarnishSend());//重新启动透传,如果需要去掉//
}
}
}
~~~
## 参考温县
1.ESP8266 Internet of Things Cookbook https://book.douban.com/subject/27073971/