本篇涉及到的模块与工具为:
1. ATK-ESP8266wifi模块
2. USB-UART模块
3. 串口调试助手
提取链接:https://pan.baidu.com/s/17xRlpnjp8j-VvyD2VDxNXw?pwd=ufms
提取码:ufms
4. 网络调试助手
提取链接:https://pan.baidu.com/s/10spxZmwMGI70USlzkOzdxg?pwd=fmxe
提取码:fmxe
简介:
ESP8266是一款超低功耗的UART-WiFi 透传模块,拥有业内极富竞争力的封装尺寸和超低能耗技术,专为移动设备和物联网应用设计,可将用户的物理设备连接到Wi-Fi 无线网络上,进行互联网或局域网通信,实现联网功能。
ESP8266是一个完整且自成体系的Wi-Fi网络解决方案,能够搭载软件应用,或通过另一个应用处理器卸载所有Wi-Fi网络功能。在搭载应用并作为设备中唯一的应用处理器时,能够直接从外接闪存中启动。内置的高速缓冲存储器有利于提高系统性能,并减少内存需求。
我这里以正点原子团队开发的ATK-ESP-01 模块为例进行介绍。
ATK-ESP8266 模块采用串口(LVTTL)与 MCU(或其他串口设备)通信,内置 TCP/IP
协议栈,能够实现串口与 WIFI 之间的转换。通过 ATK-ESP8266 模块,传统的串口设备只是需要简单的串口配置,即可通过网络(WIFI)传输自己的数据。
ATK-ESP8266 模块支持 LVTTL 串口,兼容 3.3V 和 5V 单片机系统。模块支持串口转 WIFI STA、串口转 AP 和 WIFI STA+WIFI AP 的模式,从而快速构建串口-WIFI 数据传输方案,方便设备使用互联网传输数据。ATK-ESP8266 模块非常小巧(29mm*19mm),模块通过 6 个 2.54mm 间距的排针与外部连接,模块外观如下图所示:

由上可知,该模块分布有6个引脚:VCC、GND、TXD、RXD、RST、IO_0,其中RST和IO_0一般可不用
引脚说明:
| 名称 | 说明 |
|---|---|
| VCC | 电源(3.3V~5V) |
| GND | 电源地 |
| TXD | 模块串口发送脚(TTL 电平,不能直接接 RS232 电平!),可接单片机的 RXD |
| RXD | 模块串口接收脚(TTL 电平,不能直接接 RS232 电平!),可接单片机的 TXD |
| RST | 复位(低电平有效) |
| IO_0 | 用于进入固件烧写模式,低电平是烧写模式,高电平是运行模式(默认状态) |
原理图:

产品参数:

| 指令 | 说明 |
|---|---|
| AT | 测试AT启动 |
| AT+RST | 重启模块 |
| AT+RESTORE | 恢复出厂设置 |
| AT+CWLIF | 查看已接入设备的 IP |
| AT+CIFSR | 查看本模块的 IP 地址 |
| AT+CWMODE? | 查看本机配置模式 |
| AT+CIPMUX=1 | 开启多连接模式 |
| AT+CIPSTO? | 查询本模块的服务器超时时间 |
| ATE | 开关回显功能ATE关闭回显,ATE开启回显 |
| AT+GMR | 查看版本信息 |
| AT+UART | 设置串口配置 |
| AT+CWJAP | 加入AP |
| AT+CWQAP | 退出与AP的连接 |
| AT+CWSMARTSTART | 启动智能连接 |
| AT+CWSMARTSTOP | 停止智能连接 |
AT+CWMODE=mode
指令的使用
模块使用分为俩种情况,服务端和客服端,其中客户端最为常用
由于时间原因,关于ESP8266 网络调试助手和串口调试助手的通信使用,可私信在线教学
我这里以做客户端为例进行展开设计
1. 发送指令
//向ESP8266发送命令
//cmd:发送的命令字符串;ack:期待的应答结果,如果为空,则表示不需要等待应答;waittime:等待时间(单位:10ms)
//返回值:0,发送成功(得到了期待的应答结果);1,发送失败
u8 esp8266_send_cmd(u8 *cmd,u8 *ack,u16 waittime)
{u8 res=0; USART3_RX_STA=0;u3_printf("%s\r\n",cmd); //发送命令if(ack&&waittime) //需要等待应答{while(--waittime) //等待倒计时{delay_ms(10);if(USART3_RX_STA&0X8000)//接收到期待的应答结果{if(esp8266_check_cmd(ack)){printf("ack:%s\r\n",(u8*)ack);break;//得到有效数据 }USART3_RX_STA=0;} }if(waittime==0)res=1; }return res;
}
2. 发送数据
//向ESP8266发送数据
//cmd:发送的命令字符串;waittime:等待时间(单位:10ms)
//返回值:发送数据后,服务器的返回验证码
u8* esp8266_send_data(u8 *cmd,u16 waittime)
{char temp[5];char *ack=temp;USART3_RX_STA=0;u3_printf("%s",cmd); //发送命令if(waittime) //需要等待应答{while(--waittime) //等待倒计时{delay_ms(10);if(USART3_RX_STA&0X8000)//接收到期待的应答结果{USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符ack=(char*)USART3_RX_BUF;printf("ack:%s\r\n",(u8*)ack);USART3_RX_STA=0;break;//得到有效数据 } }}return (u8*)ack;
}
3. 接收应答
//ESP8266发送命令后,检测接收到的应答
//str:期待的应答结果
//返回值:0,没有得到期待的应答结果;其他,期待应答结果的位置(str的位置)
u8* esp8266_check_cmd(u8 *str)
{char *strx=0;if(USART3_RX_STA&0X8000) //接收到一次数据了{ USART3_RX_BUF[USART3_RX_STA&0X7FFF]=0;//添加结束符strx=strstr((const char*)USART3_RX_BUF,(const char*)str);} return (u8*)strx;
}
4. 退出透传
//ESP8266退出透传模式 返回值:0,退出成功;1,退出失败
//配置wifi模块,通过想wifi模块连续发送3个+(每个+号之间 超过10ms,这样认为是连续三次发送+)
u8 esp8266_quit_trans(void)
{u8 result=1;u3_printf("+++");delay_ms(1000); //等待500ms太少 要1000ms才可以退出result=esp8266_send_cmd("AT","OK",20);//退出透传判断.if(result)printf("quit_trans failed!");elseprintf("quit_trans success!");return result;
}
5. 模块配置(初始化)
void esp8266_start_trans(void)
{//设置工作模式 1:station模式 2:AP模式 3:兼容 AP+station模式esp8266_send_cmd("AT+CWMODE=1","OK",50);//让Wifi模块重启的命令esp8266_send_cmd("AT+RST","ready",20);delay_ms(1000); //延时3S等待重启成功delay_ms(1000);delay_ms(1000);delay_ms(1000);//让模块连接上自己的路由while(esp8266_send_cmd("AT+CWJAP=\"xxxx\",\"xxxx\"","WIFI GOT IP",600));//=0:单路连接模式 =1:多路连接模式esp8266_send_cmd("AT+CIPMUX=0","OK",20);//建立TCP连接 这四项分别代表了 要连接的ID号0~4 连接类型 远程服务器IP地址 远程服务器端口号while(esp8266_send_cmd("AT+CIPSTART=\"TCP\",\"xxx.xxx.xxx.xxx\",xxxx","CONNECT",200));//是否开启透传模式 0:表示关闭 1:表示开启透传esp8266_send_cmd("AT+CIPMODE=1","OK",200);//透传模式下 开始发送数据的指令 这个指令之后就可以直接发数据了esp8266_send_cmd("AT+CIPSEND","OK",50);
}
6. main函数
int main(void){ delay_init(); //延时函数初始化 NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2); //设置NVIC中断分组2:2位抢占优先级,2位响应优先级uart_init(115200); //串口初始化为115200usart3_init(115200); //串口初始化为115200esp8266_start_trans(); //esp8266进行初始化esp8266_send_data("12",50);esp8266_quit_trans();while(1){}}
若需程序源码 可留言评论区或直接私信即可