烧录固件类型: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所示情况:
串口发送40K数据后没有蓝牙没有任何回复,脚本内超时后再次发送蓝牙回复busy。
ESP-AT-MINI-1固件使用BTSPP传输时出现异常
Moderator: XCGuang
Re: ESP-AT-MINI-1固件使用BTSPP传输时出现异常
附脚本代码,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
Re: ESP-AT-MINI-1固件使用BTSPP传输时出现异常
刚刚在FAQ-AT-ESP32文档问发现一条建议:进行AT测试时设置数据传输量为1460,但没有写明原因,如下图,实际传输速率仍然较慢,距离描述的极限值还是很远200K大约需要23s左右。请问有大佬知道如何提高传输速度吗?(当前使用波特率921600)
链接:https://docs.espressif.com/projects/esp ... 2/faq.html
Re: ESP-AT-MINI-1固件使用BTSPP传输时出现异常
最近修复了类似问题已经合入 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
