admin管理员组

文章数量:1540710

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 12
sbit 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=2
Response :OK
//2 使能多连接
AT+CIPMUX=1
Response :OK
//3 建立TCPServer(要提前打开网络调试助手,才会连上。连上后会有0:CONNECT字样
AT+CIPSERVER=1 // default port = 333
Response :OK
//4 发送数据
AT+CIPSEND=0,4 // 发送4个字节在连接0通道上
>abcd //输入数据,不带回车
Response :SEND OK
//• 接收数据
+IPD, 0, n: xxxxxxxxxx //+IPD是固定字符串 0是通道,n是数据长度,xxx是数据
//断开连接
AT+CIPCLOSE=0
Response :0, CLOSED OK

代码书写逻辑与前面部分类似,只需动一下上述配置即可,不再赘述。
9、白盒测试代码可行性
接线图如下:

通过下图发送模拟:

10、结语
有什么问题,欢迎留言讨论。遇到问题,莫急莫慌,寻找解决方案,通过现象,查看代码逻辑。学会调试,解决bug。

本文标签: 单片机模块详细espESP8266WiFi