文章目录
- 一.概要
- 二.ESP8266 WIFI模块主要性能参数
- 三.ESP8266 WIFI模块芯片内部框图
- 四.ESP8266 WIFI模块原理图
- 五.ESP8266 WIFI模块与单片机通讯方法
- 1.硬件连接
- 2.ESP8266模块AT指令介绍
- 六.STM32单片机与ESP8266WIFI模块通讯实验
- 1.硬件准备
- 2.软件工程
- 3.软件主要代码
- 4.实验效果
- 七.CubeMX工程源代码下载
- 八.小结
一.概要
ESP8266 是一款高性能的 WIFI 串口模块,实现透明传输。只要有一定的串口知识,不需要知道 WIFI 原理就可以上手,在业内应用广泛。
ESP8266 是一个非常强大的 WIFI 模块,可以利用串口与单片机进行通讯,从而编程实现控制 ESP8266。利用 ESP8266 可以访问电脑服务器实现TCP/IP协议通讯。
该系列模块支持标准的IEEE802.11b/g/n协议,内置完整的TCP/IP协议栈。用户可以使用该系列模块为现有的设备添加联网功能,也可以构建独立的网络控制器。
二.ESP8266 WIFI模块主要性能参数
1.最小的 802.11b/g/n Wi-Fi SOC 模块
2.采用低功率32位CPU,可兼作应用处理器
3.主频最高可达160MHz
4.内置 10 bit 高精度 ADC
5.支持UART/GPIO/IC/PWM/ADC/HSPI等接口
6.集成 Wi-FiMAC/ BB/RF/PA/LNA
7.支持多种休眠模式,深度睡眠电流低至20uA
8.内嵌 Lwip 协议栈
9.支持STA/AP/STA+AP 工作模式
10.支持 Smart Config/AirKiss;一键配网
11.串口速率最高可达4Mbps
12.通用 AT 指令可快速上手
13.支持 SDK 二次开发
14.支持串口本地升级和远程固件升级(FOTA)
模块接口说明:
1.TX 模块UART串口发送脚
2.GND 接地
3.EN 芯片使能端,高电平有效
4.IO2 GPIO脚
5.RST 模块复位脚
6.IO0 模式选择脚,下载模式:外部拉低;运行模式:悬空或者外部拉高
7.3V3 3.3V 供电,外部供电电源输出电流建议在500mA以上
8.RX 模块UART串口接收脚
三.ESP8266 WIFI模块芯片内部框图
ESP8266 是高性能无线 SoC,以最低成本提供最大实用性,为 Wi-Fi 功能嵌入其他
系统提供无限可能。
ESP8266 拥有完整的且自成体系的Wi-Fi网络功能,既能够独立应用,也可以作为从
机搭载于其他主机MCU运行。当ESP8266独立应用时,能够直接从外接flash中启动。
内置的高速缓冲存储器有利于提高系统性能,并且优化存储系统。
另外⼀种情况是, ESP8266 只需通过 SPI/SDIO 接口或 UART 接口即可作为 Wi-Fi
适配器,应用到基于任何微控制器设计中。
ESP8266 强大的片上处理和存储能力,使其可通过GPIO口集成传感器及其他应用的
特定设备,大大地降低了前期开发的成本。
四.ESP8266 WIFI模块原理图
五.ESP8266 WIFI模块与单片机通讯方法
1.硬件连接
一般模块不需要固件下载更新,单片机通过串口跟模块通讯就能连接路由器,单片机跟模块通常连接如下:
2.ESP8266模块AT指令介绍
在ESP8266的开发过程中,AT指令方法是最常用的方法,无需花大量的时间去熟悉环境,开发速度快。
AT指令是一种串口通信协议,是以AT开头的一个字符串,每个指令执行成功与否都有相应的返回,都是ASCII码字符串操作,每个发送的AT指令都需要回车换行符结束。
最常见的就是AT指令就是查询模块通讯是否正常,指令如下:
单片机发送:AT+(回车换行符)
模块响应:OK
ESP8266模块的主要AT指令如下:
串口波特率115200,8位数据,1位停止位,无校验
ESP8266配置成客户端模式,登录电脑服务器端口主要AT指令流程
六.STM32单片机与ESP8266WIFI模块通讯实验
1.硬件准备
STLINK接STM32F407VET6开发板,STLINK接电脑USB口,WIFI模块如下图插在板子上。
主要信号:
板子PC13<—>WIFI模块RST脚
板子PC6<------>WIFI模块RX
板子PC7<------>WIFI模块TX
板子3.3V<----->WIFI模块3V3
板子GND<---->WIFI模块GND
2.软件工程
打开STM32CubeMX软件,新建工程
Part Number处输入STM32F407VE,再双击就创建新的工程
配置下载口引脚
配置外部晶振引脚
配置系统主频168Mhz,使用外部晶振
配置PC6,PC7配置成串口6收发脚,波特率115200,8位数据,无校验,1位停止位。
串口6中断使能
PC13配置成输出,用于控制模块的复位脚,低电平模块会复位
配置工程文件名,保存路径,KEIL5工程输出方式
生成工程
用Keil5打开工程
添加代码
3.软件主要代码
串口数据接收相关代码
void SysTick_Handler(void)
{/* USER CODE BEGIN SysTick_IRQn 0 *//* USER CODE END SysTick_IRQn 0 */HAL_IncTick();/* USER CODE BEGIN SysTick_IRQn 1 */
UART_RecvDealwith();/* USER CODE END SysTick_IRQn 1 */
}volatile uint8_t UartRxData;
uint8_t UartTxbuf[500]={1,2,3,4,5,6,7,8,9,10};
uint8_t UartRxbuf[500],UartIntRxbuf[500],UartRxIndex=0,UartRxFlag,UartRxLen=0,UartRxTimer,UartRxOKFlag,UartIntRxLen;//接收标志函数,返回0说明没收据接收,返回1说明有数据收到
uint8_t Uart_RecvFlag(void)
{if(UartRxOKFlag==0x55){UartRxOKFlag=0;UartRxLen=UartIntRxLen;memcpy(UartRxbuf,UartIntRxbuf,UartIntRxLen);//把缓冲区的数据,放入需要解析的数组UartIntRxLen=0;return 1;}return 0;
}
//串口2在1字节接收完成回调函数
void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)
{if(huart==&huart6)//判断是否串口2{UartRxFlag=0x55;//接收标志置位UartIntRxbuf[UartRxIndex]=UartRxData;//数据写入缓冲区UartRxIndex++;//记载数目加1if(UartRxIndex>=500)//缓冲区是500字节,如果存满,归零{UartRxIndex=0;}HAL_UART_Receive_IT(&huart6,(unsigned char*)&UartRxData,1);//继续接收下一字节}}//1ms调用一次,用来判断是否收完一帧
void UART_RecvDealwith(void)
{if(UartRxFlag==0x55){if(UartIntRxLen<UartRxIndex)//UartIntRxLen小于UartRxIndex,说明有收到新的数据,把接收长度增加{UartIntRxLen=UartRxIndex;}else{UartRxTimer++;if(UartRxTimer>=50)//50ms,等待,没收到新数据,说明已经收完一帧{UartRxTimer=0;UartRxFlag=0;UartRxOKFlag=0x55;UartRxIndex=0;}}}
}
main函数代码
int main(void)
{/* USER CODE BEGIN 1 *//* USER CODE END 1 *//* MCU Configuration--------------------------------------------------------*//* Reset of all peripherals, Initializes the Flash interface and the Systick. */HAL_Init();/* USER CODE BEGIN Init *//* USER CODE END Init *//* Configure the system clock */SystemClock_Config();/* USER CODE BEGIN SysInit *//* USER CODE END SysInit *//* Initialize all configured peripherals */MX_GPIO_Init();MX_USART6_UART_Init();/* USER CODE BEGIN 2 */HAL_UART_Receive_IT(&huart6,(unsigned char*)&UartRxData,1);//串口6接收中断使能ESP8266_Init();/* USER CODE END 2 *//* Infinite loop *//* USER CODE BEGIN WHILE */while (1){/* USER CODE END WHILE *//* USER CODE BEGIN 3 */ESP8266_STA_TCPClient_Test();//测试TCP通讯}/* USER CODE END 3 */
}
ESP8266配置相关
#define User_ESP8266_SSID "CMCC-DAX7" //wifi名
#define User_ESP8266_PWD "13588084246" //wifi密码#define User_ESP8266_TCPServer_IP "192.168.10.11" //服务器IP
#define User_ESP8266_TCPServer_PORT "8888" //服务器端口号char str[100]={0};ESP8266_AT_Test();printf("正在配置ESP8266\r\n");ESP8266_Net_Mode_Choose(STA);//选择STA模式while(!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD));//连接路由器,用户名,密码ESP8266_Enable_MultipleId ( DISABLE );while(!ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0));//连接服务器IP地址跟端口号while(!ESP8266_UnvarnishSend());printf("\r\n配置完成");while ( 1 ){ sprintf (str,"杭州光子物联科技有限公司" );//格式化发送字符串到TCP服务器ESP8266_SendString ( ENABLE, str, 0, Single_ID_0 );HAL_Delay(200);Uart_RecvFlag();//接收数据if(TcpClosedFlag) //判断是否失去连接{ESP8266_ExitUnvarnishSend(); //退出透传模式do{res = ESP8266_Get_LinkStatus(); //获取连接状态} while(!res);if(res == 4) //确认失去连接,重连{ while (!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD ) );while (!ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP, User_ESP8266_TCPServer_PORT, Single_ID_0 ) ); } while(!ESP8266_UnvarnishSend()); }} //对ESP8266模块发送AT指令
// cmd 待发送的指令
// ack1,ack2;期待的响应,为NULL表不需响应,两者为或逻辑关系
// time 等待响应时间
//返回1发送成功, 0失败
bool ESP8266_Send_AT_Cmd(char *cmd,char *ack1,char *ack2,u32 time)
{ UartRecv_Clear(); //重新接收新的数据包ESP8266_USART("%s\r\n", cmd);if(ack1==0&&ack2==0) //不需要接收数据{return true;}HAL_Delay(time); //延时HAL_Delay(1000);if(Uart_RecvFlag()==1){UartRxbuf[UartRxLen]='\0';}if(ack1!=0&&ack2!=0){return ( ( bool ) strstr ( (const char*)UartRxbuf, ack1 ) || ( bool ) strstr ( (const char*)UartRxbuf, ack2 ) );}else if( ack1 != 0 ) //strstr(s1,s2);检测s2是否为s1的一部分,是返回该位置,否则返回false,它强制转换为bool类型了return ( ( bool ) strstr ( (const char*)UartRxbuf, ack1 ) );elsereturn ( ( bool ) strstr ( (const char*)UartRxbuf, ack2 ) );}
4.实验效果
电脑TCP服务器收到WIFI的登录信息还有单片机发出的数据
七.CubeMX工程源代码下载
通过网盘分享的文件:12.ESP8266 WIFI通信实验.zip
链接: https://pan.baidu.com/s/1YYRLFHz6ZAX-v5-7MVE2gQ 提取码: ag6y
如果链接失效,可以联系博主给最新链接
程序下载下来之后解压就行
八.小结
ESP8266 WIFI模块具备强大的功能,能够实现与网络的无缝通信。它特别适用于物联网领域,能够轻松地通过串行通信接口与STM32单片机连接,为智能家居、智能照明、智能车辆等多种应用场景提供解决方案。