ESP8266 基于AT 指令的c51编程

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 指令以回车作为结
尾,响应或上报以回车换行为结尾。
ESP-8266出厂波特率正常是115200, 注意:AT指令,控制类都要加回车,数据传输时不加回车

一,esp8266当成wifi接收器

第一步上电后发送AT指令测试通信及模块功能是否正常

AT
OK

第二步通过命令配置成9600波特率

AT+UART=9600,8,1,0,0

入网设置及接入服务器

首先封装一个输出字符的函数sendString
   

void sendString(char* str)
{
	while( *str != '\0'){
		sendByte(*str);
		str++;
	}
}
封装中断函数,接收esp的反馈,由此可以让单片机判断是否输入下一台指令
void Uart_Handler() interrupt 4
{
	static int i = 0;//静态变量,被初始化一次
	char tmp;

	if(RI)//中断处理函数中,对于接收中断的响应
	{
			RI = 0;//清除接收中断标志位
			tmp = SBUF;
			if(tmp == 'W' || tmp == 'O' || tmp == 'L' || tmp == 'F'){
				i = 0;
			}
			buffer[i++] = tmp;
			//入网成功的判断依据WIFI GOT IP
			if(buffer[0] == 'W' && buffer[5] == 'G'){
				AT_Connect_Net_Flag	= 1;
				memset(buffer, '\0', SIZE);
			}
			//连接服务器等OK返回值指令的判断
			if(buffer[0] == 'O' && buffer[1] == 'K'){
				AT_OK_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();
				}
				sendString(RESET);
				memset(buffer, '\0', SIZE);
			}
			//灯控指令
			if(buffer[0] == 'L' && buffer[2] == '1'){
				D5 = 0;//点亮D5
				memset(buffer, '\0', SIZE);
			}
			if(buffer[0] == 'L' && buffer[2] == '0'){
				D5 = 1;//熄灭D5
				memset(buffer, '\0', SIZE);
			}
			if(i == 12) i = 0;
	}
		
}
设置工作模式
AT+CWMODE=1 //1. 是station(设备)模式 2.是AP(路由)模式 3.是双模
OK
以设备模式接入家中路由器配置

AT指令

AT+CWJAP="自家的WiFi名称","自家的WiFi密码" //指令
WIFI CONNECTED //结果
WIFI GOT IP //结果
c代码体现
code char LJWL[]  = "AT+CWJAP=\"自己家WiFi名字\",\"自己家WiFi密码\"\r\n"; //入网指令

sendString输出LJWL,并等待esp反馈

//发送联网AT指令并等待成功
	sendString(LJWL);
	while(!AT_Connect_Net_Flag);
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;
    AT_Connect_Net_Flag = 0;

这里的 AT_OK_Flag和AT_Connect_Net_Flag 是一个标志位,其初始值为0。用来接收esp的反馈,看看是否发送正确,并正确收到,然后执行下一步,用完之后要归0.出来混迟早要还的哈哈哈哈

这里调用AT讲的比较细,后面我就不赘述啦,直接上代码。

查询IP地址,这个不用单片机来实现(接收了也没啥用),想看ip地址可以用串口助手查看

 然后打开自己的pc网络调试助手(windows终端查询自己连的wifi的ip地址)

终端指令:ipconfig

端口号随意吧

开始接入服务器

AT指令

AT+CIPSTART="TCP","自己的windows端口号",8888 //指令,注意双引号逗号都要半角(英文)输入
CONNECT //结果:成功
OK //结果:成功

c语言体现

code char LJFWQ[] = "AT+CIPSTART=\"TCP\",\"192.168.1.101\",8880\r\n"; //连接服务器指令
//发送连服务器指令并等待成功
	sendString(LJFWQ);
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;
开启透传模式

AT有个很呆的指令,需要自己提前输入要发几个字符,但是开启透传就不用提前说明,想发多大字节就发多大字节,一个字,爽

AT+CIPSEND=4 // 设置即将发送数据的长度 (这里是4个字节)
>CLCA // 看到大于号后,输入消息,CLCA,不要带回车
Response :SEND OK //结果:成功
//注意,这种情况下,每次发送前都要先发送AT+CIPSEND=长度 的指令,再发数据!
AT+CIPMODE=1 //开启透传模式
Response :OK
退出透传模式
3.5.6 单片机帮你做这一切
AT+CIPSEND //带回车
Response: > //这个时候随意发送接收数据咯

透传模式,爽!

c代码实现:

char TCMS[]  = "AT+CIPMODE=1\r\n";  //透传指令
//发送透传模式指令并等待成功
	sendString(TCMS);
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;

开始数据传输

char SJCS[]  = "AT+CIPSEND\r\n";	//数据传输开始指令
//发送数据传输指令并等待成功
	sendString(SJCS);
	while(!AT_OK_Flag);

接下来就可以随意爽了

在透传发送数据过程中,若识别到单独的⼀包数据 “+++”,则退出透传发送。

二,esp8266当成wifi路由器(服务器)

首先设置成路由器模式

//1 配置成双模
AT+CWMODE=2
Response :OK

c代码实现

/1 工作在路由模式
char LYMO[] = "AT+CWMODE=2\r\n";
sendString(LYMO);
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;

需要使能多连接

//2 使能多链接
AT+CIPMUX=1
Response :OK

c代码实现

//2 使能多链接
char DLJ[] = "AT+CIPMUX=1\r\n"; 
sendString(DLJ);
	while(!AT_OK_Flag);
	AT_OK_Flag = 0;

建立TCP接收,点亮标志位

//3 建立TCPServer
AT+CIPSERVER=1 // default port = 333
Response :OK

c代码实现

//3 建立TCPServer
char JLFW[] = "AT+CIPSERVER=1\r\n"; // default port = 333 
	sendString(JLFW);

	while(!Client_Connect_Flag);
	AT_OK_Flag = 0;	
	if(Client_Connect_Flag){
		D5 = 0;//点亮D5,代表有客户端接入	
	}

开始发送数据和接收数据

//4 发送数据
AT+CIPSEND=0,5 // 发送5个字节在连接0通道上
>abcd //输入数据,不带回车
Response :SEND OK
//• 接收数据
+IPD, 0, n: xxxxxxxxxx //+IPD是固定字符串 0是通道,n是数据长度,xxx是数据

c代码实现:

//发送数据
char FSSJ[] = "AT+CIPSEND=0,5\r\n";
//4 发送数据
		sendString(FSSJ);
		Delay1000ms();
		Delay1000ms();
		sendString("Hello");
		Delay1000ms();
		Delay1000ms();

这里不确定esp的发送数据反馈,就用了最简单的延时

最后关闭服务器

//断开连接
AT+CIPCLOSE=0
Response :0, CLOSED OK

  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值