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.


Log in to reply
 

Pycom on Twitter

Looks like your connection to Pycom Forum was lost, please wait while we try to reconnect.