Welcome to the Pycom forum Forum
    • \[\[global:header.categories\]\]
    • \[\[global:header.recent\]\]
    • \[\[global:header.tags\]\]
    • \[\[global:header.popular\]\]
    • Login

    Explore Pybytes | Official Documentation | Report a Firmware Bug/Issue | GitHub

    Explain BLE Example Code

    Scheduled Pinned Locked Moved Discussion
    blewipy 2.0bluetooth
    1 Posts 1 Posters 1.5k Views 1 Watching
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • P Offline
      panos29
      last edited by

      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.

      1 Reply Last reply Reply Quote 0

      Hello! It looks like you're interested in this conversation, but you don't have an account yet.

      Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

      With your input, this post could be even better 💗

      Register Login
      • 1 / 1
      • First post
        Last post

      Pycom on Twitter

      Pycom