提醒:ESP8266模块AT命令网络传输会丢包

2019-12-09 20:03发布

最近在做个产品,打算有线无线都支持,所以板上集成了ESP-12模块,有线用的W5500。
在办公室测试一切OK,上周去现场测试了一把,发现PC这端收到的数据有大量缺失。
回来折腾了一周,最后发现ESP模块丢掉了一些数据。

情况是这样:
有一台PC作为服务器端,我用Java写了个TCP服务器。
有5块板子上面有ESP12模块,STM32主控,连接WIFI路由器后,通过AT命令连接PC上的TCP服务器,然后把要发的数据通过建立好的TCP连接发给PC。
要发的数据一个包大约有53Bytes,最初是一个包一个包的发,后来发现速度跟不上,因为AT命令需要等待ESP模块返回OK之类的信息,STM32里面等的时候比较久,数据多了速度就跟不上了。
后来我改为一次发多个包,因为ESP模块手册说一次最多可以发2048个Bytes,所以我一次发10个包,大约530Bytes。
在办公室测试的时候没发现问题,因为我开发用的电脑速度够快。

到现场后,用的x200笔记本电脑,速度比较慢,然后就发现有些数据没收到。

回来折腾一周,最后发现有些包,ESP给STM32返回信息是发送OK,但是实际上PC这端没有收到。不知道是不是ESP模块内部的程序有bug,总之没收到。之前因为觉得无线的系统部署方便,所以有线部分的通讯程序没写,昨天把有线通讯的程序写了之后,最后换成有线,还是通过TCP连接发数据,一切OK。
顺便说一下,STM32这端使用了队列来缓冲数据,并确认全部数据包都已被ESP发出,ESP返回OK;PC端加了各种else和异常捕捉,确保有出错时被发现。所以,看上去通讯过程完全正确,但就是丢包了。我发的数据包有序列号,统计了一下,大约会有一半的数据包丢了。

因为时间紧,这个版本估计最能用有线了。过段时间折腾下ESP的开发,自己写个固件来配合STM32

提醒一下大家,使用ESP模块做产品时,注意一下丢包的事。
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
21条回答
dadatou
1楼-- · 2019-12-11 19:48
我没用过这个芯片不评论,我只是想问,楼主搞通信难道没有应答、校验、重发等机制吗?
BD8NCF
2楼-- · 2019-12-11 22:45
 精彩回答 2  元偷偷看……
BD8NCF
3楼-- · 2019-12-12 02:29
本帖最后由 BD8NCF 于 2016-10-23 00:14 编辑
dadatou 发表于 2016-10-22 22:22
我没用过这个芯片不评论,我只是想问,楼主搞通信难道没有应答、校验、重发等机制吗? ...


没有应答和重发机制,有校验。因为我要处理的数据包要求及时性高,即使丢一些包也没事,重发没有意义,应答耽误时间(本来AT命令的方式发,就要花费很多时间来做命令的交互)。有校验机制,保证收到的包是正确的就可以了。但是如果丢包太多,系统的效率就很低了。
BD8NCF
4楼-- · 2019-12-12 07:34
dreampet 发表于 2016-10-22 17:23
也在用8266,没发现这个问题,很可靠。多说一句,如果是8266的问题,那就跟你用什么电脑没关系,不会出现有 ...

开始我也觉得不会是esp的问题,所以花了好几天时间在java的代码上,到周五才发现是esp的问题。
我不清楚esp的at固件的tcp部分是怎么处理的,所以无法证明它错在哪里,但是事实就是这样。
stm32控制发出的数据包,一轮(0-255)的数据包stm32大概会收到220个左右,发送的时候esp这么没有任何错误提示,都是OK。在vmware上的服务器侧统计,大约收到90多个,每轮丢掉的包数量不一样,服务器这边也没有任何错误发生。
看上去通讯一切正常,没有任何错误,但就是有些包没有收到。

如果有空,你也可以试验一下
tkcb8b
5楼-- · 2019-12-12 07:34
这模块针不能用,丢数据非常严重,为什么还那么火就搞不懂了
ap0705307
6楼-- · 2019-12-12 11:08
tkcb8b 发表于 2019-7-12 14:37
这模块针不能用,丢数据非常严重,为什么还那么火就搞不懂了

楼主有没测试过WIFI天线信号强度 天线信号不好 影响非常大

一周热门 更多>