本文介绍使用的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

    登录物联网平台控制台,在对应实例下的监控运维 > 日志服务中,也可查看设备上报数据到云端的日志。