Explain BLE Example Code
-
Hi,
I am trying to connect the WiPy via BLE to an Android application, and I am at the stage where I am trying to understand how BLE works currently.
I was looking at the example advertising and connection code that is here: https://docs.pycom.io/chapter/firmwareapi/pycom/network/bluetooth/gattscharacteristic.html
Can someone explain to me how the code here works. My comments are how I interpret the code, based on what I've read about BLE, and basically my questions are as the comments state.
from network import Bluetooth bluetooth = Bluetooth() bluetooth.set_advertisement(name='LoPy', service_uuid=b'1234567890123456') def conn_cb (bt_o): events = bt_o.events() # Here we are checking if a device is connected. if events & Bluetooth.CLIENT_CONNECTED: print("Client connected") elif events & Bluetooth.CLIENT_DISCONNECTED: print("Client disconnected") bluetooth.callback(trigger=Bluetooth.CLIENT_CONNECTED | # Can someone explain this? Bluetooth.CLIENT_DISCONNECTED, handler=conn_cb) bluetooth.advertise(True) #Enable BLE advertising srv1 = bluetooth.service(uuid=b'1234567890123456', isprimary=True) # what is "isPrimary"? chr1 = srv1.characteristic(uuid=b'ab34567890123456', value=5) char1_read_counter = 0 def char1_cb_handler(chr): global char1_read_counter char1_read_counter += 1 # Everytime we want to read the first characteristic, increment. events = chr.events() if events & Bluetooth.CHAR_WRITE_EVENT: # When client tries to overwrite characteristic? print("Write request with value = {}".format(chr.value())) else: if char1_read_counter < 3: print('Read request on char 1') else: return 'ABC DEF' # If we try to read more than three times, we return this? Why? # What does the line below do? char1_cb = chr1.callback(trigger=Bluetooth.CHAR_WRITE_EVENT | Bluetooth.CHAR_READ_EVENT, handler=char1_cb_handler) srv2 = bluetooth.service(uuid=1234, isprimary=True) chr2 = srv2.characteristic(uuid=4567, value=0x1234) char2_read_counter = 0xF0 def char2_cb_handler(chr): global char2_read_counter char2_read_counter += 1 if char2_read_counter > 0xF1: return char2_read_counter char2_cb = chr2.callback(trigger=Bluetooth.CHAR_READ_EVENT, handler=char2_cb_handler) #What does the line above do?
Thank you all for your help and time.