💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[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/