This project aims at providing a m-in-one package for those who want to try a new networking protocol, the Named Data Networking (NDN), with their IoT apps on constrained devices, e.g., Nordic nRF58240 boards. Here "m" stands for the following 4 parts, from bottom to top:
-
communication adapation layer, which handles different communication mediums with the support from operating system (like RIOT), software development kit (like Nordic SDK), or even the raw device drivers.
-
basic NDN layer, which offers basic networking layer functionalities, including the basic security support, following the latest NDN specification.
-
application support layer, which includes some useful buliding blocks to NDN applications, such as security bootstraping, service discover as well as access control.
-
an example application, where two parties are invovled: a network controller (runs on a android phone) and two devices (Nordic nRF58240 boards).
The first 3 parts together make the NDN-Lite library, while the example application, as a reference, shows how to develop a simple application with the NDN-Lite library. Details of NDN-Lite library can be found in: https://github.com/named-data-iot/ndn-lite/wiki
Here follows a step-by-step instruction on how to compile the whole package and how to run the example application with the NDN-Lite library. As currently the library only contains full support for the nRF52840 board, the following instructions will be based on using ndn-lite and the example applications with the recommended IDE for nRF52840 board development, Segger Embedded Studio. It will also assume that Android Studio is used for Android development.
- One or more nRF52840 boards
- An Android phone
- Make sure that Segger Embedded Studio (http://infocenter.nordicsemi.com/pdf/getting_started_ses.pdf) and Android Studio (https://developer.android.com/studio/) are installed and properly functioning on the machine you would like to use for development.
a) Download the example Segger Embedded Studio project, or start a new Segger Embedded Studio project
A guide for that is here: https://drive.google.com/open?id=11yvFf8lpF1A96V9AFMaW8Cld3V1snaB1
First you will need to download NDN-Lite; you can do so from here: https://github.com/named-data-iot/ndn-lite
Whether you choose to start a new Segger Embedded Studio project or start from the example (which can be downloaded here https://github.com/gujianxiao/ndn-lite-application-for-nRF52840-BLE_version), you will have to import the NDN-Lite library into your project in order to compile it. The guide for starting a new Segger Embedded Studio project linked in part a) above contains help for accomplishing this (particularly steps 3, 4, and the "Extra Advice" section).
There is a pair of example applications meant to demonstrate how the NDN-Lite library can be used for Android to board and board to board communication.
You can find the Android example application and instructions for installing / using it here: https://github.com/gujianxiao/NDN-IoT-Android
You can find the nRF52840 example application and instructions for installing / using it here: https://github.com/gujianxiao/ndn-lite-application-for-nRF52840-BLE_version
Please note the following things when building your application using the nRF5 SDK with ndn-lite:
YOU MUST CALL THE ndn_lite_over_nrf_sdk_startup() FUNCTION AT THE BEGINNING OF YOUR MAIN FUNCTION, JUST LIKE THE EXAMPLE
This will initialize all things needed for the ndn-lite library over nRF5 SDK to function properly.
The ndn-lite library uses the nRF5 SDK's app_timer library (i.e., a multi-timer abstraction built on top of RTC1) in order to keep system time. DO NOT REINITIALIZE THIS app_timer LIBRARY WITH A CALL TO app_timer_init(). THIS WILL STOP THE NDN-LITE'S SYSTEM TIME IMPLEMENTATION FROM WORKING PROPERLY.
You can see for yourself that the app_timer library is initialized in the ndn_lite_over_nrf_sdk_startup() function.