gpt4 book ai didi

c - 如何使用 esp_bt_gap_read_rssi_delta 函数从 ESP32 获取蓝牙经典 RSSI?

转载 作者:太空宇宙 更新时间:2023-11-04 03:15:16 25 4
gpt4 key购买 nike

ESP-IDF 框架中的经典蓝牙 GAP API 有一个函数:

#include "esp_gap_bt_api.h"
esp_err_t esp_bt_gap_read_rssi_delta(esp_bd_addr_t remote_addr)

具有以下描述:

"连接后调用此函数通过地址读取RSSI增量。ESP_BT_GAP_READ_RSSI_DELTA_EVT返回的RSSI值。

返回:ESP_OK:成功; ESP_FAIL:其他

参数:remote_addr:-远程设备地址,对应某个连接句柄。

好的,我在做什么(连接到 BT 设备后):定义我认为将包含我需要的结果的结构:

struct read_rssi_delta_param
{
esp_bd_addr_t bda; /*remote bluetooth device address*/
esp_bt_status_t stat; /*read rssi status */
int8_t rssi_delta; /*rssi delta value in range -128 ~127*/
} read_rssi_delta; /*read rssi parameter struct */

并调用函数:

esp_err_t err_code = esp_bt_gap_read_rssi_delta((uint8_t*)esp_bt_dev_get_address());

它返回 err_code = ESP_OK(0,成功)但 read_rssi_delta 结构只包含全零。

我觉得我做错了什么,因为还应该涉及一件事:ESP_BT_GAP_READ_RSSI_DELTA_EVT(见上面的描述)。它在枚举中定义:

enum esp_bt_gap_cb_event_t //BT GAP callback events.
..... skip some
ESP_BT_GAP_READ_RSSI_DELTA_EVT //read rssi event
..... etc.

在某些来源中,它被称为“事件”,在其他来源中称为“回调函数”,但没有关于如何使用它的信息!

因此,问题是:如何将所有这些东西放在一起以从设备获取 RSSI?

注意:蓝牙是经典的,不是 BLE!

最佳答案

经过几次尝试,我让 esp_bt_gap_read_rssi_delta() 开始工作。

首先要了解(以防您还没有了解)回调/事件。回调函数是代码中的一个函数,当发生特殊事件(事件)时,ESP-IDF 将调用该函数。在初始化蓝牙堆栈后,您可以通过调用 esp_bt_gap_register_callback() 来注册回调函数。

当您调用 esp_bt_gap_read_rssi_delta() 时(连接到设备后),它会立即返回 Ok 或错误状态。框架稍后会调用您的回调函数返回实际的 RSSI 读数。

回调函数有两个参数。第一个标识发生的事件,第二个标识与事件关联的数据。第二个参数是指向 esp_bt_gap_cb_param_t union 中定义的结构之一的指针。

这是 Arduino IDE 的一些框架代码(不测试返回码等),使用 BluetoothSerial 进行连接:

#include "esp_gap_bt_api.h"
#include "BluetoothSerial.h"

BluetoothSerial SerialBT;
byte addr[6] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 };

void setup() {
Serial.begin (115200);
SerialBT.begin();
esp_bt_gap_register_callback (gap_callback);
}

void loop() {
delay(100);
if (SerialBT.hasClient()) {
esp_bt_gap_read_rssi_delta (addr);
delay (10000);
}
}

void gap_callback (esp_bt_gap_cb_event_t event, esp_bt_gap_cb_param_t *param) {
if (event == ESP_BT_GAP_READ_RSSI_DELTA_EVT) {
Serial.println (param->read_rssi_delta.rssi_delta);
}
}

关于c - 如何使用 esp_bt_gap_read_rssi_delta 函数从 ESP32 获取蓝牙经典 RSSI?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52572703/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com