ESP32 蓝牙发送的数据,手机接收不全!急急急!!!!!

yunji_2.4G
Posts: 9
Joined: Fri Sep 20, 2019 7:41 am

ESP32 蓝牙发送的数据,手机接收不全!急急急!!!!!

Postby yunji_2.4G » Thu Feb 24, 2022 4:58 am

请教一个问题
原来使用的是V3.5,ESP32 作为蓝牙服务端 ,手机APP作为蓝牙客户端,一直没有问题。
最近更新到了V4.4上,功能一样,手机APP向ESP32请求数据,如果数据量大的话就会收不全。每次按照最多20字节发送。
1、请求512 字节,大概是27个包,APP能够接收到完整的数据。
2、请求1024个自己的数据,大概是50多个包,APP端大概收到30多个包就收不到后续的字节包了,这样APP端就永远都不能够接受完整的数据。

请问应该如何调试,有什么解决办法?

yunji_2.4G
Posts: 9
Joined: Fri Sep 20, 2019 7:41 am

Re: ESP32 蓝牙发送的数据,手机接收不全!急急急!!!!!

Postby yunji_2.4G » Thu Feb 24, 2022 5:23 am

代码如下:
static void esp_ble_send_once(uint8_t * buf,int length)
{
if(buf!=NULL&&length>0){
esp_ble_gatts_send_indicate(g_iclouz_gatts_if, g_iclouz_conn_id, heart_rate_handle_table[IDX_CHAR_VAL_COMMAND],length, buf, false);
//esp_ble_gatts_send_indicate(g_iclouz_gatts_if, g_iclouz_conn_id, heart_rate_handle_table[IDX_CHAR_C],length, buf, false);
}

}

iclouz_err_t iclouz_esp_ble_send(uint8_t * buf,int length)
{

int index=0;
if(buf==NULL){
return ICLOUZ_FAIL;
}
do{
int len=(index+20)<=length?20:length-index;
//ESP_LOGI(GATTS_TABLE_TAG, "iclouz_esp_ble_send len =%d", len );
esp_ble_send_once(buf+index, len);
index+=len;
}while(index<length);

return ICLOUZ_OK;
}

ESP_XuLZ
Posts: 173
Joined: Fri Mar 26, 2021 6:04 am

Re: ESP32 蓝牙发送的数据,手机接收不全!急急急!!!!!

Postby ESP_XuLZ » Thu Feb 24, 2022 1:10 pm

我按你的场景进行复现了下,发现是上层向下传数据太快,造成底部拥塞了,这应该会有个状态上报在 ESP_GATTS_CONF_EVT 事件中,同时 esp_ble_gatts_send_indicate 返回值也会报错;
所以可以在两个 esp_ble_gatts_send_indicate 之间适当加点延时 vTaskDelay(5) 这样的, 应该可以解决这个问题

Who is online

Users browsing this forum: No registered users and 123 guests