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

Moderator: 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 8498 times
串口发送40K数据后没有蓝牙没有任何回复,脚本内超时后再次发送蓝牙回复busy。
sscom5.13.1_4mEDQC0O94.png
图2 监听RX与TX数据时并未回复
sscom5.13.1_4mEDQC0O94.png (101.99 KiB) Viewed 8498 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初学者,写的很水,轻点喷 :(
主要使用部分:

Code: Untitled.py Select all


'''
COM发送函数 内添加清除发送缓冲区以防出现问题
:param sendstr预计发送的字符串
'''
def com_send(sendstr):
global ser
# ser.reset_output_buffer()
ser.reset_input_buffer() # 清空
return ser.write(sendstr)


'''
发送数据并检测回复 发送后检测是否发送成功
:param sendstr发送的数据(字符串)
:param sendlen发送的长度
'''
def com_send_check_kb(sendstr, sendlen):
global ser
len_actually = com_send(sendstr.encode()) # 发送字符串
if len_actually != sendlen: # 预防发送失败
print("uart write failed!")
else:
print("send over!len = %d" % len_actually)
return com_read_check("OK")


'''
检测指定回复
:param check核对的字符串
:return 1检测到指定字符 0检测到忙碌 -1检测到error
'''
def com_read_check(check):
global ser
ret = -500
for _i in range(0, 100): # 0.01 * 1000 = 10s 并未算上读取等待时间
recv_str = ser.readline()
# print(str(recv_str))
if recv_str.find(check.encode()) >= 0:
# print("find!")
ret = 1
break
elif recv_str.find("ERROR".encode()) >= 0:
print("error!")
ret = -1
break
elif recv_str.find("busy".encode()) >= 0:
# print("sleep!")
time.sleep(0.2)
ret = 0
else:
# print("next!")
continue
return ret


'''
开启一次SPP发送
:param index 蓝牙连接号
:param datalen 发送的数据长度
:return 指令执行结果
'''
def bt_sppsend(index, datalen):
global ser
com_send(b"AT+BTSPPSEND=%d,%d\r\n" % (index, datalen))
return com_read_check(">")


if __name__ == '__main__':
com_init()
mode = input("输入使用的模式:BT BLE\n")
one_package_size = 40
if mode == "BT":

# 显示输出发送字节数时手机端进行连接
bt_sppconnect()
while True:
kbyte = int(input("输入发送字节数:(n * %dK)" % one_package_size))

# 此处在test.txt文件内循环写入16个字符 填充指定字节个bytes
write_txt(one_package_size)
with open("test.txt", "r") as f:
send_str = f.read()
send_len = len(send_str)

ser.reset_input_buffer()
t = time.time()
for i in range(0, kbyte):
t1 = time.time()
print("第%d次传输开始:" % (i+1))
bt_sppsend(0, one_package_size*1024)
# time.sleep(0.1)
res = com_send_check_kb(send_str, send_len)
if res > 0:
print("OK2")
else:
print("error2: %d" % res)
t1 = time.time() - t1
print("%d:%f" % (i, t1))
# time.sleep(0.5)
t = time.time() - t
print("total time BT: %f" % t)
Attachments
port.txt
使用的脚本文件
(6.64 KiB) Downloaded 551 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 8331 times
链接:https://docs.espressif.com/projects/esp ... 2/faq.html

Sun
Espressif staff
Espressif staff
Posts: 336
Joined: Thu Dec 30, 2021 9:52 am

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

Postby 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 1 guest