关于STM32 ESP8266 AT指令简单使用

一、关于指令

参考我AT指令下载那篇文章,下载文档看看,这里用TCP单链接透传讲解

1. 配置 WiFi 模式
AT+CWMODE=3       // softAP+station mode
 
响应 :
OK
2. 连接路由器
AT+CWJAP="SSID","password"     // SSID and password of router
 
响应 :
OK

 3. 查询 ESP8266 设备的 IP 地址

AT+CIFSR

响应 :
+CIFSR:APIP,"192.168.4.1"
+CIFSR:APMAC,"1a:fe:34:a5:8d:c6"
+CIFSR:STAIP,"192.168.3.133"
+CIFSR:STAMAC,"18:fe:34:a5:8d:c6"
OK
4. PC ESP8266 设备连接同⼀路由器,在 PC 端使⽤⽹络调试⼯具,建⽴⼀个 TCP 服 务器。
 假设,PC 创建的服务器 IP 地址为 192.168.3.116 ,端⼝为 8080
 
5. ESP8266 设备作为 TCP client 连接到上述服务器
AT+CIPSTART="TCP","192.168.3.116",8080     //protocol, server IP and port
 
响应 :
OK
6. 使能透传模式
AT+CIPMODE=1
 
响应 :
OK
7. ESP8266 设备向服务器发送数据
AT+CIPSEND
>                         //From now on, data received from UART will be transmitted to server automatically
 
8. 退出发送数据:
在透传发送数据过程中,若识别到单独的⼀包数据 “+++” ,则退出透传发送。
 
 如果使⽤键盘打字输⼊ “+++” ,可能耗时太⻓,不被认为是连续的三个 “+” ,建议使 ⽤串⼝⼯具⼀次性发送 “+++” ,并请注意不要携带空格或换⾏符等不可⻅字符。
  之后,请⾄少间隔 1 秒,再发下⼀条 AT 指令。
 
“+++“ 退出透传发送数据,回到正常 AT 指令模式。此时,TCP 连接仍然是保持的,可以再发 AT+CIPSEND
指令,重新开始透传。
 
9. 退出透传模式
AT+CIPMODE=0
 
响应 :
OK
10. 断开 TCP 连接
AT+CIPCLOSE
 
响应 :
CLOSED
OK

二、这里我先讲解怎么在 透传模式 退出 发送数据模式

//退出透传模式
void exit_touchuan(void)
{
	uint16_t pt[3] = {'+','+','+'};
	unsigned char i=0;
	for(i=0;i<3;i++)
	{
		USART2->DR = (pt[i] & (uint16_t)0x01FF);
		//  0:数据还没有被转移到移位寄存器;1:数据已经被转移到移位寄存器。
		while((USART2->SR & USART_FLAG_TXE) == (uint16_t)RESET);
	}
	USART1TxStr("退出透传模式\r\n\n");
	is_touchuan = 0;
	delay_ms(200);
}

这里我只是复制了 STM32 库函数的发送函数的 USART2->DR = (pt[i] & (uint16_t)0x01FF);  过来而已

重点是 发送的类型是 uint16_t  两个字节  不然退不出透传

三、我在STM32中初始化ESP8266 的流程

 一上电就退出透传的发送数据状态,无论是否处于透传发送数据状态,这个指令可以在任意时候发,没有返回值

	exit_touchuan();  // 为防止不正当复位
	//重启WiFi模块 
	USART1TxStr("重启模块...\r\n"); 
	USART2TxStr("AT+RST\r\n");
	/* 关于重启的OK 也是代表esp8266 接收到了该指令了  然后 后面的重启信息是重启过程中发送的 */
	wait_OK2();//等待接收到OK字符串 

我的wait_OK2(); 函数是用来等待 响应OK的,但是有时间限制,在定时器中定时,这里我设置3s等待 ,可看下我的wait_OK2();函数,my_timeout在定时器中累加

void wait_OK2(void)
{
	my_timeout = 0;
	good = 0;
	//等待接收到OK字符串   接收完成时 Flag_usart2_receive_OK 在接收中断置 1
	while(!Flag_usart2_receive_OK)
	{
		if(my_timeout >= 6)
		{
			good = 0;
			USART1TxStr("wait_OK2--NOT-OK...\r\n");
			break;
		}
	}
	Flag_usart2_receive_OK = 0;
	CLR_Buf2();     //清除串口2接收缓存
	if(my_timeout < 6)
	{
		good = 1;
		USART1TxStr("wait_OK2--OK...\r\n");
	}
}

 

 其他就不解释了

//设置工作模式 (8266有三种工作模式:1 单station模式,2 AP模式,3 两者混合模式)
	USART1TxStr("设置工作模式...\r\n");
	USART2TxStr("AT+CWMODE=3\r\n");
	wait_OK2();//等待接收到OK字符串
	USART1TxStr("混合模式工作模式设置成功!\r\n\n");

	//连接路由器 连接WiFi ChinaNet-5NDt
	USART1TxStr("连接路由器WiFi...\r\n");
	USART2TxStr("AT+CWJAP=\"ChinaNet-5NDt-1\",\"123456789\"\r\n");
	wait_OK2();//等待接收到OK字符串
	if(good == 1)
	{
		USART1TxStr("WiFi连接成功!\r\n\n");
	}
	
	//查询 ESP8266 设备的 IP 地址
	USART1TxStr("查询 ESP8266 设备的 IP 地址...\r\n");
	USART2TxStr("AT+CIFSR\r\n");
	wait_OK2();//等待接收到OK字符串
	if(good == 1)
	{
		USART1TxStr("请过目!\r\n\n");
	}
	
	
	//连接服务器
	USART1TxStr("连接服务器...\r\n");
	USART2TxStr("AT+CIPSTART=\"TCP\",\"192.168.3.100\",8999\r\n");

	wait_OK2();//等待接收到OK字符串
	if(good == 1)
	{
		USART1TxStr("服务器连接成功!\r\n\n");
	}

	#if 1  // 用透传模式
	//使能透传模式
	USART1TxStr("使能透传模式...\r\n");
	USART2TxStr("AT+CIPMODE=1\r\n");
	wait_OK2();//等待接收到OK字符串
	if(good == 1)
	{
		USART1TxStr("透传模式设置成功!\r\n\n");
	}
	#endif

 

四、只能这么多了

剩下就靠自己了

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值