项目实战-外卖自提柜 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绘制、测试视频)