アプリケーションの開発時に既存のプロジェクトがある場合は、Link SDK for Cをプロジェクトに追加してプログラムをコンパイルできます。 このトピックでは、Link SDK for Cを既存のプロジェクトに追加してコンパイルする方法について説明します。
例:
この例では、hello World! を印刷できるHello. cテストプログラムです。 が使用され、makefileがテストプログラムのコンパイルに使用されます。 詳細については、「hello」をご参照ください。 サンプルコード:
#include <stdio.h>
# include <stdlib.h>
int main(int argc, char **argv)
{
printf (「ハローワールド!\n\r」);
リターン (0);
} makefileには次のコードが含まれています。
PROG_FILE := hello.c mqtt_basic_demo.c
PROG_OBJS := $(patsubst %.c,%.o,$(PROG_FILE))
PROG = hello
SDK_ROOT = $(シェル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)
準備:
make -C $(SDK_ROOT)
. /%.o: %.c
$(CC) -o $@ -c $< $(CFLAGS) $(SDK_INC)
クリーン:
make -C LinkSDKクリーン
rm -f *.o $(PROG) $(SDK_OBJS) SDKを移植する
SDKを取得します。
デバイスOSパラメーターをLinuxに設定します。
Connection protocolパラメーターをMQTTに設定します。
Data encryptionパラメーターをTLS-CAに設定します。
デバイス認証スキームパラメーターをデバイスキーに設定します。
[高度な機能] セクションでオプションを選択しないでください。 [生成開始] をクリックしてSDKをダウンロードします。
SDKを移植します。
SDKパッケージをダウンロードして解凍し、Link SDKディレクトリを
hello.cが保存されているディレクトリにコピーします。$ ls -l -rwxrwxrwx 1ルートルート183 5月11日19:45 hello.c drwxrwxrwx 1ルートルート4096 5月11日17:28 LinkSDK -rwxrwxrwx 1ルートルート672 5月11日19:49メイクファイルMQTTベースのデバイス接続のサンプルコードをコピーして変更します。
LinkSDK/demos/mqtt_basic_demo.cファイルをhello.cファイルが保存されているディレクトリにコピーし、mqtt_basic_demo.cファイルのmain関数の名前をsdk_testに変更します。 MQTTベースのデバイス接続のサンプルコードを次のように変更します。/* 変数をデバイス証明書に置き換えます。 * / char * product_key = "${YourProductKey}"; char * device_name = "${YourDeviceName}"; char * device_secret = "${YourDeviceSecret}"; /* 変数をインスタンスのエンドポイントに置き換えます。 * / char * mqtt_host = "${YourInstanceI d}.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"; /* 中国 (上海) リージョンにデプロイされている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 = $(シェル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), $(ワイルドカード $(dir)/*.c)) SDK_OBJS = $(patsubst %.c,%.o,$(SDK_FILES)) SDK_LIBS = -lpthread CFLAGS= $(SDK_INC) メイン:$(PROG_OBJS) $(SDK_OBJS) $(CC) $(CFLAGS) -o $(PROG) $(PROG_OBJS) $(SDK_OBJS) $(SDK_LIBS) クリーン: rm -f *.o $(PROG) $(SDK_OBJS)上記のコードを変更するときは、次の項目に注意してください。
SDK_DIRパラメーターには、SDKのデバイスで必要な機能のディレクトリが含まれている必要があります。 [高度な機能] セクションでオプションを選択した場合、
LinkSDK/componentsディレクトリの対応するディレクトリを表示でき、SDK_DIRにディレクトリを追加する必要があります。この例では、TLS (Transport Layer Security) を使用してデータを暗号化します。 この場合、SDKに含まれるmbedtlsはコンパイルされ、
external/mbedtls/includeディレクトリはSDK_INCで指定されます。コンパイルされたプログラムはLinuxで実行され、スレッド関連のライブラリを使用します。 この場合、pthreadライブラリへのリンクはSDK_LIBSで指定されます。
hello.cを変更してSDKを呼び出します。
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 (「ハローワールド!\n\r」); /* SDKデモパッケージのsdk_test関数を呼び出してSDKを初期化し、デバイスをAlibaba Cloud IoT Platformに接続します。* / sdk_test(0,NULL); リターン (0); }makeコマンドを実行してプログラムをコンパイルします。を実行します。/helloコマンドでプログラムを実行します。hello.cが格納されているディレクトリでmakeコマンドを実行し、helloプログラムをコンパイルしてから実行します。 エラーが発生しない場合は、次の出力が表示されます。
ハローワールド! [1687781092.755][LK-0313] MQTTユーザーがaiot_mqtt_connect apiを呼び出し、connect [1687781092.755][LK-032A] mqttホスト: iot-**** .mqtt.iothub.aliyuncs.com [1687781092.755][LK-0317] ユーザー名: demo ****** サーバーとのtcp接続を確立します (host='iot-****** .mqtt.iothub.aliyuncs.com '、port=[443]) tcp、fd=3を確立するための成功 ローカルポート: 52008 [1687781092.811][LK-1000] サーバーとのmbedtls接続を確立します (host='iot-**** .mqtt.iothub.aliyuncs.com '、port=[443]) [1687781092.844][LK-1000] mbedtls接続を確立する成功 (合計で45338バイト、最大使用48306バイト) [1687781092.899][LK-0313] MQTT接続成功で137 ms AIOT_MQTTEVT_CONNECT ハートビート応答