BlueTooth advertising data
-
Tag: Bletooth data
This is maybe easier to see here:
http://bellacon.com/Forum/advertising.html
I am trying to receive content of advertising packet as I am receiving using TI sniffer.
When my adv data is set to test pattern:
010102030405060708090a0b0c0d0e0f1011121314151617
I can clearly see it in TI sniffer:
As well in content of adv.data:
(mac=b'\xb4\x99Ld\xba\xc9', addr_type=0, adv_type=0, rssi=-55, data=b'\x01\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\xca\x00\xf8\xff\xfd?\x1c')
b'\x01\x01\x02\x03\x04\x05\x06\x07\x08\t\n\x0b\x0c\r\x0e\x0f\x10\x11\x12\x13\x14\x15\x16\x17\xca\x00\xf8\xff\xfd?\x1c'
010102030405060708090a0b0c0d0e0f1011121314151617ca00f8fffd3f1c
NoneCode to print above lines is:
adv = bluetooth.get_adv()
print(adv)
print(adv.data)
print( binascii.hexlify(adv.data).decode("utf-8"))print(bluetooth.resolve_adv_data(adv.data, Bluetooth.ADV_MANUFACTURER_DATA))
When advertising packet data changes to contain my sensor data, there is Scan request performed by WiPy as it is clerly visible on sniffed data below:
and there is no mention of needed data:
01A8681E.....
in WiPy output...:
(mac=b'\xb4\x99Ld\xba\xc9', addr_type=0, adv_type=0, rssi=-54, data=b'\x01h\n\tSensorTag\x05\x12P\x00 \x03\x02\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00')
b'\x01h\n\tSensorTag\x05\x12P\x00 \x03\x02\n\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'
01680a0953656e736f72546167051250002003020a00000000000000000000
NoneSo my question is: How do I receive data contained in Advertising packet (01A8 to 9F01) ???
bluetooth = Bluetooth()
bluetooth.start_scan(-1)
allmessagecount=0while True:
try:
adv = bluetooth.get_adv()if adv:
if (allmessagecount %2) == 0:
pycom.rgbled(0x000030)
else:
pycom.rgbled(0x00007f)
allmessagecount=allmessagecount+1gc.collect()
print(adv)
print(adv.data)
print( binascii.hexlify(adv.data).decode("utf-8"))mfg_data = bluetooth.resolve_adv_data(adv.data, Bluetooth.ADV_MANUFACTURER_DATA)
print(mfg_data)except Exception as err:
print('MainLoop-ERR#: ',err)
gc.collect()
-
Make sure you are sending the correct length and AD types according to the ADVERTISING AND SCAN RESPONSE DATA FORMAT (page 2081 on the Bluetooth 4.2 Core Spec - you can access the specification here https://www.bluetooth.com/specifications/adopted-specifications ).
If you're looking to use BLE advertising packets to send your data you probably want to use AD type 0xFF (Manufacturer Specific Data) followed by the 2 company identifier octets.
So your format should be 1 byte length + 0xFF + <2 bytes company identifier> + your data then filled with 00 until the 31 byte limit.
You can't read improperly formatted advertising data.