BLE connection issue
-
I'm using a FiPy sitting on the PyTrack. I have updated all devices to their newest firmware version. I'm using the Bluetooth example from Github. I am some times (completely at random) able to connecto to a BLE device, but more often than not, the "connection refused" message pops up. Why? The few times I have managed to establish a connection I get this:
connecting to b'\xd2\xe0\xd0\xeb*\xfd'
Reading chars from service = 1800
char 10752 value = b'SENSOR'
char 10753 value = b'\x00\x00'
char 10756 value = b'\x10\x00<\x00\x00\x00\x90\x01'
Reading chars from service = 1801
Reading chars from service = b'\x9e\xca\xdc$\x0e\xe5\xa9\xe0\x93\xf3\xa3\xb5\x01\x00@n'What does this mean? The BLE device is capable of transmitting: Temperature and humidity, brightness, x,y,z-coordinates and angular velpcity.
I'm able to connect the BLE device using BLE scanner 4.0 for ios and through there I can easily read changes from the sensors.
Cheers
SimiamiDrew
-
Were you able to resolve this issue? I am having same issue with nRF BLE but it works with another Pycom BLE device.
-
@SimiamiDrew Could you also print the
adv_type
for the device before you attempt to connect?
-
@SimiamiDrew Can you please edit your post and add ``` alone on a line both before and after your code? That will format it properly. Or select the code and click on one of the two code icons in the toolbar.
-
@jcaron
The code i'm using is:Insert Code Here from network import Bluetooth import binascii import time bt = Bluetooth() bt.start_scan(-1) while True: adv = bt.get_adv() if adv: # try to get the complete name print(bt.resolve_adv_data(adv.data, Bluetooth.ADV_NAME_CMPL)) # try to get the manufacturer data (Apple's iBeacon data is sent here) mfg_data = bt.resolve_adv_data(adv.data, Bluetooth.ADV_MANUFACTURER_DATA) if mfg_data: # try to get the manufacturer data (Apple's iBeacon data is sent here) print(binascii.hexlify(mfg_data)) if bt.resolve_adv_data(adv.data, Bluetooth.ADV_NAME_CMPL) == 'SENSOR': conn = bt.connect(adv.mac) print("connecting to",adv.mac ) services = conn.services() for service in services: time.sleep(0.050) if type(service.uuid()) == bytes: print('Reading chars from service = {}'.format(service.uuid())) else: print('Reading chars from service = %x' % service.uuid()) chars = service.characteristics() for char in chars: if (char.properties() & Bluetooth.PROP_READ): print('char {} value = {}'.format(char.uuid(), char.read())) conn.disconnect() break else: time.sleep(0.050``` And the "connection refused"- message ![Connection refused.PNG](/assets/uploads/files/1559033864046-connection-refused.png)
-
@SimiamiDrew What exactly tells you "connection refused"? I don't think that concept actually exists in BLE, this looks more like an unrelated TCP thing.
Can you share the actual code you use as well as the actual logs?
-
@jcaron Maybe, but before every test I make sure to not be connected to the device, so as to the FiPy is the only possible device that'll search and connect to the BLE device.
-
@SimiamiDrew Maybe the device only accepts one connection at a time and you have something else already connected?