本文介紹使用的C語言Link SDK將通信模組接入物聯網平臺。
前提條件
操作步驟
- 下載C Link SDK 3.0.1。
- 從下載的文件包中提取SDK代碼。
- 執行命令:make menuconfig。
- 選中ATM Configurations,單擊Select。
- 選中AT HAL Configurations,單擊Select。
- 配置如下項目。
FEATURE_PLATFORM_HAS_STDINT=y FEATURE_INFRA_STRING=y FEATURE_INFRA_NET=y FEATURE_INFRA_LIST=y FEATURE_INFRA_LOG=y FEATURE_INFRA_LOG_ALL_MUTED=y FEATURE_INFRA_LOG_MUTE_FLW=y FEATURE_INFRA_LOG_MUTE_DBG=y FEATURE_INFRA_LOG_MUTE_INF=y FEATURE_INFRA_LOG_MUTE_WRN=y FEATURE_INFRA_LOG_MUTE_ERR=y FEATURE_INFRA_LOG_MUTE_CRT=y FEATURE_INFRA_TIMER=y FEATURE_INFRA_SHA256=y FEATURE_INFRA_REPORT=y FEATURE_INFRA_COMPAT=y FEATURE_DEV_SIGN=y FEATURE_MQTT_COMM_ENABLED=y FEATURE_MQTT_DEFAULT_IMPL=y FEATURE_MQTT_DIRECT=y FEATURE_DEVICE_MODEL_CLASSIC=y FEATURE_ATM_ENABLED=y FEATURE_AT_TCP_ENABLED=y FEATURE_AT_PARSER_ENABLED=y FEATURE_AT_TCP_HAL_SIM800=y
- 配置完成后,執行命令./extract.sh提取代碼。
提取的代碼位于output/eng目錄。
其中,各子目錄分別包含的代碼如下表。
目錄 代碼內容 atm AT指令收發模塊 dev_sign 設備身份認證模塊 infra 內部實現模塊 mqtt MQTT協議模塊 wrappers HAL對接模塊
- 在wrappers目錄下,新建文件wrappers.c,該文件中的代碼需實現以下HAL函數。
int32_t HAL_AT_Uart_Deinit(uart_dev_t *uart) int32_t HAL_AT_Uart_Init(uart_dev_t *uart) int32_t HAL_AT_Uart_Recv(uart_dev_t *uart, void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout) int32_t HAL_AT_Uart_Send(uart_dev_t *uart, const void *data, uint32_t size, uint32_t timeout) int HAL_GetFirmwareVersion(char *version) int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN]) int HAL_GetDeviceSecret(char device_secret[IOTX_DEVICE_SECRET_LEN]) int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN]) void *HAL_Malloc(uint32_t size) void HAL_Free(void *ptr) void *HAL_MutexCreate(void) void HAL_MutexDestroy(void *mutex) void HAL_MutexLock(void *mutex) void HAL_MutexUnlock(void *mutex) void HAL_Printf(const char *fmt, ...) void HAL_SleepMs(uint32_t ms) int HAL_Snprintf(char *str, const int len, const char *fmt, ...) uint64_t HAL_UptimeMs(void)
下載wrappers.c文件的示例代碼。
在示例代碼中,替換設備證書信息為您的設備證書信息。
說明 如果通信模組為其他模組,則配置FEATURE_AT_TCP_HAL_SIM800=n
,且需實現的HAL函數列表如下所示。int HAL_AT_CONN_Close(int fd, int32_t remote_port) int HAL_AT_CONN_Deinit(void) int HAL_AT_CONN_DomainToIp(char *domain, char ip[16]) int HAL_AT_CONN_Init(void) int HAL_AT_CONN_Send(int fd, uint8_t *data, uint32_t len, char remote_ip[16], int32_t remote_port, int32_t timeout) int HAL_AT_CONN_Start(at_conn_t *conn) int32_t HAL_AT_Uart_Deinit(uart_dev_t *uart) int32_t HAL_AT_Uart_Init(uart_dev_t *uart) int32_t HAL_AT_Uart_Recv(uart_dev_t *uart, void *data, uint32_t expect_size, uint32_t *recv_size, uint32_t timeout) int32_t HAL_AT_Uart_Send(uart_dev_t *uart, const void *data, uint32_t size, uint32_t timeout) int HAL_GetDeviceName(char device_name[IOTX_DEVICE_NAME_LEN + 1]) int HAL_GetDeviceSecret(char device_secret[IOTX_DEVICE_SECRET_LEN + 1]) int HAL_GetFirmwareVersion(char *version) int HAL_GetProductKey(char product_key[IOTX_PRODUCT_KEY_LEN + 1]) void *HAL_Malloc(uint32_t size) void HAL_Free(void *ptr) void *HAL_MutexCreate(void) void HAL_MutexDestroy(void *mutex) void HAL_MutexLock(void *mutex) void HAL_MutexUnlock(void *mutex) void HAL_Printf(const char *fmt, ...) void HAL_SleepMs(uint32_t ms) int HAL_Snprintf(char *str, const int len, const char *fmt, ...) uint64_t HAL_UptimeMs(void)
- 將SDK整合到IAR工程中。如下圖所示。
- 運行SDK,進行測試。運行成功后,設備端本地日志如下圖所示。
登錄物聯網平臺控制臺,在對應實例下的監控運維 > 日志服務中,也可查看設備上報數據到云端的日志。