ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
-
- Posts: 18
- Joined: Tue Jul 13, 2021 12:23 pm
ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
我使用例程修改功能,发现在修改MTU加上app 发送了MTU request (512)后,app 读特征值数据的时候可以一次性读入42个字节数据,但是app 向 ESP32 写入数据的时候不能大于20字节,起初我以为是app的问题,后来用sniffer 抓包发现app 确实写下了42字节,但是ESP32 没有回应,最后重发N次后判断超时,断开连接。
请问有哪位大神知道怎么设置接收数据也能接收大于20字节的办法。
请问有哪位大神知道怎么设置接收数据也能接收大于20字节的办法。
Re: ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
如果交换MTU 后能一次性读入 42个字节,那也可以一次性写入 超过 20 的字节,考虑是应用层上的问题
你可以提供下你修改后的例程代码或你抓取的包文件吗,我们来看下是什么问题
你可以提供下你修改后的例程代码或你抓取的包文件吗,我们来看下是什么问题
-
- Posts: 18
- Joined: Tue Jul 13, 2021 12:23 pm
Re: ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
我的代码是基于ADF的wifi_bt_ble中的gatt_ble_module.c 来修改的,添加了一个service 和一些characteristic 。附件是代码和log。还有测试app的截图。现象是:设置MTU以后可以读出42Byte数据,但是向ESP32 写入的时候出现了问题,esp32最终断开连接。我用sniffer查看了发现:app 确实以大于20byte的方式写下数据,但是esp32没有回复,app重发N次以后断开连接。
- Attachments
-
- ble_gatts_module.c
- (38.89 KiB) Downloaded 614 times
-
- ble_gatts_module.h
- (3.46 KiB) Downloaded 781 times
-
- 1635332926(1).png (124.64 KiB) Viewed 10217 times
Re: ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
我根据 gatt_ble_module.c 修改成了一个 demo, 在附件中,你可以测试下,交换 MTU 是500 时,是可以进行长数据写的
prepare write 和 execute_write 是 app 方决定的,有的 app 如 nrf connect 会根据 发送的数据长度 大于MTU 而采取prepare write 和 execute_write 的方式, 而有些软件是拆分成单包发送的
在 gatt_ble_module.c 里 BLE_GATT_control_datas_handler BLE_GATT_control_read_handler 不要有长时间的阻塞行为,可以把数据放到其他 task 中处理
prepare_write_env 不要放在 回调里面,否则每次 回调 prepare_write_env 都重新刷新,在释放 buffer 时会出现问题
prepare write 和 execute_write 是 app 方决定的,有的 app 如 nrf connect 会根据 发送的数据长度 大于MTU 而采取prepare write 和 execute_write 的方式, 而有些软件是拆分成单包发送的
在 gatt_ble_module.c 里 BLE_GATT_control_datas_handler BLE_GATT_control_read_handler 不要有长时间的阻塞行为,可以把数据放到其他 task 中处理
prepare_write_env 不要放在 回调里面,否则每次 回调 prepare_write_env 都重新刷新,在释放 buffer 时会出现问题
- Attachments
-
- gatt_server_service_table_customs.zip
- (108.73 KiB) Downloaded 799 times
-
- Posts: 18
- Joined: Tue Jul 13, 2021 12:23 pm
Re: ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
ESP_XuLZ 您好,非常感谢您的解答。
我用您帮我修改的例程编译后烧录测试,发现依然无法接收20Byte以上的数据,我也十分差异,我怀疑是我的编译环境 IDF版本的问题,或者库文件的问题。不知道您是否有什么建议。
测试步骤和现象:
1.使用您的例程直接idf.pyflash monitor
2.使用nrf connect,lightblue 测试,具体步骤和现象如下:
<1>连接 ;成功
<2> app发送大于20 bytes 数据 ;分包发送
<3> app 设置MTU 500 ;成功
<4> app 发送大于 20bytes 小于500 bytes 数据。 ;log 毫无反应 几秒钟后显示断连。
附件是log 图片和sniffer 的结果。
我昨晚上Google 了很多,发现使用esp32 arduino 的有人反馈一样的问题,就是peripheral 无法接收大于20byte数据。后来他把库从 1.0.6--->1.0.4 就解决了这个问题。
我测试了IDF BLE的几个例程,gatt_server bt_ble_coex wifi_bt_ble ,ble_compatibility 除了 ble_compatibility 以外都在设置MTU以后无法接收大于20bytes 数据。
我用您帮我修改的例程编译后烧录测试,发现依然无法接收20Byte以上的数据,我也十分差异,我怀疑是我的编译环境 IDF版本的问题,或者库文件的问题。不知道您是否有什么建议。
测试步骤和现象:
1.使用您的例程直接idf.pyflash monitor
2.使用nrf connect,lightblue 测试,具体步骤和现象如下:
<1>连接 ;成功
<2> app发送大于20 bytes 数据 ;分包发送
<3> app 设置MTU 500 ;成功
<4> app 发送大于 20bytes 小于500 bytes 数据。 ;log 毫无反应 几秒钟后显示断连。
附件是log 图片和sniffer 的结果。
我昨晚上Google 了很多,发现使用esp32 arduino 的有人反馈一样的问题,就是peripheral 无法接收大于20byte数据。后来他把库从 1.0.6--->1.0.4 就解决了这个问题。
我测试了IDF BLE的几个例程,gatt_server bt_ble_coex wifi_bt_ble ,ble_compatibility 除了 ble_compatibility 以外都在设置MTU以后无法接收大于20bytes 数据。
- Attachments
-
- esp32-app-sent-more-20byte-issus.csv
- (34.86 KiB) Downloaded 640 times
-
- log.png (134.37 KiB) Viewed 10165 times
Re: ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
你好,可以把你所使用的 IDF 版本号(git describe --tags )和上述 demo 编译的固件发我下吗
附件中是我在 v4.3 上编译的固件,请你来验证下,排除一些其他干扰
附件中是我在 v4.3 上编译的固件,请你来验证下,排除一些其他干扰
- Attachments
-
- v4.3.1-29-ge493a4c30e.zip
- (473.44 KiB) Downloaded 532 times
-
- Posts: 18
- Joined: Tue Jul 13, 2021 12:23 pm
Re: ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
您好我的IDF 是4.0.
附件是我用您给的code 编译的固件。
非常感谢!
附件是我用您给的code 编译的固件。
非常感谢!
- Attachments
-
- gatt_server_service_table_demo.zip
- (305.05 KiB) Downloaded 790 times
-
- Posts: 18
- Joined: Tue Jul 13, 2021 12:23 pm
Re: ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
附件为完整的固件包
- Attachments
-
- firmware.zip
- (317.83 KiB) Downloaded 524 times
-
- Posts: 18
- Joined: Tue Jul 13, 2021 12:23 pm
Re: ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
ESP_XuLZ 您好,非常感谢!我测试过了您的固件是没有这个问题的。不知道是否是我IDF版本有问题,麻烦您有时间帮忙分析一下,我也会更新IDF后再次进行测试,再次感谢。
- Attachments
-
- success_log.png (90.18 KiB) Viewed 10070 times
Re: ESP32 BLE 作为gatt_server 只能接收20字节数据吗?
我测试你发的 firmware.zip 中的固件也没有问题呀。我一直使用的安卓手机和 nrf connect, 关于这个 firmware.zip 你可以用其他手机多验证几次吗,这种交换 MTU 500后,每次发送超过20 个字节都会出现这个问题吗,少于 20 个字节都可以吗
从 断连的 log 和你抓包的数据来看,是连接超时,可能与周围环境相关,这个抓包文件 csv 的只能看到包的列表,你是用什么软件打开的,有可以用 wireshark 打开的原文件吗
从 断连的 log 和你抓包的数据来看,是连接超时,可能与周围环境相关,这个抓包文件 csv 的只能看到包的列表,你是用什么软件打开的,有可以用 wireshark 打开的原文件吗
Who is online
Users browsing this forum: No registered users and 36 guests