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
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.
Porting SDK.
Unduh dan ekstrak paket SDK, lalu salin direktori Link SDK ke direktori tempat
hello.cdisimpan.$ 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 makefileSalin dan modifikasi kode sampel untuk koneksi perangkat berbasis MQTT.
Salin file
LinkSDK/demos/mqtt_basic_demo.cke direktori tempat filehello.cdisimpan dan ubah nama fungsimainmenjadisdk_testdalam filemqtt_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). */ ... }Modifikasi makefile untuk menyertakan SDK.
Modifikasi makefile untuk mengompilasi kode sumber SDK dan file
mqtt_basic_demo.cyang 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/includeditentukan dalamSDK_INC.Program terkompilasi berjalan di Linux dan menggunakan pustaka terkait thread. Dalam hal ini, tautan ke pustaka pthread ditentukan dalam SDK_LIBS.
Modifikasi hello.c untuk memanggil SDK.
Modifikasi hello.c untuk memanggil fungsi
sdk_testdalam filemqtt_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); }Jalankan perintah
makeuntuk mengompilasi program. Jalankan perintah./hellountuk 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