乐鑫技术交流
直播中

王晾其

9年用户 1106经验值
私信 关注
[问答]

请问ESP32-C3蓝牙如何获取RSSI的值?

各位大佬,小弟刚接触ESP-IDF不久,摸索了一段时间,物联网的基本流程已经摸索的差不多了。
现在想知道ESP32-C3通过蓝牙与手机建立连接后,怎么才能获取当前手机端到开发板的RSSI值,我应该去参考哪些例程?
本人英语实在是太差,理解能力也不行,倘若有知道的,还望大佬指点一二,谢谢!
                                 

回帖(1)

凤求凰

2024-6-13 16:35:46
1. 首先,您需要确保您的ESP32-C3已经配置好蓝牙功能。在ESP-IDF中,您可以使用以下代码初始化蓝牙:

```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_BLE);
```

2. 接下来,您需要设置一个BLE GATT服务器,以便与手机建立连接。以下是一个简单的示例:

```c
#include "esp_gap_ble_api.h"
#include "esp_gatts_api.h"

#define GATTS_SERVICE_UUID_TEST   0x00FF
#define GATTS_CHAR_UUID_TEST      0xFF01

static esp_gatt_if_t gatts_if;
static esp_ble_adv_data_t adv_data = {
    .set_scan_rsp = false,
    .include_name = true,
    .include_txpower = true,
    .min_interval = 0x20,
    .max_interval = 0x40,
    .appearance = 0x00,
    .manufacturer_len = 0,
    .p_manufacturer_data = NULL,
    .service_data_len = 0,
    .p_service_data = NULL,
    .service_uuid_len = 0,
    .p_service_uuid = NULL,
    .flag = 0x6,
};

static void gatts_profile_a_event_handler(esp_gatts_cb_event_t event, esp_gatt_if_t gatts_if, esp_ble_gatts_cb_param_t *param) {
    switch (event) {
        case ESP_GATTS_REG_EVT:
            gatts_if = param->reg.if_;
            esp_ble_gatts_create_service(gatts_if, GATTS_SERVICE_UUID_TEST, 0x02, true);
            break;
        // 其他事件处理...
    }
}

static void gatts_init(void) {
    esp_err_t ret = esp_ble_gatts_register_callback(gatts_profile_a_event_handler);
    if (ret) {
        ESP_LOGE(GATTS_TAG, "gatts register error, error code = %x", ret);
    }
    esp_ble_gap_set_device_name("ESP32-C3");
    esp_ble_gap_config_adv_data(&adv_data);
    esp_ble_gap_start_advertising(&adv_data);
}
```

3. 在与手机建立连接后,您可以使用以下函数获取RSSI值:

```c
esp_ble_gap_get_rssi(param->search_inq_res.ble_addr, &rssi);
```

其中,`param`是`esp_ble_gap_cb_param_t`结构体,您可以在连接建立事件中获取它。


举报

更多回帖

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