esp-idf BLE扫描

时间:2019-10-29 03:51:08

标签: bluetooth-lowenergy scanning esp-idf

我正在使用ESP-idf对我的ESP32开发板进行编程。我的目标是使其扫描特定的BLE(蓝牙低功耗)设备。 我想出了如何使用“乐鑫”提供的示例之一“ ibeacon_demo.c”进行扫描。 问题是我不知道如何提取任何搜索到的设备的地址并将其作为字符串,因此我可以将其与我的BLE设备地址进行比较。

ibeacon_demo.c: https://github.com/pycom/pycom-esp-idf/blob/master/examples/bluetooth/ble_ibeacon/main/ibeacon_demo.c

我很确定此声明中必须要做一些事情:

 if (esp_ble_is_ibeacon_packet(scan_result->scan_rst.ble_adv, scan_result->scan_rst.adv_data_len)){
            esp_ble_ibeacon_t *ibeacon_data = (esp_ble_ibeacon_t*)(scan_result->scan_rst.ble_adv);
            ESP_LOGI(DEMO_TAG, "----------iBeacon Found----------");
            esp_log_buffer_hex("IBEACON_DEMO: Device address:", scan_result->scan_rst.bda, BD_ADDR_LEN );
            esp_log_buffer_hex("IBEACON_DEMO: Proximity UUID:", ibeacon_data->ibeacon_vendor.proximity_uuid, ESP_UUID_LEN_128);

            uint16_t major = ENDIAN_CHANGE_U16(ibeacon_data->ibeacon_vendor.major);
            uint16_t minor = ENDIAN_CHANGE_U16(ibeacon_data->ibeacon_vendor.minor);
            ESP_LOGI(DEMO_TAG, "Major: 0x%04x (%d)", major, major);
            ESP_LOGI(DEMO_TAG, "Minor: 0x%04x (%d)", minor, minor);
            ESP_LOGI(DEMO_TAG, "Measured power (RSSI at a 1m distance):%d dbm", ibeacon_data->ibeacon_vendor.measured_power);
            ESP_LOGI(DEMO_TAG, "RSSI of packet:%d dbm", scan_result->scan_rst.rssi);
        }

这是我使用“ ibeacon_demo.c”的示例的API参考。 [https://docs.espressif.com/projects/esp-idf/en/latest/api-reference/bluetooth/esp_gap_ble.html#_CPPv428esp_ble_gap_update_whitelistb13esp_bd_addr_t22esp_ble_wl_addr_type_t][1]

1 个答案:

答案 0 :(得分:0)

您的问题分为两部分,如何提取地址以及如何将其与您要查找的地址进行比较。

第一个已经为您解答,因为此示例正在提取地址并将其放在日志中:

esp_log_buffer_hex("IBEACON_DEMO: Device address:", scan_result->scan_rst.bda, BD_ADDR_LEN );

但是您的第二个问题对如何比较字节数组有更深入的了解。我可以通过告诉您地址是一个字节数组并且长度为6个字节来帮助您了解第二部分,这就是BD_ADDR_LEN常量告诉您的内容。

现在,您必须比较2个字节的数组。

弄清楚了之后,您可以进入公开地址和随机地址。但是现在就足够了。