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.



Pycom on Twitter