Bluetooth lowenergy esp-idf-BLE扫描

Bluetooth lowenergy esp-idf-BLE扫描,bluetooth-lowenergy,scanning,esp-idf,Bluetooth Lowenergy,Scanning,Esp Idf,我正在使用ESP idf为我的ESP32板编程。我的目标是让它扫描特定的BLE(蓝牙低能)设备。 我通过使用“Espressif”提供的一个名为“ibeacon_demo.c”的示例,找到了如何让它扫描的方法 问题是,我不知道如何提取任何搜索设备的地址,并将其作为字符串,以便可以将其和我的BLE设备地址进行比较 ibeacon_demo.c: 我非常肯定,在这份声明中必须做些什么: if (esp_ble_is_ibeacon_packet(scan_result->scan_rst.

我正在使用ESP idf为我的ESP32板编程。我的目标是让它扫描特定的BLE(蓝牙低能)设备。 我通过使用“Espressif”提供的一个名为“ibeacon_demo.c”的示例,找到了如何让它扫描的方法 问题是,我不知道如何提取任何搜索设备的地址,并将其作为字符串,以便可以将其和我的BLE设备地址进行比较

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参考
[

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

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

esp_log_buffer_hex("IBEACON_DEMO: Device address:", scan_result->scan_rst.bda, BD_ADDR_LEN );
但是你的第二个问题需要更深入地理解如何比较字节数组。我可以告诉你地址是一个字节数组,它有6个字节长,这就是BD_ADDR_LEN常量告诉你的

现在必须比较两个字节的数组

在你弄明白这一点后,你可以进入公共和随机地址。但现在这已经足够了