任何人都可以给我指出正确的方向,花了两天时间却没有运气。
我唯一可以提取的是:找到设备: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()
蓝牙 LE 设备可以(但不是必须)在广告 PDU 中传输其名称。
如果您的 PC 知道设备的名称,很可能是因为它已经连接到外围设备并存储了通过其他服务(例如设备信息服务)检索到的名称。
您可以自己检查一下,例如使用通用扫描仪应用程序,例如nRF Connect for Mobile