我想把我的日志文件从ESP32的闪存下载到我的安卓手机上。
我知道我们一次只能发送20字节的文件。因此,我将文件划分为20个字节的区块。下面是我的代码:
#define PAYLOAD_CHUNK_SIZE 20
for (int i = 0; i < file_size; i = i+PAYLOAD_CHUNK_SIZE){
uint8_t file_buffer[PAYLOAD_CHUNK_SIZE];
for (int j = 0; j <20; j++){
file_buffer[j] = (uint8_t) buffer[i+j];
}
update_char_file_value(file_buffer, PAYLOAD_CHUNK_SIZE);
count++;
printf("sending data! %d", count);
ets_delay_us(10000);
}
void update_char_file_value(uint8_t *data, uint16_t len){
uint16_t handle = sensor_handle_table[IDX_CHAR_FILE_VAL_TX];
esp_ble_gatts_set_attr_value(handle, len, data);
if (isNotifyEnabled == true){
esp_ble_gatts_send_indicate(sensor_profile_tab[PROFILE_APP_IDX].gatts_if, sensor_profile_tab[PROFILE_APP_IDX].conn_id, handle,
len, data, false);
}
}下面的代码适用于小文件(最大400字节),但除此之外,我将得到以下结果:
sending data! 1sending data! 2sending data! 3sending data! 4sending data! 5sending data! 6sending data! 7sending data! 8sending data! 9sending data! 10sending data! 11sending data! 12sending data! 13sending data! 14sending
data! 15sending data! 16sending data! 17sending data! 18sending data! 19sending data! 20sending data! 21sending data! 22sending data! 23sending data! 24sending data! 25sending data! 26sending data! 27sending data! 28sending data! 29sending data! 30sending data! 31sending data! 32sending data! 33sending data! 34sending data! 35sending data! 36sending data! 37sending data! 38sending data! 39sending data! 40sending data! 41sending data! 42sending data! 43sending data! 44sending data! 45sending data! 46sending data! 47sending data! 48sending d打印后,ESP32将被卡住,不会对任何东西做出响应,除非您再次将其重置。
我不确定这是否是Android应用程序的问题所在,但我认为它更倾向于使用esp32处理文本传输。
这里有没有人曾经成功地通过BLE发送过大文件?非常感谢您的帮助!
发布于 2021-02-11 10:20:12
我写这个BLE-FTP服务是为了在我的ESP32和Android/iOS应用程序(Cordova)之间来回传输配置文件。它可以传输大文件,但速度相当慢,受BLE带宽的限制。它适用于大小为20~600B的MTU,但在MTU较高时性能要好得多。
(包含的项目构建为一个工作示例。)
如果你感兴趣,我还可以在JS中发布Cordova应用程序客户端代码,它可以与这个BLE-FTP服务对话。
https://stackoverflow.com/questions/66095429
复制相似问题