我是靠谱客的博主 整齐故事,最近开发中收集的这篇文章主要介绍【51单片机STC89C52】ESP8266 ESP-01S模块使用 一、部分AT指令二、建立TCP服务器三、编程实现设备模式接入路由器配置四、ESP-01S AP(路由)模式,觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
蓝牙,ESP-01s,Zigbee, NB-Iot等通信模块都是基于AT指令的设计
目录
一、部分AT指令
二、建立TCP服务器
三、编程实现设备模式接入路由器配置
1、编程分析
2、代码分析
指令
返回值标志位
中断处理服务函数
主函数
3、整体代码
四、ESP-01S AP(路由)模式
1、AP模式配置
2、接收数据
3、编程实现AP模式
一、部分AT指令
AT |
上电后发送AT指令测试通信及模块功能是否正常
|
AT+RST | 重启 |
AT+UART=9600,8,1,0,0 | 设置波特率 |
AT+CWMODE=1 | 设置工作模式 1. 是station(设备)模式 2.是AP(路由)模式 3.是双模 |
AT+CIFSR
|
查询IP地址
|
station(设备)模式 | |
AT+CWJAP="OnePlus9R","qwertyuiop" | 以设备模式接入路由器配置 |
AT+CIFSR
|
查询IP地址
|
AT+CIPSTART="TCP","192.168.67.162",8880 Response :OK |
连接到 TCP server
|
AT+CIPSEND=4
| 设置即将发送数据的长度 (这里是4个字节) |
AT+CIPMODE=1
Response
:
OK
| 开启透传模式(+++退出透传) |
AT+CIPSEND
Response
:
OK
|
随意发送接收数据
|
AP(路由)模式 | |
AT+CIPMUX=1
Response
:
OK
|
使能多链接
|
AT+CIPSERVER=1
Response
:
OK
|
建立TCPServer,default port = 333
|
AT+CIPSEND=0,4
>abcd //输入数据,不带回车
Response
:
SEND OK
|
发送4个字节在连接0通道上
|
AT+CIPCLOSE=0
Response
:
0
,
CLOSED OK
|
断开连接
|
注意:AT指令,控制类勾选发送新行,传输数据时不需要
二、建立TCP服务器
注:ESP-01S和主机要在同一wifi网络下
三、编程实现设备模式接入路由器配置
1、编程分析
ESP-01S连接网络后重启自动连接网络,并且返回WIFI GOT IP。
这里暂不考虑联网失败,后面再通过AT指令再次联网就可以。
以设备模式接入路由器配置,发送AT+CWJAP="OnePlus9R","qwertyuiop"指令
入网成功返回WIFI GOT IP等,最终返回值为OK
入网失败返回值为FAIL
连接到 TCP server,发送AT+CIPSTART="TCP","192.168.67.162",8880指令
开启透传模式,发送AT+CIPMODE=1指令
开始发送接收数据,发送AT+CIPSEND指令
以上操作成功的话,返回值均为OK
连接 TCP 服务器失败,返回ERROR等,最终返回值为CLOSED,但是代码并未考虑
2、代码分析
指令
code char LJWL[] = "AT+CWJAP="OnePlus9R","qwertyuiop"rn"; //连接网络
code char LJFWQ[] = "AT+CIPSTART="TCP","192.168.67.162",8880rn";//连接服务器
char TCMS[] = "AT+CIPMODE=1rn"; //透传模式指令
char SJCS[] = "AT+CIPSENDrn"; //数据传输开始指令
char RESET[] = "AT+RSTrn"; //重启模块指令
返回值标志位
char AT_OK_Flag = 0; //OK返回值的标志位
char AT_Connect_Net_Flag = 0; //WIFI GOT IP返回值的标志位
中断处理服务函数
void Uart_Handler() interrupt 4
{
static int i = 0;//静态变量,被初始化一次
char tmp;
if(RI)//中断处理函数中,对于接收中断的响应
{
RI = 0;//清除接收中断标志位
tmp = SBUF;
if(tmp == 'W' || tmp == 'O' || tmp == 'F' || tmp == 'L'){
i = 0;
}
buffer[i++] = tmp;
if(buffer[0] == 'W' && buffer[5] == 'G'){ //入网成功的判断依据WIFI GOT IP
AT_Connect_Net_Flag = 1;
memset(buffer, '