[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工作原理

ESP8266原理說明:

ESP8266開關模式

## **電路圖設計**
ESP8266EX 模組的 件只需要 10 個以內電阻電容電感、1 個 源晶振及 1 個 SPI Flash 組成。射頻部分實現全內部集成,并且內部帶有 動校準功能。ESP8266EX 度集成的 特點,使得其外圍設計 常簡單容 。為 能夠 好的確保 ESP8266EX 模組的 作性 能,下 將詳細介紹 ESP8266EX 的原 圖設計與布局設計。
ESP8266EX 模組的整體電 如圖所示。

ESP8266EX 模組的電 圖設計主要包括六部分:
? 電源部分
? 上電時序與復位
? Flash
? 晶振
? 射頻
? 外置電阻
### **電源**
1.數字與 IO 電源
ESP8266EX 只有 Pin11 和 Pin17 兩個數字電源管腳。數字電源 需在電 中增加濾波電
容。數字電源 作電壓范圍:1.8V ~ 3.3V。

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 電容搭配。

### **上電時序與復位**
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Ω。

### **晶振**
前晶體 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。
### **射頻**

### **外置電阻12k**
ERS12K (Pin31) 需外接 12K 對地電阻,該電阻作為芯 bias 控制電流的電阻對精度的要
求是 較 的,建議采 12K ± 1% 精度的電阻。

## **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/