项目实战-外卖自提柜 5. ESP8266 01S配置与掉线处理

项目实战-外卖自提柜 1.项目介绍、协议制定
项目实战-外卖自提柜 2. CubeMX + FreeRTOS入门
项目实战-外卖自提柜 3. FreeRTOS主要API的应用
项目实战-外卖自提柜 4. FreeRTOS 堆栈分配、调试技巧
项目实战-外卖自提柜 5. ESP8266 01S配置与掉线处理
项目实战-外卖自提柜 6. 硬件工作与测试(原理图、PCB绘制、测试视频)

其实不想ESP8266还要单独水一篇,以前玩过,以为AT指令挺好调的,实际调的时候遇到不少小问题,有的问题在网上没找到,自己摸索摸索了挺久,所以就单独写了。

ESP8266 01S

在这里插入图片描述
配置TCP透传,用到的AT指令如下:

AT指令 功能
AT 测试硬件是否正常
ATE0 关闭回显
AT+CWMODE=1 设置为客户端
AT+CIPSTATUS 判断状态:返回2表示已正常连接WIFI;返回3表示已正常连接服务器
AT+CWJAP=“MyWIFI”,“123456” 连接WIFI
AT+CWAUTOCONN=1 设为自动连接WIFI模式
AT+CIPSTART=“TCP”,“192.111.1.1”,8888 连接服务器
AT+CIPMODE=1 设为透传模式
AT+CIPSEND 开始透传
+++ 关闭透传

初始化流程图:
在这里插入图片描述

返回值的处理方法

基本思路是,开辟一个数组,收到的返回值存入数组,发送完指令后,等待一段时间,读取数组,利用**strstr()**这个函数,判断数组中是否有期望的返回值,查找完成后清空数组
以AT指令为例:

usart3_tx_dma_enable((uint8_t*)"AT",2);	//发送AT指令
osDelay(50);	//等待50ms
if(strstr(mes_buf,"OK")!=NULL)	//找到对应字符串
	res = 1;			//返回1,否则返回0
else
	res = 0;
clear_mes_buf();	//清空缓冲
return res;

退出透传出错解决办法

发送“+++”,不加\r\n,
但这会导致这之后的一个AT指令失效,所以,在发送完+++以后,还要再发送一个\r\n,后面的AT指令才能生效。

//关闭透传
void close_tran()
{
    
    
	usart3_tx_dma_enable((uint8_t*)"+++",3);	//发送+++
	osDelay(500);	//延时500ms
	usart3_tx_dma_enable((uint8_t*)"\r\n",2);	//实际测试时,发完+++以后,还需要一个指令(带\r\n)激活模块
	osDelay(100);	//延时100ms
}

如何判断服务器是否离线

一般情况下,在透传过程中服务器突然离线,会返回一个closed,但由于此前一直处于透传模式,单片机想要捕捉这个closed比较困难,所以需要用别的手段判断服务器是否异常离线。

这个项目的协议中,有心跳和回复帧的机制,可以根据发出的心跳是否得到回复来判断服务器是否在线。
如果检测到异常离线,再去重新初始化ESP8266,再进一步判断WIFI是否异常、服务器是否异常,定位问题。

代码和测试视频在这里:
https://oshwhub.com/doee/wai-mai-zi-ti-gui-she-bei-duan-z

项目实战-外卖自提柜 1.项目介绍、协议制定
项目实战-外卖自提柜 2. CubeMX + FreeRTOS入门
项目实战-外卖自提柜 3. FreeRTOS主要API的应用
项目实战-外卖自提柜 4. FreeRTOS 堆栈分配、调试技巧
项目实战-外卖自提柜 5. ESP8266 01S配置与掉线处理
项目实战-外卖自提柜 6. 硬件工作与测试(原理图、PCB绘制、测试视频)

猜你喜欢

转载自blog.csdn.net/weixin_44578655/article/details/106004124