本实验使用的WiFiSOC模组为ESP8266系列。该系列模块支持标准的IEEE802.11 b/g/n协议,内置完整的TCP/IP协议栈。用户可以使用该系列模块为现有的设备添加联网功能,也可以构建独立的网络控制器。支持UART/GPIO/IIC/PWM/ADC/HSPI等接口,支持STA/AP/STA+AP工作模式
,使用AT指令进行开发。
图1. 管脚尺寸图
图2. 典型应用图
本次实验原理为先通过UART与WiFi模块通信,传送AT指令配置WIFI模块,然后通过TCP/IP协议与主机服务器之间进行交互,完成收发数据。
int main(void)
{
/* MCU Configuration--------------------------------------------------------*/
/* Reset of all peripherals, Initializes the Flash interface and the Systick. */
HAL_Init();
/* Configure the system clock */
SystemClock_Config();
/* Initialize all configured peripherals */
MX_GPIO_Init();
MX_USART2_UART_Init();
HAL_UART_Receive_IT(&huart2, (uint8_t *)&UartRxData, 1);//接收中断使能
ESP8266_Init();
while (1)
{
ESP8266_STA_TCPClient_Test();// TCP/IP 通讯
}
}
基础AT指令如下:
AT:测试 AT 启动
AT+RST:重启模块
AT+GMR:查看版本信息
AT+CMD:查询当前固件支持的所有命令及命令类型
AT+GSLP:进⼊ Deep-sleep 模式
ATE:开启或关闭 AT 回显功能
AT+RESTORE:恢复出厂设置
AT+UART_CUR:设置 UART 当前临时配置,不保存到 flash
AT+UART_DEF:设置 UART 默认配置, 保存到 flash
AT+SLEEP:设置 sleep 模式
AT+SYSRAM:查询当前剩余堆空间和最小堆空间
AT+SYSMSG:查询/设置系统提示信息
AT+USERRAM:操作用户的空闲 RAM
AT+SYSFLASH:查询或读写 flash 用户分区
AT+RFPOWER:查询/设置 RF TX Power
AT+SYSROLLBACK:回滚到以前的固件
AT+SYSTIMESTAMP:查询/设置本地时间戳
AT+SYSLOG:启用或禁用 AT 错误代码提示
AT+SLEEPWKCFG:设置 Light-sleep 唤醒源和唤醒 GPIO
AT+SYSSTORE:设置参数存储模式
AT+SYSREG:读写寄存器
完整AT指令请到以下网站查看:https://docs.espressif.com/projects/esp-at/zh_CN/release-v2.2.0.0_esp8266/AT_Command_Set/index.html 以下是TCP通讯函数
void ESP8266_STA_TCPClient_Test(void)
{
u8 res;
char str[100]={0};
ESP8266_AT_Test();
printf("正在配置ESP8266\r\n");
ESP8266_Net_Mode_Choose(STA);
while(!ESP8266_JoinAP(User_ESP8266_SSID, User_ESP8266_PWD));//SSID为WIFI名,PWD为WIFI密码
ESP8266_Enable_MultipleId ( DISABLE );//ESP8266 透传使能
//ESP8266 连接服务器
//enumE 网络类型
//ip ,服务器IP
//ComNum 服务器端口
//id,连接号,确保通信不受外界干扰
//设置成功返回true,反之fasle
while(!ESP8266_Link_Server(enumTCP, User_ESP8266_TCPServer_IP,
User_ESP8266_TCPServer_PORT, Single_ID_0));
while(!ESP8266_UnvarnishSend());
printf("\r\n配置完成");
while ( 1 )
{
sprintf (str,"CSDN大法好IKUN" );//将要发送的字符串写入str
//ESP8266发送字符串str
//ENABLE使能透传模式
//ucId 连接号
ESP8266_SendString ( ENABLE, str, 0, Single_ID_0 );
HAL_Delay(200);
Uart_RecvFlag();//接收标志函数,返回0说明没收据接收,返回1说明有数据收到
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());//透传使能,设置成功返回true, 反之false
}
}
}