完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我使用例程修改功能,发现在修改MTU加上app 发送了MTU request (512)后,app 读特征值数据的时候可以一次性读入42个字节数据,但是app 向 ESP32 写入数据的时候不能大于20字节,起初我以为是app的问题,后来用sniffer 抓包发现app 确实写下了42字节,但是ESP32 没有回应,最后重发N次后判断超时,断开连接。
请问有哪位大神知道怎么设置接收数据也能接收大于20字节的办法。 |
|
相关推荐
1个回答
|
|
要解决这个问题,我们需要确保ESP32的BLE配置正确,以便接收大于20字节的数据。以下是一些关键步骤:
1. 首先,确保ESP32的BLE配置支持较大的MTU(最大传输单元)大小。在ESP32的BLE配置中,将MTU设置为512字节或更高。这可以通过修改`esp_ble_gatt_set_local_mtu()`函数的参数来实现。 ```c esp_err_t esp_ble_gatt_set_local_mtu(uint16_t mtu); ``` 2. 在ESP32的BLE GATT服务器初始化过程中,设置MTU大小。这可以通过调用`esp_ble_gatts_set_attr_value()`函数来实现,将MTU设置为所需的大小。 ```c esp_err_t esp_ble_gatts_set_attr_value(esp_gatt_if_t gatts_if, uint16_t handle, uint16_t length, const uint8_t *value); ``` 3. 在ESP32的BLE GATT服务器中,确保处理写入请求的函数能够接收大于20字节的数据。这通常涉及到修改`esp_ble_gatts_cb_param_t`结构体中的`write`字段的处理逻辑。 4. 在APP端,确保在发送数据之前发送MTU请求。这可以通过调用BLE库中的相应函数来实现,例如在Android的BluetoothGatt库中,可以使用`requestMtu()`方法。 5. 在APP端,确保在收到MTU响应后,使用新的MTU大小发送数据。这可能需要修改APP端的BLE库或API,以支持大于20字节的数据传输。 6. 使用BLE嗅探器(如nRF Connect或其他BLE分析工具)来监控数据传输过程,确保ESP32和APP之间的MTU协商成功,并且数据传输正确。 7. 如果问题仍然存在,检查ESP32的固件和APP端的BLE库是否为最新版本,以确保它们支持所需的功能。 通过以上步骤,您应该能够解决ESP32接收大于20字节数据的问题。如果问题仍然存在,请检查代码和配置,确保所有相关设置都已正确应用。 |
|
|
|
只有小组成员才能发言,加入小组>>
312 浏览 0 评论
1164 浏览 1 评论
584浏览 6评论
482浏览 5评论
有没有办法在不使用混杂模式的情况下实现Wifi驱动程序接收缓冲区访问中断呢?
467浏览 5评论
466浏览 4评论
441浏览 4评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 23:30 , Processed in 0.754409 second(s), Total 79, Slave 63 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号