乐鑫技术交流
直播中

qjqb

9年用户 1365经验值
擅长:5762
私信 关注
[问答]

使用AT SAVETRANSLINK时UDP数据包丢失怎么解决?

我正在使用当前的 AT 固件(基于 ESP8266_NONOS_SDK_V1.5.3 的 AT_V1.0)。实际上,它是这篇文章的修改版本(http://bbs.espressif.com/viewtopic.php?f=66&t=2078#p6615).

我正在使用 AT SAVETRANSLINK 在我的 Android 和我的微控制器(Microchip PIC,连接在 ESP UART 上)之间创建透明链接。要配置 ESP 模块,从默认的 AT FW 开始,我将 ESP 模块设置为 Soft-AP 模式,只允许一个 WiFi 客户端和 DHCP 服务器租用一个 IP(请参阅下面的 AT 命令)。

将 ESP 配置为透明链接后,一切正常。当 Android 连接到 ESP Soft-AP 时,我能够在 IP 192.168.4.1 端口 2346 上每秒从 Android 发送一个小 UDP 数据包(5 字节)。这个小数据包被我的微控制器在UART上接收到。微控制器将更大的数据包(可变长度,约 100 字节)发送回 UART。ESP在UART上接收来自微控制器的数据包,并在UDP,IP 192.168.4.2,端口2345上发送,Android成功接收到该数据包。
这在一段时间内工作正常。Android 发送的所有数据包都由 ESP 和我的微控制器接收。我的微控制器发回的所有数据包都会被 Android 接收。到目前为止没有丢包。
但是,一段时间后(半小时或更短的时间),Android 没有收到我的微控制器发送的一些数据包。接收数据包丢失上升到 30-40-50% - 这太多了。

我能够监视 ESP 和我的微控制器之间的 UART 连接,Android 发送的 UDP 数据包总是被我的微控制器接收。为了响应收到的 UDP 数据包,我的微控制器总是向 ESP(在 UART 上)发送响应。但是此响应不会发送到 Android。
我也在 PC 而不是 Android 上尝试过它,问题仍然是一样的 - 首先它运行良好,但一段时间后,PC 没有收到来自 ESP 的 UDP 数据包 - 数据包丢失正在上升。


在 RST


OK

ets Jan  8 2013,rst cause:1, boot mode:(3,7)

负载 0x40100000,LEN 1856,16 室
尾 0
Chksum 0x63
负载 0x3ffe8000,LEN 776,房间 8
尾 0
CHKSUM 0x02
负载 0x3ffe8310,len 552,房间 8
尾 0
Chksum 0x79
CSUM 0x79

第 2 个启动版本:1.5
  SPI Speed      : 40MHz
  SPI Mode       : QIO
  SPI Flash Size & Map: 8Mbit(512KB+512KB)
跳转到运行 user1 @ 1000

rlž'rlœžâœ¢þ
准备
在GMR

AT版本:1.0.0.0(Apr 25, 2016 14:18:03)
SDK版本:1.5.3(aec24ac9)
编译时间:Apr 26, 2016 14:22:35
OK
在CWMODE?

CW模式:2

OK
在CWSAP?

+CWSAP:"ESP_123456","mypassword",1,4,1,0

OK
AT+CWDHCPS_DEF=1,3,"192.168.4.2","192.168.4.2"


OK
在cwdhcps_def?

cwdhcps_def:3,192.168.4.2,192.168.4.2
OK
AT+SAVETRANSLINK=1,"192.168.4.2",2345,"UDP",2346


OK
在 RST


OK

ets Jan  8 2013,rst cause:1, boot mode:(3,7)

负载 0x40100000,LEN 1856,16 室
尾 0
Chksum 0x63
负载 0x3ffe8000,LEN 776,房间 8
尾 0
CHKSUM 0x02
负载 0x3ffe8310,len 552,房间 8
尾 0
Chksum 0x79
CSUM 0x79

第 2 个启动版本:1.5
  SPI Speed      : 40MHz
  SPI Mode       : QIO
  SPI Flash Size & Map: 8Mbit(512KB+512KB)
跳转到运行 user1 @ 1000

rlž'rlœžâœ¢þ
>
准备


回帖(1)

张玉兰

2024-7-18 18:05:56
在使用ESP8266进行UDP通信时,可能会遇到数据包丢失的问题。以下是一些建议和解决方案,以帮助您解决这个问题:

1. **检查网络配置**:
   确保您的ESP8266模块和Android设备都正确配置了IP地址和端口号。检查您的网络配置,确保它们在同一子网中,并且没有防火墙或其他安全设置阻止UDP数据包的传输。

2. **增加超时时间**:
   在您的代码中,尝试增加超时时间,以便ESP8266模块有足够的时间接收和发送数据。这可以通过调整AT命令中的参数来实现。

3. **优化数据包大小**:
   尝试减小发送的数据包大小,以减少数据包丢失的可能性。较大的数据包可能更容易在传输过程中丢失。

4. **使用TCP协议**:
   如果可能的话,考虑使用TCP协议代替UDP。TCP协议具有内置的错误检测和重传机制,可以提高数据传输的可靠性。

5. **检查硬件连接**:
   确保您的ESP8266模块和Microchip PIC之间的硬件连接正确且稳定。检查UART引脚连接,确保它们没有松动或损坏。

6. **更新固件**:
   您提到使用的是基于ESP8266_NONOS_SDK_V1.5.3的AT_V1.0固件。尝试更新到较新的固件版本,以获取可能的改进和修复。

7. **使用第三方库**:
   考虑使用第三方库,如ESPAsyncUDP,来处理UDP通信。这些库通常经过优化,可以提高数据传输的稳定性和可靠性。

8. **调试和日志记录**:
   在您的代码中添加调试信息和日志记录,以便更好地了解数据包丢失的原因。这可以帮助您确定问题是否出在发送端、接收端还是网络传输过程中。

9. **减少干扰**:
   确保您的设备远离可能产生电磁干扰的设备,如无线路由器、微波炉等。干扰可能会影响无线信号的传输,导致数据包丢失。

10. **测试不同的网络环境**:
    在不同的网络环境中测试您的设备,以确定问题是否与特定的网络环境有关。这可以帮助您找到可能影响数据传输的特定因素。

通过尝试这些建议和解决方案,您应该能够找到导致UDP数据包丢失的原因,并采取相应的措施来解决这个问题。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分