ESP-AT-MINI-1固件使用BTSPP传输时出现异常

Moderator: ESP_XCGuang

vegetable
Posts: 3
Joined: Wed Jan 24, 2024 3:35 am

ESP-AT-MINI-1固件使用BTSPP传输时出现异常

Postby vegetable » Wed Jan 24, 2024 6:43 am

烧录固件类型:ESP-AT-MINI-1固件 开启经典蓝牙功能
问题: 引用pyserial(python)库通过串口测试发送200K数据所用时间时,经常出现发送"AT+BTSPPSEND=0,40960"进入透传后,发送数据但esp32没有回复,第二次发送才会成功。
场景复述:使用python脚本串口检测到OK则执行一次40K数据的发送:
1. PC发送"AT+BTSPPSEND=0,40960",等待回复"<"
2. PC发送40K数据,等待回复"OK"
反复执行50次,发送约2Mb数据。在某一次发送完成后,出现如下图1所示情况:
pycharm64_NzRPFb4yTw.png
图1 出现问题时刻
pycharm64_NzRPFb4yTw.png (288.01 KiB) Viewed 2044 times
串口发送40K数据后没有蓝牙没有任何回复,脚本内超时后再次发送蓝牙回复busy。
sscom5.13.1_4mEDQC0O94.png
图2 监听RX与TX数据时并未回复
sscom5.13.1_4mEDQC0O94.png (101.99 KiB) Viewed 2044 times

vegetable
Posts: 3
Joined: Wed Jan 24, 2024 3:35 am

Re: ESP-AT-MINI-1固件使用BTSPP传输时出现异常

Postby vegetable » Thu Jan 25, 2024 1:23 am

附脚本代码,python初学者,写的很水,轻点喷 :(
主要使用部分:
  1. '''
  2. COM发送函数 内添加清除发送缓冲区以防出现问题
  3. :param sendstr预计发送的字符串
  4. '''
  5. def com_send(sendstr):
  6.     global ser
  7.     # ser.reset_output_buffer()
  8.     ser.reset_input_buffer()  # 清空
  9.     return ser.write(sendstr)
  10.  
  11.  
  12. '''
  13. 发送数据并检测回复 发送后检测是否发送成功
  14. :param sendstr发送的数据(字符串)
  15. :param sendlen发送的长度
  16. '''
  17. def com_send_check_kb(sendstr, sendlen):
  18.     global ser
  19.     len_actually = com_send(sendstr.encode())  # 发送字符串
  20.     if len_actually != sendlen:  # 预防发送失败
  21.         print("uart write failed!")
  22.     else:
  23.         print("send over!len = %d" % len_actually)
  24.     return com_read_check("OK")
  25.  
  26.  
  27. '''
  28. 检测指定回复
  29. :param check核对的字符串
  30. :return 1检测到指定字符 0检测到忙碌 -1检测到error
  31. '''
  32. def com_read_check(check):
  33.     global ser
  34.     ret = -500
  35.     for _i in range(0, 100):  # 0.01 * 1000 = 10s 并未算上读取等待时间
  36.         recv_str = ser.readline()
  37.         # print(str(recv_str))
  38.         if recv_str.find(check.encode()) >= 0:
  39.             # print("find!")
  40.             ret = 1
  41.             break
  42.         elif recv_str.find("ERROR".encode()) >= 0:
  43.             print("error!")
  44.             ret = -1
  45.             break
  46.         elif recv_str.find("busy".encode()) >= 0:
  47.             # print("sleep!")
  48.             time.sleep(0.2)
  49.             ret = 0
  50.         else:
  51.             # print("next!")
  52.             continue
  53.     return ret
  54.  
  55.  
  56. '''
  57. 开启一次SPP发送
  58. :param index 蓝牙连接号
  59. :param datalen 发送的数据长度
  60. :return 指令执行结果
  61. '''
  62. def bt_sppsend(index, datalen):
  63.     global ser
  64.     com_send(b"AT+BTSPPSEND=%d,%d\r\n" % (index, datalen))
  65.     return com_read_check(">")
  66.  
  67.  
  68. if __name__ == '__main__':
  69.     com_init()
  70.     mode = input("输入使用的模式:BT BLE\n")
  71.     one_package_size = 40
  72.     if mode == "BT":
  73.  
  74.         # 显示输出发送字节数时手机端进行连接
  75.         bt_sppconnect()
  76.         while True:
  77.             kbyte = int(input("输入发送字节数:(n * %dK)" % one_package_size))
  78.            
  79.             # 此处在test.txt文件内循环写入16个字符 填充指定字节个bytes
  80.             write_txt(one_package_size)
  81.             with open("test.txt", "r") as f:
  82.                 send_str = f.read()  
  83.                 send_len = len(send_str)
  84.  
  85.             ser.reset_input_buffer()
  86.             t = time.time()
  87.             for i in range(0, kbyte):
  88.                 t1 = time.time()
  89.                 print("第%d次传输开始:" % (i+1))
  90.                 bt_sppsend(0, one_package_size*1024)
  91.                 # time.sleep(0.1)
  92.                 res = com_send_check_kb(send_str, send_len)
  93.                 if res > 0:
  94.                     print("OK2")
  95.                 else:
  96.                     print("error2: %d" % res)
  97.                 t1 = time.time() - t1
  98.                 print("%d:%f" % (i, t1))
  99.                 # time.sleep(0.5)
  100.             t = time.time() - t
  101.             print("total time BT: %f" % t)
Attachments
port.txt
使用的脚本文件
(6.64 KiB) Downloaded 80 times

vegetable
Posts: 3
Joined: Wed Jan 24, 2024 3:35 am

Re: ESP-AT-MINI-1固件使用BTSPP传输时出现异常

Postby vegetable » Fri Jan 26, 2024 1:21 am

刚刚在FAQ-AT-ESP32文档问发现一条建议:进行AT测试时设置数据传输量为1460,但没有写明原因,如下图,实际传输速率仍然较慢,距离描述的极限值还是很远200K大约需要23s左右。请问有大佬知道如何提高传输速度吗?(当前使用波特率921600)
msedge_ByjR39c4xD.png
FAQ内容
msedge_ByjR39c4xD.png (43.92 KiB) Viewed 1877 times
链接:https://docs.espressif.com/projects/esp ... 2/faq.html

ESP_Sun
Posts: 291
Joined: Thu Dec 30, 2021 9:52 am

Re: ESP-AT-MINI-1固件使用BTSPP传输时出现异常

Postby ESP_Sun » Wed Mar 20, 2024 9:07 am

最近修复了类似问题已经合入 master 分支,可以下载 ESP-AT master 最新固件测试看下此问题是否已经修复了。(https://github.com/espressif/esp-at/act ... 8294336044

Who is online

Users browsing this forum: No registered users and 71 guests