blufi的例程里面有没有接口可以接收蓝牙包的

kalok_2022
Posts: 28
Joined: Mon Nov 21, 2022 8:42 am

blufi的例程里面有没有接口可以接收蓝牙包的

Postby kalok_2022 » Mon Jul 31, 2023 9:01 am

esp32的blufi例程里面有没有提供接口接收外部蓝牙遥控发过来的蓝牙广播包。

ESP_zhanghaipeng
Posts: 38
Joined: Thu May 04, 2023 3:49 am

Re: blufi的例程里面有没有接口可以接收蓝牙包的

Postby ESP_zhanghaipeng » Tue Aug 01, 2023 9:54 am

你可以看一下下面的 API:
esp_err_t esp_ble_gap_set_scan_params(esp_ble_scan_params_t *scan_params);
esp_err_t esp_ble_gap_start_scanning(uint32_t duration);

API 的位置:
esp-idf/components/bt/host/bluedroid/api/esp_gap_ble_api.c

kalok_2022
Posts: 28
Joined: Mon Nov 21, 2022 8:42 am

Re: blufi的例程里面有没有接口可以接收蓝牙包的

Postby kalok_2022 » Thu Aug 03, 2023 1:00 am

ESP_zhanghaipeng wrote:
Tue Aug 01, 2023 9:54 am
你可以看一下下面的 API:
esp_err_t esp_ble_gap_set_scan_params(esp_ble_scan_params_t *scan_params);
esp_err_t esp_ble_gap_start_scanning(uint32_t duration);

API 的位置:
esp-idf/components/bt/host/bluedroid/api/esp_gap_ble_api.c
就在blufi里面加上这两个函数就可以了?还是否需要蓝牙初始化相关操作。

ESP_zhanghaipeng
Posts: 38
Joined: Thu May 04, 2023 3:49 am

Re: blufi的例程里面有没有接口可以接收蓝牙包的

Postby ESP_zhanghaipeng » Thu Aug 03, 2023 2:36 am

不需要了,因为 bluefi 已经初始化过了。
初始化的地方:esp-idf/examples/bluetooth/blufi/main/blufi_init.c
初始化的代码(对于 bluedroid 协议栈):
esp_err_t esp_blufi_host_init(void)
{
int ret;
ret = esp_bluedroid_init();
if (ret) {
BLUFI_ERROR("%s init bluedroid failed: %s\n", __func__, esp_err_to_name(ret));
return ESP_FAIL;
}

ret = esp_bluedroid_enable();
if (ret) {
BLUFI_ERROR("%s init bluedroid failed: %s\n", __func__, esp_err_to_name(ret));
return ESP_FAIL;
}
BLUFI_INFO("BD ADDR: "ESP_BD_ADDR_STR"\n", ESP_BD_ADDR_HEX(esp_bt_dev_get_address()));

return ESP_OK;

}

kalok_2022
Posts: 28
Joined: Mon Nov 21, 2022 8:42 am

Re: blufi的例程里面有没有接口可以接收蓝牙包的

Postby kalok_2022 » Thu Aug 03, 2023 6:12 am

ESP_zhanghaipeng wrote:
Thu Aug 03, 2023 2:36 am
不需要了,因为 bluefi 已经初始化过了。
初始化的地方:esp-idf/examples/bluetooth/blufi/main/blufi_init.c
初始化的代码(对于 bluedroid 协议栈):
esp_err_t esp_blufi_host_init(void)
{
int ret;
ret = esp_bluedroid_init();
if (ret) {
BLUFI_ERROR("%s init bluedroid failed: %s\n", __func__, esp_err_to_name(ret));
return ESP_FAIL;
}

ret = esp_bluedroid_enable();
if (ret) {
BLUFI_ERROR("%s init bluedroid failed: %s\n", __func__, esp_err_to_name(ret));
return ESP_FAIL;
}
BLUFI_INFO("BD ADDR: "ESP_BD_ADDR_STR"\n", ESP_BD_ADDR_HEX(esp_bt_dev_get_address()));

return ESP_OK;

}
esp_err_t esp_ble_gap_set_scan_params(esp_ble_scan_params_t *scan_params);
esp_err_t esp_ble_gap_start_scanning(uint32_t duration);
这两个函数只是设置和开始蓝牙包的scan功能,但是在哪个函数可以取出接收到的蓝牙包啊?

ESP_zhanghaipeng
Posts: 38
Joined: Thu May 04, 2023 3:49 am

Re: blufi的例程里面有没有接口可以接收蓝牙包的

Postby ESP_zhanghaipeng » Sat Aug 05, 2023 3:43 am

是的,可以参考下这个 example:https://github.com/espressif/esp-idf/bl ... ttc_demo.c
重点关注其中的对 scan result 的 处理方式:
case ESP_GAP_BLE_SCAN_RESULT_EVT: {
esp_ble_gap_cb_param_t *scan_result = (esp_ble_gap_cb_param_t *)param;
switch (scan_result->scan_rst.search_evt) {
case ESP_GAP_SEARCH_INQ_RES_EVT:
esp_log_buffer_hex(GATTC_TAG, scan_result->scan_rst.bda, 6);
ESP_LOGI(GATTC_TAG, "searched Adv Data Len %d, Scan Response Len %d", scan_result->scan_rst.adv_data_len, scan_result->scan_rst.scan_rsp_len);
adv_name = esp_ble_resolve_adv_data(scan_result->scan_rst.ble_adv,
ESP_BLE_AD_TYPE_NAME_CMPL, &adv_name_len);
ESP_LOGI(GATTC_TAG, "searched Device Name Len %d", adv_name_len);
esp_log_buffer_char(GATTC_TAG, adv_name, adv_name_len);

Who is online

Users browsing this forum: No registered users and 66 guests