1、模块简介
ESP-01S 是由安信可科技开发的 Wi-Fi 模块,该模块核心处理器为ESP8266。ESP8266 拥有完整的且自成体系的 Wi-Fi 网络功能,既能够独立应用,也可以作为从机搭载于其他主机 MCU 运行。当 ESP8266 独立应用时,能够直接从外接flash 中启动。内置的高速缓冲存储器有利于提高系统性能,并且优化存储系统。另外⼀种情况是, ESP8266 只需通过 SPI/SDIO 接口或UART 接口即可作为Wi-Fi适配器,应用到基于任何微控制器设计中。具体介绍请参照产品官网esp8266详细介绍
2、AT指令介绍
作为一种通信模块,esp-01s同样基于AT指令设计。AT指令集是从终端设备(Terminal Equipment,TE)或数据终端设备(Data Terminal Equipment,DTE)向终端适配器(Terminal Adapter,TA)或数据电路终端设备(Data Circuit Terminal Equipment,DCE)发送的。其对所传输的数据包大小有定义:即对于AT指令的发送,除AT两个字符外,最多可以接收1056个字符的长度(包括最后的空字符)。每个AT命令行中只能包含一条AT指令;对于由终端设备主动向PC端报告的URC指示或者response响应,也要求一行最多有一个,不允许上报的一行中有多条指示或者响应。AT指令以回车作为结尾,响应或上报以回车换行为结尾。
3、调试工具
安信可串口调试助手网络调试助手
4、模块波特率配置和验证
ESP-01s出厂波特率正常是115200。
(1) 上电后,通过串口输出一串系统开机信息,有的模块可能会出现乱码,以最后输出ready为准。
(2)上电后发送AT指令测试通信及模块功能是否正常。注意:AT指令,控制类都要加回车,数据传输时不加回车。
(3)通过命令配置成9600波特率
5、入网设置
(1)设置工作模式
(2)连接外网
(3)查询IP地址
6、连接TCP server,发送数据
(1)打开网络调试助手,设立TCP服务器
(2)连接服务器
(3)发送数据
7、透传模式
连接服务器后即可开启透传模式。
退出透传
8、代码编写
功能实现:模块与电脑连接上同一WIFI,位于同一局域网内。通过透传模式,互相通信。
效果展现:刚开始时,单片机D5,D6灭,连接上电脑服务器端后,D5,D6亮,此时网络调试助手上不断出现Hello字样,通过网络调试助手发送L1时,D5亮,发送L0时,D5灭。(ps:注意不同类型C51单片机引脚定义)
代码如下:
#include "reg52.h"#include "string.h"#define SIZE 12sbit D5=P3^7;sbit D6=P3^6;sfr AUXR = 0x8E;char buffer[SIZE];code char connect[] = "AT+CWJAP=\"WIFI名\",\"密码\"\r\n";code char connect_server[] = "AT+CIPSTART=\"TCP\",\"联网IP\",端口号\r\n";char mode[] = "AT+CIPMODE=1\r\n"; //开启透传模式char send_data[] = "AT+CIPSEND\r\n"; //数据传输开始指令char AT_OK_Flag = 0; //OK返回值的标志位char AT_Connect_Net_Flag = 0; //WIFI GOT IP返回值的标志位void Delay1000ms()//@11.0592MHz{unsigned char i, j, k;i = 8;j = 1;k = 243;do{do{while (--k);} while (--j);} while (--i);}void UartInit()//9600bps@11.0592MHz{AUXR = 0x01;SCON = 0x50;//配置串口工作方式1,REN使能接收TMOD &= 0x0F;TMOD |= 0x20;//配置定时器1工作方式8位重载TH1=0xFD;TL1=0xFD; //9600波特率的初值TR1=1;//启动定时器EA = 1;//开启总中断ES = 1;//开启串口中断 }void sendByte(char data_msg){SBUF = data_msg;while(!TI);TI=0;}void sendString(char* str){while(*str != '\0'){sendByte(*str);str++;}}void Connect_service(){int i=1;while(i){sendString(connect);while(!AT_OK_Flag);AT_OK_Flag = 0;//发送连服务器指令并等待成功sendString(connect_server);while(!AT_OK_Flag);AT_OK_Flag = 0;//发送透传模式指令并等待成功sendString(mode);while(!AT_OK_Flag);AT_OK_Flag = 0;//发送数据传输指令并等待成功sendString(send_data);while(!AT_OK_Flag);if(AT_Connect_Net_Flag){D5=0; //点亮D5,代表连接服务器并打开透传模式成功}if(AT_OK_Flag){D6=0; //点亮D6,代表连接服务器并打开透传模式成功i=0;}}}void main(){D5=D6=1;//灭状态灯UartInit();//配置C51串口的通信方式Delay1000ms();//给esp8266模块上电时间//发送联网AT指令Connect_service();while(1){Delay1000ms();sendString("hello\r\n");}}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' || tmp == 'E' || tmp == "?"){i=0;}buffer[i++] = tmp;//连接服务器等OK返回值指令的判断if(buffer[0] == 'O' && buffer[1] == 'K'){AT_OK_Flag = 1;AT_Connect_Net_Flag = 1;memset(buffer,'\0',SIZE);}//联网失败出现FAIL字样捕获if(buffer[0] == 'F' && buffer[1] == 'A'){for(i=0; i<5; i++){D5=0;Delay1000ms();D5=1;Delay1000ms();}Connect_service();memset(buffer,'\0',SIZE);}if(buffer[0]=='E' && buffer[4] =='R'){for(i=0; i<5; i++){D5=0;Delay1000ms();D5=1;Delay1000ms();}Connect_service();memset(buffer,'\0',SIZE);}if(buffer[0]=='0' || buffer[0] =='?'){for(i=0; i<5; i++){D5=0;Delay1000ms();D5=1;Delay1000ms();}Connect_service();memset(buffer,'\0',SIZE);}if(buffer[0] == 'L' && buffer[1] == '1'){D5=0;memset(buffer,'\0',SIZE);}if(buffer[0] == 'L' && buffer[1] == '0'){D5=1;memset(buffer,'\0',SIZE);}if(i==12) i=0;//发送中断}}
ESP-01s作服务器
USB转TTL插入电脑,接线:TX-RX,RX-TX VCC-3.3V GND-GND
注意:确保电脑连接上ESP-01s,可以去电脑WLAN图标那里查看。连接上模块发出的WIFI信号,WIFI图标上没有带锁的那个。
模块基本配置如下:
//1 配置成双模AT+CWMODE=2Response :OK//2 使能多连接AT+CIPMUX=1Response :OK//3 建立TCPServer(要提前打开网络调试助手,才会连上。连上后会有0:CONNECT字样AT+CIPSERVER=1 // default port = 333Response :OK//4 发送数据AT+CIPSEND=0,4 // 发送4个字节在连接0通道上>abcd //输入数据,不带回车Response :SEND OK//• 接收数据+IPD, 0, n: xxxxxxxxxx //+IPD是固定字符串 0是通道,n是数据长度,xxx是数据//断开连接AT+CIPCLOSE=0Response :0, CLOSED OK
代码书写逻辑与前面部分类似,只需动一下上述配置即可,不再赘述。
9、白盒测试代码可行性
接线图如下:
通过下图发送模拟:
10、结语
有什么问题,欢迎留言讨论。遇到问题,莫急莫慌,寻找解决方案,通过现象,查看代码逻辑。学会调试,解决bug。
如果觉得《基于C51单片机的ESP8266Wifi模块(ESP-01s)编程(详细)》对你有帮助,请点赞、收藏,并留下你的观点哦!