烧录固件类型: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: ESP_XCGuang
Re: ESP-AT-MINI-1固件使用BTSPP传输时出现异常
附脚本代码,python初学者,写的很水,轻点喷
主要使用部分:
主要使用部分:
- '''
- 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 365 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 22 guests