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

Running Edge Impulse on nRF52840 in a custom board.

I am trying to deploy an trained Impulse module into nRF52840, but not sure about how to do it.

In the edge impulse documentation, they mention we can link the impulse from any c application, by compiling the impulse as a shared library and link to it from a C application.

So as per instructions I have built the impulse as a shared library and have produced an shared library file (.so file).

What I need help with is linking it to my nRF application. I have no clue on how to do it.

I looked into a default blink example in the nrf-sdk built using armgcc with a makefile, in hope to include the impulse shared library in it and build an application, but to be frank the makefile written in the nrf-sdk is quite difficult for me to follow.

Please can anyone help me and point me in the right direction on how to including the shared library '.so' file with any default application in the nrf-sdk.

  • Hey! I did try this.

    But I get this error:

    CMake Error: The source directory "D:/Kshitij/v1.6.1/nrf/samples/edge_impulse/wrapper/build_nrf52840dk_nrf52840/-EI_API_KEY_HEADER=x-api-key:xxxxxxx<my-apikey>xxxxxxx" does not exist.

    I did follow the documentation line by line and did as instructed.

  • My sincerest apologies for causing this issue for you, I see now that I was missing one small part: -DEI_API_KEY_HEADER

    Please retry and let me know how that works for you. 


  • Hey, it worked! I was pulling my hairs trying to figure out what I was doing wrong. Nevermind, these things happen, haha.

    Anyway, am I suppose to grant access for including the Impulse project into the NRF connect?

    Because I got a few errors while building the project. Here are the logs:

    Building ‘D:/Kshitij/ncs/v1.6.1/zephyr/include/dt-bindings/gpio/gpio.h’ from solution ‘build’ in configuration ‘Common’
    Building ‘D:/Kshitij/ncs/v1.6.1/zephyr/include/dt-bindings/i2c/i2c.h’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/misc/generated/syscalls.json’ from solution ‘build’ in configuration ‘Common’
      zephyr/misc/generated/syscalls.json does not exist.
      Combining ‘zephyr/misc/generated/syscalls.json’
    Building ‘zephyr/misc/generated/struct_tags.json’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/CMakeFiles/parse_syscalls_target’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/parse_syscalls_target’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/include/generated/driver-validation.h’ from solution ‘build’ in configuration ‘Common’
      zephyr/include/generated/driver-validation.h does not exist.
      Combining ‘zephyr/include/generated/driver-validation.h’
    Building ‘zephyr/CMakeFiles/driver_validation_h_target’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/driver_validation_h_target’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/include/generated/kobj-types-enum.h’ from solution ‘build’ in configuration ‘Common’
      zephyr/include/generated/kobj-types-enum.h does not exist.
      Combining ‘zephyr/include/generated/kobj-types-enum.h’
    Building ‘zephyr/include/generated/otype-to-str.h’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/CMakeFiles/kobj_types_h_target’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/include/generated/otype-to-size.h’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/kobj_types_h_target’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/include/generated/syscall_list.h’ from solution ‘build’ in configuration ‘Common’
      zephyr/include/generated/syscall_dispatch.c does not exist.
      Combining ‘zephyr/include/generated/syscall_list.h’
    Building ‘zephyr/CMakeFiles/syscall_list_h_target’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/include/generated/syscall_dispatch.c’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/syscall_list_h_target’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_offsets’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/CMakeFiles/offsets.dir/arch/arm/core/offsets/offsets.c.obj’ from solution ‘build’ in configuration ‘Common’
      zephyr/CMakeFiles/offsets.dir/arch/arm/core/offsets/offsets.c.obj does not exist.
      Compiling ‘offsets.c’
    Building ‘zephyr/offsets’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/include/generated/offsets.h’ from solution ‘build’ in configuration ‘Common’
      zephyr/include/generated/offsets.h does not exist.
      Combining ‘zephyr/include/generated/offsets.h’
    Building ‘zephyr/CMakeFiles/offsets_h’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/offsets_h’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/zephyr_generated_headers’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_app’ from solution ‘build’ in configuration ‘Common’
    Building ‘app/libapp.a’ from solution ‘build’ in configuration ‘Common’
      CMakeFiles/app.dir/src/main.c.obj does not exist.
      Compiling ‘main.c’
      app\libapp.a does not exist.
      Archiving ‘libapp.a’
    Building ‘cmake_object_order_depends_target_zephyr’ from solution ‘build’ in configuration ‘Common’
    Building ‘zephyr/libzephyr.a’ from solution ‘build’ in configuration ‘Common’
      zephyr/CMakeFiles/zephyr.dir/lib/os/cbprintf.c.obj does not exist.
      zephyr/CMakeFiles/zephyr.dir/lib/os/cbprintf_packaged.c.obj does not exist.
      zephyr/CMakeFiles/zephyr.dir/lib/os/crc32c_sw.c.obj does not exist.
      zephyr/CMakeFiles/zephyr.dir/lib/os/crc32_sw.c.obj does not exist.
      Compiling ‘cbprintf.c’
      Compiling ‘cbprintf_packaged.c’
      Compiling ‘crc32c_sw.c’
      Compiling ‘crc32_sw.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/crc16_sw.c.obj does not exist.
      zephyr/CMakeFiles/zephyr.dir/lib/os/crc8_sw.c.obj does not exist.
      zephyr/CMakeFiles/zephyr.dir/lib/os/crc7_sw.c.obj does not exist.
      zephyr/CMakeFiles/zephyr.dir/lib/os/dec.c.obj does not exist.
      Compiling ‘crc16_sw.c’
      Compiling ‘crc8_sw.c’
      Compiling ‘crc7_sw.c’
      Compiling ‘dec.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/fdtable.c.obj does not exist.
      Compiling ‘fdtable.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/hex.c.obj does not exist.
      Compiling ‘hex.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/notify.c.obj does not exist.
      Compiling ‘notify.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/printk.c.obj does not exist.
      Compiling ‘printk.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/onoff.c.obj does not exist.
      Compiling ‘onoff.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/rb.c.obj does not exist.
      Compiling ‘rb.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/sem.c.obj does not exist.
      Compiling ‘sem.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/thread_entry.c.obj does not exist.
      Compiling ‘thread_entry.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/timeutil.c.obj does not exist.
      Compiling ‘timeutil.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/heap.c.obj does not exist.
      Compiling ‘heap.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/heap-validate.c.obj does not exist.
      Compiling ‘heap-validate.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/bitarray.c.obj does not exist.
      Compiling ‘bitarray.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/cbprintf_complete.c.obj does not exist.
      Compiling ‘cbprintf_complete.c’
      zephyr/CMakeFiles/zephyr.dir/lib/os/reboot.c.obj does not exist.
      Compiling ‘reboot.c’
      zephyr/CMakeFiles/zephyr.dir/misc/generated/configs.c.obj does not exist.
      Compiling ‘configs.c’
      zephyr/CMakeFiles/zephyr.dir/soc/arm/nordic_nrf/validate_base_addresses.c.obj does not exist.
      Compiling ‘validate_base_addresses.c’
      zephyr/CMakeFiles/zephyr.dir/soc/arm/nordic_nrf/validate_enabled_instances.c.obj does not exist.
      Compiling ‘validate_enabled_instances.c’
      zephyr/CMakeFiles/zephyr.dir/subsys/cpp/cpp_init_array.c.obj does not exist.
      Compiling ‘cpp_init_array.c’
      zephyr/CMakeFiles/zephyr.dir/subsys/cpp/cpp_ctors.c.obj does not exist.
      Compiling ‘cpp_ctors.c’
      zephyr/CMakeFiles/zephyr.dir/subsys/cpp/cpp_dtors.c.obj does not exist.
      Compiling ‘cpp_dtors.c’
      zephyr/CMakeFiles/zephyr.dir/subsys/pm/power.c.obj does not exist.
      Compiling ‘power.c’
      zephyr/CMakeFiles/zephyr.dir/subsys/pm/pm_ctrl.c.obj does not exist.
      Compiling ‘pm_ctrl.c’
      zephyr/CMakeFiles/zephyr.dir/subsys/pm/policy/policy_residency.c.obj does not exist.
      Compiling ‘policy_residency.c’
      zephyr/CMakeFiles/zephyr.dir/drivers/console/uart_console.c.obj does not exist.
      Compiling ‘uart_console.c’
      zephyr/CMakeFiles/zephyr.dir/drivers/clock_control/clock_control_nrf.c.obj does not exist.
      Compiling ‘clock_control_nrf.c’
      zephyr/CMakeFiles/zephyr.dir/drivers/timer/sys_clock_init.c.obj does not exist.
      Compiling ‘sys_clock_init.c’
      zephyr/CMakeFiles/zephyr.dir/drivers/timer/nrf_rtc_timer.c.obj does not exist.
      zephyr/CMakeFiles/zephyr.dir/D_/Kshitij/ncs/v1.6.1/nrfxlib/crypto/nrf_cc310_platform/src/nrf_cc3xx_platform_abort_zephyr.c.obj does not exist.
      Compiling ‘nrf_rtc_timer.c’
      Compiling ‘nrf_cc3xx_platform_abort_zephyr.c’
      zephyr/CMakeFiles/zephyr.dir/D_/Kshitij/ncs/v1.6.1/nrfxlib/crypto/nrf_cc310_platform/src/nrf_cc3xx_platform_mutex_zephyr.c.obj does not exist.
      Compiling ‘nrf_cc3xx_platform_mutex_zephyr.c’
      zephyr\libzephyr.a does not exist.
      Archiving ‘libzephyr.a’
    Building ‘D:/Kshitij/ncs/v1.6.1/zephyr/misc/empty_file.c’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_..__nrf__drivers__hw_cc310’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_..__nrf__lib__fatal_error’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_arch__arm__core__aarch32’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_arch__arm__core__aarch32__cortex_m’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_arch__arm__core__aarch32__mpu’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_isr_tables’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_arch__common’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_drivers__gpio’ from solution ‘build’ in configuration ‘Common’
    Building ‘cmake_object_order_depends_target_drivers__serial’ from solution ‘build’ in configuration ‘Common’
    Building ‘edge_impulse/src/edge_impulse_project-stamp/edge_impulse_project-mkdir’ from solution ‘build’ in configuration ‘Common’
      edge_impulse/src/edge_impulse_project-stamp/edge_impulse_project-mkdir does not exist.
      Combining ‘edge_impulse/src/edge_impulse_project-stamp/edge_impulse_project-mkdir’
    Building ‘edge_impulse/src/edge_impulse_project-stamp/edge_impulse_project-download’ from solution ‘build’ in configuration ‘Common’
      edge_impulse/src/edge_impulse_project-stamp/edge_impulse_project-download does not exist.
      Combining ‘edge_impulse/src/edge_impulse_project-stamp/edge_impulse_project-download’
        downloading 'http://studio.edgeimpulse.com/v1/api/33126/deployment/download?type=zip&modelType=int8' failed
        401 Unauthorized
        downloading 'http://studio.edgeimpulse.com/v1/api/33126/deployment/download?type=zip&modelType=int8' failed
        401 Unauthorized
        downloading 'http://studio.edgeimpulse.com/v1/api/33126/deployment/download?type=zip&modelType=int8' failed
        401 Unauthorized
        downloading 'http://studio.edgeimpulse.com/v1/api/33126/deployment/download?type=zip&modelType=int8' failed
        401 Unauthorized
        downloading 'http://studio.edgeimpulse.com/v1/api/33126/deployment/download?type=zip&modelType=int8' failed
        401 Unauthorized
        downloading 'http://studio.edgeimpulse.com/v1/api/33126/deployment/download?type=zip&modelType=int8' failed
        401 Unauthorized
    Build failed

  • I suppose converting this ticket to private, this way you can share the whole or more information on the -DEI_API_KEY_HEADER command.

  • Hey thank you!, I am able to add the Header and was successful at creating the project.

    But while building the default wrapper example as it is, I am facing a 401 Unauthorized error along with several others, I have shared my build logs in the previous comment.

Related