You can add the Link SDK to an existing development project and compile them together. The following example walks you through this process.
Example description
This example includes a test program named hello.c that prints Hello World! and a makefile for compiling it. You can also download the hello code snippet.
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("Hello World!\n\r");
return(0);
}
The makefile contains the following content:
PROG_FILE := hello.c mqtt_basic_demo.c
PROG_OBJS := $(patsubst %.c,%.o,$(PROG_FILE))
PROG = hello
SDK_ROOT = $(shell pwd)/LinkSDK
SDK_INC = -I$(SDK_ROOT)/output/include/
SDK_LIB = $(SDK_ROOT)/output/lib/libaiot.a -lpthread
all:prepare $(PROG_OBJS)
$(CC) $(CFLAGS) -o $(PROG) $(PROG_OBJS) $(SDK_INC) $(SDK_LIB)
prepare:
make -C $(SDK_ROOT)
./%.o: %.c
$(CC) -o $@ -c $< $(CFLAGS) $(SDK_INC)
clean:
make -C LinkSDK clean
rm -f *.o $(PROG) $(SDK_OBJS)
Port the SDK
-
Obtain the SDK.
Obtain the SDK from the path provided in Obtain an SDK or . Configure the SDK with the following settings:
-
Set Device OS to Linux.
-
Set Protocol to connect to IoT Platform to MQTT.
-
Set Data Encryption to TLS-CA.
-
Set Device Authentication Method to Device Secret.
Do not select any Advanced Features. Click Generate to download the SDK.
-
-
SDK porting procedure
After you download and decompress the SDK, copy the LinkSDK folder to the directory that contains
hello.c, as shown below:$ ls -l -rwxrwxrwx 1 root root 183 May 11 19:45 hello.c drwxrwxrwx 1 root root 4096 May 11 17:28 LinkSDK -rwxrwxrwx 1 root root 672 May 11 19:49 makefile -
Copy and modify the MQTT example.
Copy
LinkSDK/demos/mqtt_basic_demo.cto the directory that containshello.c. Inmqtt_basic_demo.c, rename themainfunction tosdk_test:/* TODO: Replace with your device credentials. */ char *product_key = "${YourProductKey}"; char *device_name = "${YourDeviceName}"; char *device_secret = "${YourDeviceSecret}"; /* TODO: Replace with the endpoint of your instance. */ char *mqtt_host = "${YourInstanceId}.mqtt.iothub.aliyuncs.com"; int sdk_test(int argc, char *argv[]) { int32_t res = STATE_SUCCESS; void *mqtt_handle = NULL; char *url = "iot-as-mqtt.cn-shanghai.aliyuncs.com"; /* The domain name suffix for Alibaba Cloud IoT Platform in the China (Shanghai) region. */ ... } -
Modify the makefile to include the SDK.
Modify the makefile to compile the SDK source code and the copied
mqtt_basic_demo.cfile. You can also download the sdk_test code snippet.PROG_FILE := hello.c mqtt_basic_demo.c PROG_OBJS := $(patsubst %.c,%.o,$(PROG_FILE)) PROG = hello SDK_ROOT = $(shell pwd)/LinkSDK SDK_DIR = $(SDK_ROOT)/core $(SDK_ROOT)/core/sysdep $(SDK_ROOT)/core/utils $(SDK_ROOT)/portfiles/aiot_port $(SDK_ROOT)/external $(SDK_ROOT)/external/mbedtls/library SDK_INC = -I$(SDK_ROOT)/external/mbedtls/include $(foreach dir, $(SDK_DIR), -I$(dir) ) SDK_FILES = $(foreach dir, $(SDK_DIR), $(wildcard $(dir)/*.c)) SDK_OBJS = $(patsubst %.c,%.o,$(SDK_FILES)) SDK_LIBS = -lpthread CFLAGS += $(SDK_INC) main:$(PROG_OBJS) $(SDK_OBJS) $(CC) $(CFLAGS) -o $(PROG) $(PROG_OBJS) $(SDK_OBJS) $(SDK_LIBS) clean: rm -f *.o $(PROG) $(SDK_OBJS)Note the following changes:
-
SDK_DIR must contain the folders for the features that your device uses. If you selected advanced features, the corresponding folders appear in the
LinkSDK/componentsdirectory. You must add these folders to SDK_DIR. -
This example uses Transport Layer Security (TLS) to encrypt data. Therefore, the mbedtls library that is included with the SDK is also compiled. The
SDK_INCvariable specifies the inclusion of theexternal/mbedtls/includedirectory. -
The compiled program runs on Linux and uses thread-related libraries. Therefore, the SDK_LIBS variable specifies the link to the pthread library.
-
-
Modify hello.c to call the SDK.
Modify
hello.cto call thesdk_testfunction frommqtt_basic_demo.c. This initializes the SDK and connects the device to Alibaba Cloud IoT Platform.#include <stdio.h> #include <stdlib.h> /* Declare the sdk_test function. */ extern int sdk_test(int argc, char *argv[]); int main(int argc, char **argv) { printf("Hello World!\n\r"); /* Call the sdk_test function in the SDK demo to initialize the SDK and connect to Alibaba Cloud IoT Platform. */ sdk_test(0,NULL); return(0); } -
To compile the code, run
make. To run the program, run./hello.Run
makein the directory that containshello.cto compile the program. Then run./helloto execute it. On success, the following output is displayed:Hello World! [1687781092.755][LK-0313] MQTT user calls aiot_mqtt_connect api, connect [1687781092.755][LK-032A] mqtt host: iot-****.mqtt.iothub.aliyuncs.com [1687781092.755][LK-0317] user name: demo****** establish tcp connection with server(host='iot-******.mqtt.iothub.aliyuncs.com', port=[443]) success to establish tcp, fd=3 local port: 52008 [1687781092.811][LK-1000] establish mbedtls connection with server(host='iot-****.mqtt.iothub.aliyuncs.com', port=[443]) [1687781092.844][LK-1000] success to establish mbedtls connection, (cost 45338 bytes in total, max used 48306 bytes) [1687781092.899][LK-0313] MQTT connect success in 137 ms AIOT_MQTTEVT_CONNECT heartbeat response