我正在尝试解析 esp32 BLE 和 MicroPython 上的 iPhone(或任何)设备名称

问题描述 投票:0回答:1

任何人都可以给我指出正确的方向,花了两天时间却没有运气。

我唯一可以提取的是:找到设备:0a:53:32:06:1d:b0 RSSI:-30名称:无

我的电脑可以看到手机名称 - 没有问题。 我的手机可以看到我的电脑名称 - 没问题。

我的 esp32 可以“看到”除了我需要的东西之外的所有东西!比如设备名称!!!

import bluetooth
from micropython import const
import time

_IRQ_SCAN_RESULT = const(5)
_IRQ_SCAN_DONE = const(6)
_COMPLETE_LOCAL_NAME_ADTYPE = const(0x09)
_SHORTENED_LOCAL_NAME_ADTYPE = const(0x08)

class BLEScanner:
    def __init__(self, ble, rssi_threshold):
        self.ble = ble
        self.ble.active(True)
        self.ble.irq(self.irq)
        self.rssi_threshold = rssi_threshold

    def irq(self, event, data):
        if event == _IRQ_SCAN_RESULT:
            addr_type, addr, adv_type, rssi, adv_data = data
            if rssi > self.rssi_threshold:
                name = self.parse_adv_data(adv_data)
                addr_str = ":".join("{:02x}".format(byte) for byte in addr)
                print("Device found:", addr_str, "RSSI:", rssi, "Name:", name)
        elif event == _IRQ_SCAN_DONE:
            print("Scan completed")

    def parse_adv_data(self, adv_data):
        i = 0
        name = None
        while i < len(adv_data):
            field_len = adv_data[i]
            if field_len == 0:
                break
            field_type = adv_data[i + 1]
            if field_type in (_COMPLETE_LOCAL_NAME_ADTYPE, _SHORTENED_LOCAL_NAME_ADTYPE):
                name = adv_data[i + 2:i + field_len + 1].decode()
                break
            i += field_len + 1
        return name

    def start_scan(self, duration_ms):
        self.ble.gap_scan(duration_ms, 30000, 30000, True)

def main():
    ble = bluetooth.BLE()
    scanner = BLEScanner(ble, -60)
    while True:
        print("Starting BLE scan...")
        scanner.start_scan(2000)
        time.sleep(4)

main()

bluetooth-lowenergy esp32 micropython
1个回答
0
投票

蓝牙 LE 设备可以(但不是必须)在广告 PDU 中传输其名称。

如果您的 PC 知道设备的名称,很可能是因为它已经连接到外围设备并存储了通过其他服务(例如设备信息服务)检索到的名称。

您可以自己检查一下,例如使用通用扫描仪应用程序,例如nRF Connect for Mobile

© www.soinside.com 2019 - 2024. All rights reserved.