本文介紹使用的C語言Link SDK將通信模組接入物聯網平臺。

前提條件

已集成C Link SDK所需的環境。詳細說明,請參見環境說明。本文以在Linux環境下編譯和運行SDK為例。

操作步驟

  1. 下載C Link SDK 3.0.1
  2. 從下載的文件包中提取SDK代碼。
    1. 執行命令:make menuconfig
    2. 選中ATM Configurations,單擊Select
      ATM Configurations
    3. 選中AT HAL Configurations,單擊Select
      AT HAL Configurations
    4. 配置如下項目。
      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                            
    5. 配置完成后,執行命令./extract.sh提取代碼。
      extract.sh

      提取的代碼位于output/eng目錄。

      ls

      其中,各子目錄分別包含的代碼如下表。

      目錄 代碼內容
      atm AT指令收發模塊
      dev_sign 設備身份認證模塊
      infra 內部實現模塊
      mqtt MQTT協議模塊
      wrappers HAL對接模塊
  3. 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文件的示例代碼

    在示例代碼中,替換設備證書信息為您的設備證書信息。

    wrappers
    說明 如果通信模組為其他模組,則配置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)
  4. 將SDK整合到IAR工程中。
    如下圖所示。iot_IAR
  5. 運行SDK,進行測試。
    運行成功后,設備端本地日志如下圖所示。iot_run

    登錄物聯網平臺控制臺,在對應實例下的監控運維 > 日志服務中,也可查看設備上報數據到云端的日志。