【问题标题】:(ESP-IDF) Sending .txt file (log data) over BLE? (large file from ESP32 to Android Phone)(ESP-IDF) 通过 BLE 发送 .txt 文件(日志数据)? (从 ESP32 到 Android 手机的大文件)
【发布时间】:2021-02-08 03:06:18
【问题描述】:

我想将我的日志文件从我的 ESP32 闪存下载到我的 Android 手机。

我知道我们一次只能发送 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 成功发送过大文件吗?非常感谢您的帮助!

【问题讨论】:

  • 调用esp_ble_gatts_set_attr_value()esp_ble_gatts_send_indicate() 时不会检查错误。这样做可能会揭示你失败的原因。

标签: bluetooth-lowenergy android-bluetooth esp32 bluetooth-gatt esp-idf


【解决方案1】:

我编写了这个 BLE-FTP 服务来将配置文件从我的 ESP32 来回传输到 Android/iOS 应用程序 (Cordova)。 它可以传输大文件,但速度很慢,受 BLE 带宽限制。它适用于 20~600B 大小的 MTU,但在更高的 MTU 下性能要好得多。

https://github.com/eagi223/esp-idf_Bluetooth_Multi-Service/blob/master/main/wireless/ble_services/ble_service_ftp.c

(包含项目构建为一个工作示例。)

如果您有兴趣,我也可以在 JS 中发布 Cordova 应用程序客户端代码,该代码与此 BLE-FTP 服务通信。

【讨论】:

  • 传奇!我真的需要一些关于如何做到这一点的参考。也可以分享您的客户端代码吗?
  • 好的,试一试:github.com/phatpaul/ble-ftp-cordova-example 如果有些东西不适合你,请在该 repo 上打开一个问题。
猜你喜欢
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
  • 2021-05-25
  • 1970-01-01
  • 1970-01-01
  • 2013-09-18
  • 2020-02-14
  • 1970-01-01
相关资源
最近更新 更多