乐鑫技术交流
直播中

陈伟

7年用户 1523经验值
私信 关注
[问答]

ESP32作为Server,手机作为Client,在蓝牙配对连接时,如何获取手机的设备名称?

ESP32作为Server,手机作为Client,在蓝牙配对连接时,如何获取手机的设备名称(不是esp32的名称)

回帖(2)

马念

2024-6-13 11:38:44
  可以在 ESP_GATTS_CONNECT_EVT 中获取到手机 mac 地址,不能获取到手机设备名称
举报

最强海贼王

2024-6-13 16:36:58
要在ESP32作为Server时获取与手机Client配对连接时的手机设备名称,您可以按照以下步骤操作:

1. 初始化ESP32的蓝牙功能:首先,您需要在ESP32上初始化蓝牙功能。这可以通过使用`esp_bt_controller_config_t`结构体来配置蓝牙控制器。

```c
esp_bt_controller_config_t bt_cfg = BT_CONTROLLER_INIT_CONFIG_DEFAULT();
esp_bt_controller_init(&bt_cfg);
esp_bt_controller_enable(ESP_BT_MODE_BTDM);
```

2. 初始化ESP32的BTA堆栈:接下来,初始化ESP32的BTA堆栈,以便使用蓝牙API。

```c
esp_bluedroid_init();
esp_bluedroid_enable();
```

3. 设置ESP32为可发现模式:为了让手机能够发现ESP32,您需要将ESP32设置为可发现模式。

```c
esp_ble_gap_set_device_name("ESP32_Server");
esp_ble_gap_config_adv_data_raw((uint8_t *)adv_data, sizeof(adv_data));
esp_ble_gap_start_advertising();
```

4. 注册并实现回调函数:注册并实现`esp_gap_ble_cb`回调函数,以便在与手机配对连接时获取手机的设备名称。

```c
static void gap_event_handler(esp_gap_ble_cb_event_t event, esp_ble_gap_cb_param_t *param)
{
    switch (event)
    {
        case ESP_GAP_BLE_ADV_DATA_SET_COMPLETE_EVT:
            esp_ble_gap_start_advertising();
            break;
        case ESP_GAP_BLE_AUTH_CMPL_EVT:
            {
                esp_log_buffer_hex("Peer device name", param->ble_security.auth_cmpl.dev_name, strlen(param->ble_security.auth_cmpl.dev_name));
                // 这里可以获取到手机的设备名称
            }
            break;
        default:
            break;
    }
}

void app_main()
{
    // ...其他初始化代码...

    esp_ble_gap_register_callback(gap_event_handler);
}
```

5. 编译并上传代码:将上述代码编译并上传到ESP32开发板。

6. 使用手机搜索ESP32:在手机上打开蓝牙设置,搜索附近的设备。找到ESP32设备并尝试连接。

7. 观察ESP32日志:当手机与ESP32配对连接时,ESP32的日志将显示手机的设备名称。

请注意,这里的代码示例使用了ESP-IDF框架。如果您使用的是其他框架或库,请根据需要进行相应的调整。
举报

更多回帖

发帖
×
20
完善资料,
赚取积分