首页 新闻 会员 周边

关于ESP8266发送超过TCP的MTU数据量数据到阿里云,云端解析失败

0
悬赏园豆:20 [已解决问题] 解决于 2023-10-09 16:51

我使用ESP8266普通的AT指令固件,在STM32移植了CJSON和MQTT库传数据到阿里云。一番折腾,现在发现一次发送2K左右字节可以被云端解析,再多就没反应了。但是使用MQTT.FX软件可以正常发送10K数据被解析。

以下为部分数据截图,主要是mode的值有大量数据

请问这是为什么呢?ESP8266会自动将大量数据进行IP分层发送吗?如果不能,那么我发送2139字节数据(超过了TCP帧最大1460)为啥可以被解析,如果可以,那为什么再发多一点就不行了呢?

菜鸟小飞机的主页 菜鸟小飞机 | 初学一级 | 园豆:56
提问于:2023-06-23 12:31
< >
分享
最佳答案
0
收获园豆:10
dudu | 高人七级 |园豆:30994 | 2023-06-23 13:21
其他回答(1)
0

根据你描述的情况,有几个可能的原因可以解释为什么在ESP8266上发送大量数据时会出现问题:

缓冲区大小限制:ESP8266上的固件可能有限制,只能处理特定大小的数据包。当你发送超过某个阈值的数据时,固件可能无法正确处理,导致数据丢失或解析失败。这可能解释了为什么发送2K左右的数据可以正常解析,但发送更多数据时出现问题。

传输层分片:TCP/IP协议通常会将大数据包分成较小的分片进行传输。这些分片会在网络层进行重组,以便正确传递到目标。可能存在的情况是,ESP8266上的固件在接收到大量分片数据时无法正确重组,导致数据丢失或解析失败。

资源限制:ESP8266作为嵌入式设备,其处理能力和内存资源有限。处理大量数据可能会导致资源不足,影响设备的正常运行和数据解析。

MQTT.FX软件可以正常发送10K数据并被解析的原因可能是软件本身处理大数据包的能力更强,且具备更高的处理能力和缓冲区大小。

为了解决这个问题,你可以尝试以下方法:

将数据拆分为较小的块:将大数据分割为较小的数据块,然后分批发送。这样可以避免一次发送大量数据导致的问题,并确保数据可以被正确解析。

调整缓冲区大小:如果可能的话,查看ESP8266固件的文档或设置,了解是否可以调整缓冲区的大小。增加缓冲区大小可能有助于处理更大的数据包。

检查网络连接稳定性:确保ESP8266与阿里云的网络连接稳定,避免数据包丢失或传输中断。

考虑升级固件或使用其他解决方案:如果以上方法都无法解决问题,你可以考虑升级ESP8266固件或尝试其他的通信解决方案,以满足你的数据传输需求。

请注意,由于我无法直接访问你的具体代码和环境,以上仅提供一般性的建议。针对具体的ESP8266固件和库使用问题,你可能需要查阅相关文档或向开发者社区寻求进一步支持和建议。

收获园豆:10
Technologyforgood | 园豆:5675 (大侠五级) | 2023-06-23 21:46
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册