既存の開発プロジェクトに Link SDK を追加し、まとめてコンパイルできます。次の例では、このプロセスを順に説明します。
例の説明
この例には、Hello World! を出力する hello.c という名前のテストプログラムと、それをコンパイルするための makefile が含まれています。hello のコードスニペットもダウンロードできます。
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char **argv)
{
printf("Hello World!\n\r");
return(0);
}
makefile には次の内容が含まれています。
PROG_FILE := hello.c
PROG_OBJS := $(patsubst %.c,%.o,$(PROG_FILE))
PROG = hello
all: $(PROG_OBJS)
$(CC) $(CFLAGS) -o $(PROG) $(PROG_OBJS)
./%.o: %.c
$(CC) -o $@ -c $< $(CFLAGS)
clean:
rm -f *.o $(PROG)
SDK の移植
-
SDK の取得
SDK を取得する または に記載されているパスから SDK を取得します。SDK を次のように設定します。
-
[デバイス OS] を [Linux] に設定します。
-
[IoT Platform に接続するためのプロトコル] を [MQTT] に設定します。
-
[データ暗号化] を [TLS-CA] に設定します。
-
[デバイス認証方法] を [デバイスシークレット] に設定します。
[高度な機能] は選択しないでください。 [Generate] をクリックして SDK をダウンロードします。
-
-
SDK 移植手順
SDK をダウンロードして解凍した後、次のように
hello.cが含まれるディレクトリに LinkSDK フォルダをコピーします。$ 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 -
MQTT の例のコピーと変更
LinkSDK/demos/mqtt_basic_demo.cを、hello.cが含まれるディレクトリにコピーします。mqtt_basic_demo.cで、main関数の名前をsdk_testに変更します。/* TODO: デバイス認証情報に置き換えてください。 */ char *product_key = "${YourProductKey}"; char *device_name = "${YourDeviceName}"; char *device_secret = "${YourDeviceSecret}"; /* TODO: インスタンスのエンドポイントに置き換えてください。 */ 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"; /* 中国 (上海) リージョンの Alibaba Cloud IoT Platform のドメイン名サフィックス。 */ ... } -
SDK を含めるための makefile の変更
makefile を変更して、SDK のソースコードとコピーした
mqtt_basic_demo.cファイルをコンパイルします。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)次の変更点に注意してください:
-
SDK_DIR には、デバイスが使用する機能のフォルダを含める必要があります。高度な機能を選択した場合、対応するフォルダが
LinkSDK/componentsディレクトリにあります。これらのフォルダを SDK_DIR に追加する必要があります。 -
この例では、トランスポート層セキュリティ (TLS) を使用してデータを暗号化します。そのため、SDK に含まれる mbedtls ライブラリもコンパイルされます。
SDK_INC変数は、external/mbedtls/includeディレクトリをインクルードするように指定します。 -
コンパイル済みのプログラムは Linux 上で実行され、スレッド関連のライブラリを使用します。そのため、SDK_LIBS 変数は pthread ライブラリへのリンクを指定します。
-
-
SDK を呼び出すための
hello.cの変更hello.cを変更して、mqtt_basic_demo.cのsdk_test関数を呼び出します。これにより SDK が初期化され、デバイスが Alibaba Cloud IoT Platform に接続されます。#include <stdio.h> #include <stdlib.h> /* sdk_test 関数を宣言します。 */ extern int sdk_test(int argc, char *argv[]); int main(int argc, char **argv) { printf("Hello World!\n\r"); /* SDK デモ内の sdk_test 関数を呼び出して SDK を初期化し、Alibaba Cloud IoT Platform に接続します。 */ sdk_test(0,NULL); return(0); } -
コードをコンパイルするには
makeを実行し、プログラムを実行するには./helloを実行します。hello.cが含まれるディレクトリでmakeを実行して、プログラムをコンパイルします。その後、./helloを実行します。成功すると、次の出力が表示されます。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 ハートビート応答