This post is older than 2 years and might not be relevant anymore
More Info: Consider searching for newer posts

Regarding Python Scripts for nrf52840 to connect and transfer data.

Hi ,

What I am trying:- 

-connect the custom board with nrf52840 chip using nrf52 dongle on pc with python.

-Already set some commands on custom board so when my pc (via dongle) connects to custom board, I want to send some commands and accordingly receive the response.

For this I got my hands-on nrf dongle to give my laptop a BLE access.

And I am trying to access the board using dongle (using python script) and I am getting below error,


raise NordicSemiException('Failed to {}. Error code: {}'.format(wrapped.__name__, err_code))
pc_ble_driver_py.exceptions.NordicSemiException: Failed to open. Error code: 13.

Would anyone able to tell me how do i resolve this. 

I want to have python code that can connect and do some data transfer over BLE using Dongle connected to my pc and I have tried with hart_rate_monitor unsuccessfully. 

EDIT 1:- I am able to scan and connect my board using the nRF Connect windows app. Same I wanted to implement over python.

Thanks,

Hinesh

  • Hi,

    The line

    BASE_UUID = BLEUUIDBase([0x8E, 0xC9, 0x00, 0x00, 0xF3, 0x15, 0x4F, 0x60,
                             0x9F, 0xB8, 0x83, 0x88, 0x30, 0xDA, 0xEA, 0x50])

    creates a base UUID of

    0x8EC9xxxx-F315-4F60-9FB8-838830DAEA50

    As you can see, each value in the array of hexadecimal values corresponds to one byte of the base UUID. The two bytes that are written using x in the UUID are filled in using the call to BLEUUID, so that e.g.

        BLE_DFU_BUTTONLESS_CHAR_UUID        = BLEUUID(0x0003, BASE_UUID)

    creates the UUID of

    0x8EC90003-F315-4F60-9FB8-838830DAEA50

    So you must divide your UUID into base UUID and 16 bit part, exactly the same way.

    Regards,
    Terje

  • I have tried your suggestions and changed

    CCCD_UUID = '00002902-0000-1000-8000-00805f9b34fb'
    
    DC_SERVICE_UUID = '00001111-0000-1000-8000-00805f9b34fb'
    DATA_CHAR_UUID  = '00002222-0000-1000-8000-00805f9b34fb'
    DATA2_CHAR_UUID = '00003333-0000-1000-8000-00805f9b34fb'
    
    
    DC_SERVICE_BASE_UUID = BLEUUIDBase([0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x10, 0x00,
                                        0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb])
    ## Also Tried with above CCCD_UUID for checking as below , but not worked
    #--CCCD_BASE_UUID = BLEUUIDBase([0x00, 0x00, 0x29, 0x02, 0x00, 0x00, 0x10, 0x00,
    #                              0x80, 0x00, 0x00, 0x80, 0x5F, 0x9B, 0x34, 0xFB])
    # Buttonless characteristics
    BLE_DFU_BUTTONLESS_CHAR_UUID = BLEUUID(0x2902, DC_SERVICE_BASE_UUID)
    BLE_DFU_BUTTONLESS_BONDED_CHAR_UUID = BLEUUID(0x2901, DC_SERVICE_BASE_UUID)
    ## The 0x2902 and 0x2901 are I have checked via nrf connect app and they are showing
    ## same. I have also changed as per the suggestionns of 0x2222 and 0x1111. But
    ## not able to connect
    
    self.adapter.service_discovery(new_conn)
            self.adapter.enable_notification(new_conn,
                                             BLEUUID(0x2901, DC_SERVICE_BASE_UUID))
    ## Here also changes and tested.

    Still I get this error as below.

    ATT MTU exchanged: conn_handle=0 att_mtu=23
    ATT MTU exchange response: conn_handle=0
    Traceback (most recent call last):
      File "C:/My_Projects/Script.py", line 267, in <module>
        main(serial_port)
      File "C:/My_Projects/Script.py", line 248, in main
        conn_handle = collector.connect_and_discover()
      File "C:/My_Projects/Script.py", line 198, in connect_and_discover
        BLEUUID(0x2901, DC_SERVICE_BASE_UUID))  # BLEUUID(BLEUUID.Standard.battery_level))
      File "C:\Python27\lib\site-packages\pc_ble_driver_py\ble_driver.py", line 125, in wrapper
        err_code = wrapped(*args, **kwargs)
      File "C:\Python27\lib\site-packages\pc_ble_driver_py\ble_adapter.py", line 254, in enable_notification
        raise NordicSemiException('CCCD not found')
    pc_ble_driver_py.exceptions.NordicSemiException: CCCD not found

    I see one function below

        def enable_notification(self, conn_handle, uuid):
            cccd_list = [1, 0]
    
            handle = self.db_conns[conn_handle].get_cccd_handle(uuid)
            if handle == None:
                raise NordicSemiException('CCCD not found')

    So in this function I believe the passed 'UUID' is not correct.

    But passed in the function is correct.

    can you input here what Is going wrong?

    (Kindly ignore other copy & paste as it was not showing prior log of and log in)

    Thanks,

  • Hi,

    Why are you still defining BLE_DFU_BUTTONLESS_CHAR_UUID and BLE_DFU_BUTTONLESS_BONDED_CHAR_UUID? That was an example, for how to make UUIDs. You should do e.g.:

    DC_SERVICE_BASE_UUID = BLEUUIDBase([0x00, 0x00, 0x22, 0x22, 0x00, 0x00, 0x10, 0x00,
                                        0x80, 0x00, 0x00, 0x80, 0x5f, 0x9b, 0x34, 0xfb])
    
    DATA_CHAR_UUID  = BLEUUID(0x2222, DC_SERVICE_BASE_UUID)
    DATA2_CHAR_UUID = BLEUUID(0x3333, DC_SERVICE_BASE_UUID)
    
    self.adapter.service_discovery(new_conn)
    self.adapter.enable_notification(new_conn, DATA_CHAR_UUID)

    If you attach a screenshot of what you get in nRF Connect then I can try to explain what it means. It sounds like you have mixed up several UUIDs (what they mean and how they are used.)

    Regards,
    Terje

  • Hi

    Below is my output of the terminal.

    File "C:\Python27\lib\site-packages\pc_ble_driver_py\ble_adapter.py", line 254, in enable_notification
        raise NordicSemiException('CCCD not found')
    pc_ble_driver_py.exceptions.NordicSemiException: CCCD not found

    Also The BLE_DFU_BUTTONLESS_CHAR_UUID is there, but not using them,

  • Hi,

    Can you provide a screenshot or image from nRF Connect, showing the UUIDs that are found on the device?

    Regards,
    Terje

Related