• Home
  • Resources
    • User Guides
    • Concepts Articles
    • API References
    • Client Libraries & SDKs
    • Product Updates
  • FAQs
    • General
    • IoTConnect
      • Device Rules
      • Devices
      • Settings
      • Device Commands
      • Device Templates
      • Device Firmware
      • Device Onboarding
    • Security
  • Contact Us
  • Home
  • Resources
    • User Guides
    • Concepts Articles
    • API References
    • Client Libraries & SDKs
    • Product Updates
  • FAQs
    • General
    • IoTConnect
      • Device Rules
      • Devices
      • Settings
      • Device Commands
      • Device Templates
      • Device Firmware
      • Device Onboarding
    • Security
  • Contact Us

Client Libraries & SDKs

home/Documentation/Client Libraries & SDKs
  • Device SDK Reference
    • Overview
    • Device Authentication Options
    • Data Flow
    • Public Methods
      • Device Connection
      • Send Telemetry
      • Get Attributes
      • Send acknowledgment
      • Update Twin
    • SDKs (Message version 1.0)
      • DOT NET (C#)
      • Node.js
      • Java
      • Python
      • iOS
      • Android
      • Embedded
      • C language
      • Build Your Own SDK
      • Node-RED
        • IoTConnect Node-red 1.0.9
        • IoTConnect Node-red 1.0.8
      • Node-RED Subflow
        • Single Device
        • Multiple Device
    • SDKs (Message version 2.1)
      • Python
      • DOT NET (C#)
      • C language
        • IoTConnect Generic C SDK
          • Linux Build Instructions
          • Windows Build Instructions
      • Python 1.1
    • Code Samples
      • Node.js
        • TPM 3.1
        • Standard SDK 3.0
        • Standard
        • TPM
        • Standard SDK 3.0.1
        • Standard 2.0
      • Java
        • Standard
        • Standard 2.0
        • Standard 3.0
      • Python
        • Standard 2.0
        • TPM 2.1
        • Standard 3.0.1
        • Standard
        • TPM
          • TPM 3.0.1
        • TPM 3.0
        • Standard 3.0.2
        • Standard 3.0.3
        • Standard 3.0.4
        • Python SDK
      • iOS
        • ios1.0.1
      • C Language
        • nRF9160 DK
        • STM32L4
        • ESP32
        • Standard 3.0
        • Standard 2.0
        • Standard 3.1
      • Android
        • Standard 3.0
        • Standard 2.0.6
        • Standard 2.0.0
      • DOT NET (C#)
        • Standard
        • Standard 2.0
        • Standard 3.0
    • Device Message 1.0
      • D2C (Device to Cloud)
        • IoTConnect SDK
        • Custom SDK
      • C2D (Cloud to Device)
        • IoTConnect SDK
        • Custom SDK
      • Troubleshooting & Response codes
      • Know Your Essentials
    • Device Message 2.1
    • AWS Device Message 2.1
    • SDK Deep-diving
Download PDF

Standard 3.1

Card Image

C Language : nRF9160 SDK

Version 3.1

Updated On 01/24

nRF9160 Board – Sample Code of SDK

# Date Name Download
1 29/01/2024 Nordic nRF9160 SDK 3.1 Download

How to run a C sample code nRF9160 Board?

Prerequisite

  • Install for nRF9160 nRF SDK with 2.5.0 version will come along with modem firmware version 1.3.5 and complete Getting Started with nRF9160 DK.
    – Reference link to install
  • Install the latest visual studio code along with nrf connect extentions to run the application.

Installation

  • For making new application, create a folder in nrf-sample folder and name is “IoTConnect” where you installed nRFConnet SDK.
    • Path to create folder : e.g.(C:\nordic\v2.5.0\nrf\samples\).
  • Now unzip the “iotconnect-C-sdk-nRF-3.1.zip” SDK which you have downloaded from our IoTConnect help portal.
  • We have “IoTConnect_config.h” file in nRF9160-DK\src with “main.c”(You can download this firmware file from above sample code).
    • You need to input “uniqueId”, “CPID” and “env” in IoTConnect_config.h file. You can see more in below section title with “Prerequisite input data”
  • In the other folder “nRF9160-DK\IoTConnect\cert” we have a “certificate.h” in here you have to put your device certificate

#define CLOUD_CLIENT_PRIVATE_KEY \
"-----BEGIN RSA PRIVATE KEY-----\n"
----------------------------------
----------------------------------
"-----END RSA PRIVATE KEY-----\n"

#define CLOUD_CLIENT_PUBLIC_CERTIFICATE \
"-----BEGIN CERTIFICATE-----\n"
----------------------------------
----------------------------------
"-----END CERTIFICATE-----\n"

#define CLOUD_CA_CERTIFICATE \
"-----BEGIN CERTIFICATE-----\n" \
----------------------------------
----------------------------------
"-----END CERTIFICATE-----\n"

Usage:

To initialize the SDK object need to import below sdk package

#include "IoTConnect_Config.h"
#include "main.h"

 

Prerequisite input data

#define  IOTCONNECT_DEVICE_CP_ID        "yourCpid"";
#define  IOTCONNECT_DEVICE_UNIQUE_ID    "yourUniqueID";
#define  IOTCONNECT_DEVICE_ENV          IoTConnectENV";
  • IOTCONNECT_DEVICE_UNIQUE_ID : Its device ID which register on IotConnect platform and also its status has Active and Acquired.
  • IOTCONNECT_DEVICE_CP_ID : It is the company code. It gets from the IoTConnect UI portal “Settings->Key Vault”.
  • IOTCONNECT_DEVICE_ENV : It is the UI platform environment. It gets from the IoTConnect UI portal “Settings->Key Vault”.

SdkOptions is for the SDK configuration and needs to parse in SDK object initialize call. You need to manage the below configuration as per your device authentication type.

cJSON *SDKoption;
SDKoption = cJSON_CreateObject();
char *SDK_option = cJSON_PrintUnformatted(SDKoption);

Note: sdkOptions is optional. For now not require any configuration to set in sdkOptions so set as NULL.

 

To Initialize the SDK object and connect to the cloud

IoTConnect_init(IOTCONNECT_DEVICE_CP_ID, IOTCONNECT_DEVICE_UNIQUE_ID, DeviceCallback, TwinUpdateCallback, 
SDK_option, IOTCONNECT_DEVICE_ENV);

To Connect mqtt client with IoTConnect

IoTConnect_connect();

To receive the command from Cloud to Device(C2D)

void DeviceCallback(char *payload){
	printk("\n Cmd_msg >>  %s",payload);
	if(payload.cmdType == "0x01")
		// Device Command
	if(payload.cmdType == "0x02")
		// Firmware Command
	if(payload.cmdType == "0x16")
		// Device connection status
}

This is the standard data input format for Gateway and non Gateway device to send the data on IoTConnect cloud(D2C)

// Example For Non Gateway Device 
String Attribute_json_Data = [{
	"uniqueId": "<< Device UniqueId >>",
	"time" : "<< date >>",
	"data": {}
}];
SendData(Attribute_json_Data);
  • time : Date format should be as defined # “2021-01-24T10:06:17.857Z”
  • data : JSON data type format # {“temperature”: 15.55, “gyroscope” : { ‘x’ : -1.2 }}

To send the command acknowledgment from device to cloud.

Ack_Json=cJSON_CreateObject();
	cJSON_AddStringToObject(Ack_Json, "ackId", cmd_ackID);
	cJSON_AddStringToObject(Ack_Json, "msg", "");
	cJSON_AddNumberToObject(Ack_Json, "st", Status);
	char *Ack_Json_Data = cJSON_Print(Ack_Json);

    int msgType = ""; // 5 ("0x01" device command), 11 ("0x02" Firmware OTA command)
    SendAck(Ack_Json_Data, msgType);
  • ackId(*) : Command Acknowledgment GUID which will receive from command payload
    (data.ackId)
  • st(*) : Acknowledgment status sent to cloud
    4 = Fail
    6 = Device command[0x01]
    7 = Firmware OTA command[0x02])
  • msg : It is used to send your custom message
  • childId : It is used for Gateway’s child device OTA update only
    0x01 : null or “” for Device command
    0x02 : null or “” for Gateway device and mandatory for Gateway child device’s OTA update.
    How to get the “childId”?
    – You will get child uniqueId for child device OTA command from payload “data.urls[~].uniqueId”
  • msgType : Message type
    5 = Device command[0x01]
    11 = Firmware OTA command[0x02]

 

To receive the twin from Cloud to Device(C2D)

void TwinUpdateCallback(char *payload){
	printk("\n Twin_msg payload is >>  %s", payload);
} 

To update the Twins reported property

char *key = "twin01", *value = "18";
UpdateTwin(key,value);
  • key : Desired property key received from Twin callback message
  • value : Value of the respective desired property

Get all the Twin property from the cloud to your device.

GetAllTwins();

To disconnect the device from IoTConnect cloud

IoTConnect_abort(); 

Powered by Softweb – An Avnet Company.

Copyright ©2022 Avnet, Inc. All rights reserved.

Human Rights Privacy Terms of Use