全部产品
Search
文档中心

IoT Platform:Integrasikan Link SDK for C ke dalam lingkungan pengembangan Linux

更新时间:Jun 21, 2025

Jika Anda memiliki proyek yang sudah ada saat mengembangkan aplikasi, Anda dapat menambahkan Link SDK for C ke proyek tersebut untuk mengompilasi program. Topik ini menjelaskan cara menambahkan Link SDK for C ke proyek yang sudah ada untuk kompilasi.

Contoh

Dalam contoh ini, program uji hello.c yang mencetak Hello World! digunakan, dan makefile digunakan untuk mengompilasi program tersebut. Untuk informasi lebih lanjut, lihat hello. Contoh kode:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char **argv)
{
        printf("Hello World!\n\r");
        return(0);
}

Makefile berisi kode berikut:

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)

Porting SDK

  1. Dapatkan SDK.

    • Atur parameter Device OS menjadi Linux.

    • Atur parameter Connection protocol menjadi MQTT.

    • Atur parameter Data encryption menjadi TLS-CA.

    • Atur parameter Device authentication scheme menjadi Device key.

    Jangan pilih opsi di bagian Advanced Capabilities. Klik Start generation untuk mengunduh SDK.

  2. Porting SDK.

    Unduh dan ekstrak paket SDK, lalu salin direktori Link SDK ke direktori tempat hello.c disimpan.

    $ 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
                            
  3. Salin dan modifikasi kode sampel untuk koneksi perangkat berbasis MQTT.

    Salin file LinkSDK/demos/mqtt_basic_demo.c ke direktori tempat file hello.c disimpan dan ubah nama fungsi main menjadi sdk_test dalam file mqtt_basic_demo.c. Modifikasi kode sampel untuk koneksi perangkat berbasis MQTT sebagai berikut:

    /* Ganti variabel dengan sertifikat perangkat Anda. */
    char *product_key       = "${YourProductKey}";
    char *device_name       = "${YourDeviceName}";
    char *device_secret     = "${YourDeviceSecret}";
    
    /*
        Ganti variabel dengan titik akhir instance Anda.
    */
    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"; /* Akhiran dari titik akhir instance IoT Platform yang ditempatkan di wilayah China (Shanghai). */
    
    ...
    }             
  4. Modifikasi makefile untuk menyertakan SDK.

    Modifikasi makefile untuk mengompilasi kode sumber SDK dan file mqtt_basic_demo.c yang disalin (termasuk potongan kode sdk_test):

    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)

    Saat memodifikasi kode di atas, perhatikan hal-hal berikut:

    • Parameter SDK_DIR harus berisi direktori fitur yang diperlukan oleh perangkat dalam SDK. Jika Anda memilih opsi di bagian Kemampuan Lanjutan, Anda dapat melihat direktori yang sesuai di direktori LinkSDK/components, dan Anda harus menambahkan direktori tersebut ke SDK_DIR.

    • Dalam contoh ini, Transport Layer Security (TLS) digunakan untuk mengenkripsi data. Dalam hal ini, mbedtls yang termasuk dalam SDK dikompilasi dan direktori external/mbedtls/include ditentukan dalam SDK_INC.

    • Program terkompilasi berjalan di Linux dan menggunakan pustaka terkait thread. Dalam hal ini, tautan ke pustaka pthread ditentukan dalam SDK_LIBS.

  5. Modifikasi hello.c untuk memanggil SDK.

    Modifikasi hello.c untuk memanggil fungsi sdk_test dalam file mqtt_basic_demo.c, inisialisasi SDK, dan hubungkan perangkat ke Alibaba Cloud IoT Platform.

    #include <stdio.h>
    #include <stdlib.h>
    
    /* Deklarasikan fungsi sdk_test.*/
    extern int sdk_test(int argc, char *argv[]);
    
    int main(int argc, char **argv)
    {
            printf("Hello World!\n\r");
            /* Panggil fungsi sdk_test dalam paket demo SDK untuk menginisialisasi SDK dan menghubungkan perangkat ke Alibaba Cloud IoT Platform.*/
            sdk_test(0,NULL);
            return(0);
    }
                            
  6. Jalankan perintah make untuk mengompilasi program. Jalankan perintah ./hello untuk mengeksekusi program.

    Jalankan perintah make di direktori tempat hello.c disimpan untuk mengompilasi program hello, lalu jalankan program tersebut. Jika tidak ada kesalahan, keluaran berikut akan ditampilkan:

    Hello World!
    [1687781092.755][LK-0313] Pengguna MQTT memanggil api aiot_mqtt_connect, tersambung
    [1687781092.755][LK-032A] host mqtt: iot-****.mqtt.iothub.aliyuncs.com
    [1687781092.755][LK-0317] nama pengguna: demo******
    memulai koneksi tcp dengan server(host='iot-******.mqtt.iothub.aliyuncs.com', port=[443])
    berhasil memulai tcp, fd=3
    port lokal: 52008
    [1687781092.811][LK-1000] memulai koneksi mbedtls dengan server(host='iot-****.mqtt.iothub.aliyuncs.com', port=[443])
    [1687781092.844][LK-1000] berhasil memulai koneksi mbedtls, (total biaya 45338 byte, maksimum digunakan 48306 byte)
    [1687781092.899][LK-0313] Koneksi MQTT berhasil dalam 137 ms
    AIOT_MQTTEVT_CONNECT
    respon detak jantung